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.runsą domyślnie wyłączone (nawet gdyDenyKeyjest puste), tak jakbyDenyKey=system.run[*]było ustawione jako ostatnia reguła. Z tego powodu możesz zezwolić na określone pozycjesystem.runbez jawnego zabraniania innych pozycjisystem.run. -
Pozycja określona w
AllowKeymusi być również określona wDenyKey(z wyjątkiem pozycjisystem.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łamiDenyKey. -
Konfiguracja
AllowKeyiDenyKeynie wpływa na parametry agentaHostnameItem,HostMetadataItemaniHostInterfaceItem. -
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ń.
- Parametr wiersza poleceń agenta Zabbix
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.runze 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.batmoże zostać uruchomiony z dowolnymi argumentami, w tym niezamierzonymi. - Wzorzec
vfs.file.*dopasowuje tylko klucze pozycji bez parametrów; jednak wszystkie pozycjevfs.filewymagają parametrów. - Wzorzec
system.cpu.load[*]dopasowuje tylko klucze pozycji z parametrami; jednak pozycjesystem.cpu.loadnie 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[*ivfs.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.sizevfs.file.contentsNie pasuje: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
Klucz zaczyna się od vfs.Klucz kończy się na .contentsBrak parametrów |
Pasuje: vfs..contentsvfs.mount.point.file.contentsNie pasuje: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
Klucz zaczyna się od vfs.file.Dowolne lub puste parametry |
Pasujevfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Nie pasuje: vfs.file.get.custom |
vfs.file.contents |
Klucz to vfs.file.contentsBrak parametrów |
Pasuje:vfs.file.contentsNie 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.contentsDowolne lub puste parametry |
Pasuje:vfs.file.contents[/path/to/file]Nie pasuje: vfs.file.contents |
vfs.file.contents[/etc/passwd,*] |
Klucz to vfs.file.contentsPierwszy parametr to /etc/passwdDowolny 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.contentsPierwszy parametr zawiera passwdBrak 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.contentsPierwszy parametr zawiera passwdDowolny 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.contentsPierwszy parametr to /etc/passwdDrugi parametr to utf8 |
Pasuje:vfs.file.contents[/etc/passwd,utf8]Nie pasuje: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |