12 Ograniczanie kontroli agenta

Przegląd

Możesz kontrolować, których kluczy pozycji agent Zabbix lub agent 2 może używać albo których nie może używać podczas wykonywania kontroli pozycji, zdalnych poleceń lub skryptów.

Aby to zrobić, użyj tych parametrów konfiguracji agenta do zdefiniowania reguł zezwalania/odrzucania:

  • AllowKey=<pattern>
  • DenyKey=<pattern>

<pattern> musi zawierać pojedynczy klucz pozycji i obsługuje symbole wieloznaczne (*). Symbol wieloznaczny dopasowuje dowolną liczbę dowolnych znaków w swoim położeniu i może być używany do dopasowywania kluczy pozycji lub parametrów (np. vfs.file.*[*]).

Aby zwiększyć bezpieczeństwo, zaleca się używanie dokładnych kluczy pozycji zamiast symboli wieloznacznych. Szczegóły znajdują się w sekcji Zabezpieczanie reguł zezwalania/odrzucania.

W przeciwieństwie do innych parametrów konfiguracji agenta możesz określić nieograniczoną liczbę parametrów AllowKey lub DenyKey.

Ważne uwagi

  • Wszystkie pozycje system.run są domyślnie wyłączone (nawet gdy DenyKey jest puste), tak jakby DenyKey=system.run[*] było ustawione jako ostatnia reguła. Z tego powodu możesz zezwolić na określone pozycje system.run bez jawnego zabraniania innych pozycji system.run.

  • Pozycja określona w AllowKey musi być również określona w DenyKey (z wyjątkiem pozycji system.run); w przeciwnym razie agent Zabbix nie uruchomi się.

  • Jeśli to możliwe, używaj AllowKey, aby zezwalać tylko na wymagane pozycje i zabraniać wszystkiego innego. Niektóre klucze mogą zostać wykorzystane do odczytu niezamierzonych plików poprzez przechodzenie po ścieżkach (np. vfs.file.contents["../../../../etc/passwd"]), a nowe wersje agenta Zabbix mogą wprowadzać klucze nieobjęte regułami DenyKey.

  • Konfiguracja AllowKey i DenyKey nie wpływa na parametry agenta HostnameItem, HostMetadataItem ani HostInterfaceItem.

  • Zabronione pozycje stają się nieobsługiwane bez żadnych wskazówek ani komunikatów o błędach; na przykład:

    • Parametr wiersza poleceń agenta Zabbix --print (-p) nie pokaże kluczy zabronionych pozycji.
    • Parametr wiersza poleceń agenta Zabbix --test (-t) zwróci „Unsupported item key.” dla kluczy zabronionych pozycji.
    • Gdy rejestrowanie jest włączone (LogRemoteCommands=1), plik dziennika agenta Zabbix nie będzie rejestrować zabronionych zdalnych poleceń.

Kolejność reguł zezwalania/odmawiania

Możesz określić nieograniczoną liczbę reguł AllowKey lub DenyKey, jednak ich kolejność ma znaczenie.

  • Reguły są oceniane jedna po drugiej, od góry do dołu.
  • Gdy klucz pozycji pasuje do reguły, zostaje odpowiednio dozwolony lub zabroniony, a ocena reguł zostaje zatrzymana.

Na przykład podczas oceny vfs.file.contents[/etc/passwd] reguły są przetwarzane w następujący sposób:

AllowKey=vfs.file.contents[/tmp/app.log]    # Wzorzec klucza pozycji nie pasuje, agent przechodzi do następnej reguły.
AllowKey=vfs.file.contents[/etc/passwd]     # Wzorzec klucza pozycji pasuje; agent zezwala na sprawdzenie pozycji i zatrzymuje ocenę reguł.
DenyKey=vfs.file.*[*]                       # Agent ignoruje regułę, ponieważ ocena została zatrzymana.

Poniższa kolejność reguł spowoduje odmowę sprawdzenia pozycji:

DenyKey=vfs.file.*[*]                       # Wzorzec klucza pozycji pasuje; agent odmawia sprawdzenia pozycji i zatrzymuje ocenę reguł.
AllowKey=vfs.file.contents[/etc/passwd]     # Agent ignoruje regułę, ponieważ ocena została zatrzymana.
AllowKey=vfs.file.contents[/tmp/app.log]    # Agent ignoruje regułę, ponieważ ocena została zatrzymana.

Przykłady

Poniższe przykłady pokazują typowe wzorce konfiguracji dla AllowKey i DenyKey.

Zezwalanie na określone kontrole i polecenia

Zezwól tylko na dwie kontrole pozycji vfs.file i dwa polecenia system.run:

AllowKey=vfs.file.contents[/tmp/app.log]
AllowKey=vfs.file.size[/tmp/app.log]
AllowKey=system.run[/usr/bin/uptime]
AllowKey=system.run[/usr/bin/df -h /]
DenyKey=vfs.file.*[*]

Ustawienie DenyKey=system.run[*] nie jest konieczne, ponieważ wszystkie pozostałe polecenia system.run są domyślnie zabronione.

Zezwalanie na skrypty

Zezwól agentowi Zabbix na wykonywanie skryptów na hostach wszystkimi dostępnymi metodami:

  • Skrypty globalne, które mogą być wykonywane we frontendzie lub przez API (ta metoda zawsze używa klucza system.run[myscript.sh])
  • Zdalne polecenia z operacji akcji (ta metoda zawsze używa klucza system.run[myscript.sh,nowait])
  • Pozycje agenta Zabbix system.run ze skryptem, na przykład:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

Aby kontrolować parametr wait/nowait, należy ustawić inną regułę. Na przykład można zezwolić tylko na pozycje system.run[myscript.sh,wait], wykluczając w ten sposób inne metody:

AllowKey=system.run[myscript.sh,wait]
Zabezpieczanie reguł allow/deny

Ten przykład pokazuje, jak zabezpieczyć zbyt liberalne reguły AllowKey lub DenyKey.

Rozważ następujące reguły:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]

W systemie Windows spacje w ścieżce należy poprzedzać znakiem daszka (^).

Te reguły zawierają symbol wieloznaczny (*), który może zostać niewłaściwie wykorzystany:

  • Skrypt test.bat może zostać uruchomiony z dowolnymi argumentami, w tym niezamierzonymi.
  • Wzorzec vfs.file.* dopasowuje tylko klucze pozycji bez parametrów; jednak wszystkie pozycje vfs.file wymagają parametrów.
  • Wzorzec system.cpu.load[*] dopasowuje tylko klucze pozycji z parametrami; jednak pozycje system.cpu.load nie wymagają parametrów.

Aby zabezpieczyć te reguły, jawnie zezwól na wykonywanie test.bat tylko z określonymi argumentami oraz zabroń poprawnych wzorców kluczy pozycji; na przykład:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat status"]
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat version"]
DenyKey=vfs.file.*[*]
DenyKey=system.cpu.load
DenyKey=system.cpu.load[*]

Możesz przetestować reguły, uruchamiając następujące polecenia, które zwrócą ZBX_NOTSUPPORTED.

cd "C:\Program Files\Zabbix Agent 2"
zabbix_agent2.exe -t system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat debug"]
zabbix_agent2.exe -t vfs.file.size["C:\ProgramData\MyApp\config.ini"]
zabbix_agent2.exe -t vfs.file.contents["C:\Windows\System32\drivers\etc\hosts"]
zabbix_agent2.exe -t system.cpu.load
zabbix_agent2.exe -t system.cpu.load[all,avg1]
Przykłady wzorców

Poniższa tabela pokazuje, jak dopasowywane są wzorce kluczy pozycji:

  • Klucz pasuje do wzorca tylko wtedy, gdy spełnia wszystkie warunki w kolumnie Dopasowania.
  • Parametry muszą być w całości ujęte w nawiasy kwadratowe (np. vfs.file.contents[* i vfs.file.contents*utf8] są nieprawidłowymi wzorcami).
Wzorzec Dopasowania Przykłady
* Dowolny klucz z parametrami lub bez parametrów
vfs.file.* Klucz zaczyna się od vfs.file.
Brak parametrów
Pasuje:
vfs.file.size
vfs.file.contents

Nie pasuje:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents Klucz zaczyna się od vfs.
Klucz kończy się na .contents
Brak parametrów
Pasuje:
vfs..contents
vfs.mount.point.file.contents

Nie pasuje:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] Klucz zaczyna się od vfs.file.
Dowolne lub puste parametry
Pasuje
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

Nie pasuje:
vfs.file.get.custom
vfs.file.contents Klucz to vfs.file.contents
Brak parametrów
Pasuje:
vfs.file.contents

Nie pasuje:
vfs.file.contents[/etc/passwd]
vfs.file.contents[] Klucz to vfs.file.contents[]
Puste parametry
Pasuje:
vfs.file.contents[]

Nie pasuje:
vfs.file.contents
vfs.file.contents[*] Klucz to vfs.file.contents
Dowolne lub puste parametry
Pasuje:
vfs.file.contents[/path/to/file]

Nie pasuje:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Klucz to vfs.file.contents
Pierwszy parametr to /etc/passwd
Dowolny lub pusty drugi parametr
Pasuje:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Nie pasuje:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
vfs.file.contents[*passwd*] Klucz to vfs.file.contents
Pierwszy parametr zawiera passwd
Brak drugiego parametru
Pasuje:
vfs.file.contents[/etc/passwd]

Nie pasuje:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[*passwd*,*] Klucz to vfs.file.contents
Pierwszy parametr zawiera passwd
Dowolny lub pusty drugi parametr
Pasuje:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Nie pasuje:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/etc/passwd,utf8] Klucz to vfs.file.contents
Pierwszy parametr to /etc/passwd
Drugi parametr to utf8
Pasuje:
vfs.file.contents[/etc/passwd,utf8]

Nie pasuje:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]