13 Restringir les verificacions de l'agent

Visió general

Podeu controlar quines claus d'elements l'agent Zabbix o l'agent 2 pot utilitzar o no en executar comprovacions d'elements, ordres remotes o scripts.

Per fer-ho, utilitzeu aquests paràmetres de configuració de l'agent per definir les regles de permís/denegació:

  • AllowKey=<patró>
  • DenyKey=<patró>

El <patró> ha de contindre una sola clau d'element i admet comodins (*). El comodí coincideix amb qualsevol nombre de caràcters a la seva posició i es pot emprar per fer coincidir claus o paràmetres d'element (per exemple, vfs.file.*[*]).

Per millorar la seguretat, es recomana utilitzar claus d'element exactes en lloc de comodins. Per a més detalls, consulteu Assegurar les regles de permís/denegació.

A diferència d'altres paràmetres de configuració de l'agent, podeu especificar un nombre il·limitat de paràmetres AllowKey o DenyKey.

Notes importants

  • Tots els elements de system.run són desactivats per defecte (fins i tot quan DenyKey està buit), com si DenyKey=system.run[*] s'hagués definit com a última regla. Per això, podeu permetre elements específics de system.run sense denegar explícitament altres elements de system.run.

  • Un element especificat a AllowKey també s'ha d'especificar a DenyKey (excepte els elements de system.run); en cas contrari, l'agent Zabbix no s'iniciarà.

  • Si és possible, utilitzeu AllowKey per permetre només els elements necessaris i denegar tota la resta. Algunes claus es poden fer un ús indegut per llegir fitxers no desitjats mitjançant el recorregut de ruta (per exemple, vfs.file.contents["../../../../etc/passwd"]), i les noves versions de l'agent Zabbix poden introduir claus no cobertes per les vostres regles DenyKey.

  • La configuració d'AllowKey i DenyKey no afecta els paràmetres de l'agent HostnameItem, HostMetadataItem o HostInterfaceItem.

  • Els elements denegats esdevenen no compatibles sense cap suggeriment ni missatge d'error; per exemple:

  • El paràmetre de línia d'ordres de l'agent Zabbix --print (-p) no mostrarà les claus d'element denegades.

  • El paràmetre de línia d'ordres de l'agent Zabbix --test (-t) retornarà "Clau d'element no compatible." per a les claus d'element denegades. - El fitxer de registre de l'agent Zabbix no registrarà les [ordres remotes] denegades (/manual/config/notifications/action/operation/remote_command) si LogRemoteCommands=1.

Ordre de regles de permís/denegació

Podeu especificar un nombre il·limitat de regles AllowKey o DenyKey, tot i que el seu ordre és important.

  • Les regles s'avaluen una per una, de dalt a baix.
  • Quan una clau d'element coincideix amb una regla, es permet o es denega, i l'avaluació de la regla s'atura.

Per exemple, en avaluar vfs.file.contents[/etc/passwd], les regles es processen de la manera següent:

AllowKey=vfs.file.contents[/tmp/app.log] # El patró de la clau d'element no coincideix, l'agent procedeix a la regla següent.
       AllowKey=vfs.file.contents[/etc/passwd] # El patró de la clau d'element coincideix; l'agent permet la comprovació de l'element i atura l'avaluació de la regla.
       DenyKey=vfs.file.*[*] # L'agent ignora la regla, ja que l'avaluació s'ha aturat.

L'ordre de regles següent denegarà la comprovació d'elements:

DenyKey=vfs.file.*[*] # El patró de clau d'element coincideix; l'agent denega la comprovació d'elements i atura l'avaluació de la regla.
       AllowKey=vfs.file.contents[/etc/passwd] # L'agent ignora la regla, ja que l'avaluació s'ha aturat.
       AllowKey=vfs.file.contents[/tmp/app.log] # L'agent ignora la regla, ja que l'avaluació s'ha aturat.

Exemples

Els exemples següents mostren patrons de configuració comuns per a AllowKey i DenyKey.

Permetre comprovacions i comandes específiques

Permeteu només dues comprovacions d'elements vfs.file i dues ordres 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.*[*]

Establir DenyKey=system.run[*] no és necessari, perquè totes les altres ordres system.run es deneguen per defecte.

Permetre scripts

Permetre que l'agent Zabbix executi scripts a equips mitjançant tots els mètodes disponibles:

  • Scripts globals que es poden executar al frontend o mitjançant l'API (aquest mètode sempre utilitza la clau system.run[myscript.sh])
  • Comandes remotes des de action operations (aquest mètode sempre utilitza la clau system.run[myscript.sh,nowait])
  • system.run Elements de l'agent Zabbix amb l'script, per exemple:
  • system.run[myscript.sh]
  • system.run[myscript.sh,wait]
  • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

Per controlar el paràmetre wait/nowait, heu de definir una regla diferent. Per exemple, només podeu permetre els elements system.run[myscript.sh,wait], excloent així altres mètodes:

AllowKey=system.run[myscript.sh,wait]
Assegurar les regles de permetre/denegar

Aquest exemple mostra com assegurar les regles AllowKey o DenyKey massa permissives.

Tingueu en compte les regles següents:

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

A Windows, heu d'escapar els espais a la ruta utilitzant un circumflex (^).

Aquestes regles contenen un comodí (*), que es pot fer servir malament:

  • L'script test.bat es pot executar amb qualsevol argument, inclosos els no desitjats.
  • El patró vfs.file.* només coincideix amb les claus d'element sense paràmetres; tanmateix, tots els elements vfs.file requereixen paràmetres.
  • El patró system.cpu.load[*] només coincideix amb les claus d'element amb paràmetres; tanmateix, els elements system.cpu.load no requereixen paràmetres.

Per assegurar aquestes regles, permeteu explícitament l'execució de test.bat només amb arguments específics i denegueu els patrons de clau d'element correctes; per exemple:

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[*]

Podeu provar les regles executant les ordres següents, que retornaran ZBX_NOTSUPPORTED.

cd "C:\Arxius de programa\Zabbix Agent 2"
       zabbix_agent2.exe -t system.run["C:\Arxius de programa\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]
Exemples de patrons

La taula següent mostra com es coincideixen els patrons de clau d'element:

  • Una clau coincideix amb el patró només si compleix totes les condicions de la columna Coincidències.
  • Els paràmetres han d'anar completament entre claudàtors (per exemple, vfs.file.contents[* i vfs.file.contents*utf8] són patrons no vàlids).
Patró Coincidències Exemples
* Qualsevol clau amb o sense paràmetres
vfs.file.* La clau comença amb vfs.file.
Sense paràmetres
Coincidències:
vfs.file.size
vfs.file.contents

No coincideix:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents La clau comença amb vfs.
La clau acaba amb .contents
Sense paràmetres
Coincideix amb:
vfs..contents
vfs.mount.point.file.contents

No coincideix amb:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] La clau comença amb vfs.file.
Qualsevol paràmetre o paràmetres buits
Coincideix
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

No coincideix amb:
vfs.file.get.custom
vfs.file.contents[] La clau és vfs.file.contents[]
Paràmetres buits
Coincideix:
vfs.file.contents[]

No coincideix amb:
vfs.file.contents
vfs.file.contents[*] La clau és vfs.file.contents
Qualsevol paràmetre o paràmetres buits
Coincideix:
vfs.file.contents[/path/to/file]

No coincideix amb:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] La clau és vfs.file.contents
El primer paràmetre és /etc/passwd
Qualsevol paràmetre o un segon paràmetre buit
Coincideix amb:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

No coincideix amb:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]