12 Restringir les verificacions de l'agent

Vista general

Les comprovacions de l'agent es poden restringir creant una llista negra, una llista blanca o una combinació de llista blanca/llista negra d'elements.

Per fer-ho, empreu una combinació de dos paràmetres configuració de l'agent:

  • AllowKey=<patró> - quines comprovacions són permeses; <patró> s'especifica mitjançant una expressió comodí (*)
  • DenyKey=<patró> - quines comprovacions es deneguen; <patró> s'especifica mitjançant una expressió comodí (*)

Tingues en compte que:

  • Tots els elements system.run[] (ordres remotes, scripts) són desactivats per defecte, fins i tot quan no s'especifica cap clau de denegació, s'assumeix que DenyKey=system.run[\] s'ha afegit implícitament;
  • Des de Zabbix 5.0.2, el paràmetre de l'agent d'EnableRemoteCommands és:
    • obsolet per l'agent de Zabbix
    • no compatible amb l'agent 2 de Zabbix

Per tant, per permetre ordres remotes, especifiqueu una clau AllowKey=system.run[<command>,*] per a cada ordre permesa, * representa el mode wait i nowait. També és possible especificar el paràmetre AllowKey=system.run[*] per permetre totes les ordres amb els modes wait i nowait. Per no permetre ordres remotes específiques, afegiu paràmetres DenyKey amb ordres system.run[] abans del paràmetre AllowKey=system.run[*].

Regles importants

  • La llista blanca sense una regla de denegació només es permet per als elements system.run[*]. Per a la resta d'elements, els paràmetres AllowKey no es permeten sense un paràmetre DenyKey; en aquest cas, l'agent Zabbix no començarà només amb paràmetres AllowKey.
  • L'ordre compta. Els paràmetres especificats es comproven un a un segons el seu ordre d'aparició al fitxer de configuració:
    • Tan aviat com una clau d'element coincideix amb una regla d'autorització/denegació, l'element es permet o es denega; i la comprovació de regles s'atura. Per tant, si un element coincideix amb una regla d'autorització i una regla de denegació, el resultat dependrà de quina regla sigui primera.
    • L'ordre també afecta la configuració EnableRemoteCommands (si s'empra).
  • S'admeten paràmetres AllowKey/DenyKey il·limitats.
  • Les regles AllowKey i DenyKey no afecten els paràmetres de configuració de HostnameItem, HostMetadataItem i HostInterfaceItem.
  • El patró de clau és una expressió de comodí on el caràcter comodí (*) coincideix amb qualsevol nombre de caràcters en una posició determinada. Es pot emprar tant en el nom de la clau com en els paràmetres.
  • Si no es permet una clau d'element específica a la configuració de l'agent, l'element es marcarà com a no compatible (no s'indica per què);
  • L'agent Zabbix amb l'opció de línia d'ordres --print (-p) no mostrarà les claus que la configuració no permet;
  • L'agent Zabbix amb l'opció de línia d'ordres --test (-t) retornarà l'estat "La clau d'element no és compatible". per a claus no autoritzades per la configuració;
  • Les ordres remotes denegades no es registraran al registre de l'agent (si LogRemoteCommands=1).

Allow/deny rule order

You can specify an unlimited number of AllowKey or DenyKey rules, though their order matters.

  • Rules are evaluated one by one, from top to bottom.
  • When an item key matches a rule, it is either allowed or denied, and rule evaluation stops.

For example, when evaluating vfs.file.contents[/etc/passwd], the rules are processed as follows:

AllowKey=vfs.file.contents[/tmp/app.log]    # Item key pattern does not match, agent proceeds to the next rule.
AllowKey=vfs.file.contents[/etc/passwd]     # Item key pattern matches; agent allows the item check and stops rule evaluation.
DenyKey=vfs.file.*[*]                       # Agent ignores the rule, as the evaluation has stopped.

The following rule order will deny the item check:

DenyKey=vfs.file.*[*]                       # Item key pattern matches; agent denies the item check and stops rule evaluation.
AllowKey=vfs.file.contents[/etc/passwd]     # Agent ignores the rule, as the evaluation has stopped.
AllowKey=vfs.file.contents[/tmp/app.log]    # Agent ignores the rule, as the evaluation has stopped.

Casos d'ús

Allowing specific checks and commands

Allow only two vfs.file item checks and two system.run commands:

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

Setting DenyKey=system.run[*] is unnecessary, because all other system.run commands are denied by default.

Allowing scripts

Allow Zabbix agent to execute scripts on hosts via all available methods:

  • Global scripts that can be executed in the frontend or via API (this method always uses the system.run[myscript.sh] key)
  • Remote commands from action operations (this method always uses the system.run[myscript.sh,nowait] key)
  • system.run Zabbix agent items with the script, for example:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

To control the wait/nowait parameter, you must set a different rule. For example, you can allow only system.run[myscript.sh,wait] items, thus excluding other methods:

AllowKey=system.run[myscript.sh,wait]
Securing allow/deny rules

This example shows how to secure overly permissive AllowKey or DenyKey rules.

Consider the following rules:

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

On Windows, you must escape spaces in the path using a caret (^).

These rules contain a wildcard (*), which can be misused:

  • The test.bat script can be executed with any arguments, including unintended ones.
  • The vfs.file.* pattern matches only item keys without parameters; however, all vfs.file items require parameters.
  • The system.cpu.load[*] pattern matches only item keys with parameters; however system.cpu.load items do not require parameters.

To secure these rules, explicitly allow executing test.bat only with specific arguments, and deny correct item key patterns; for example:

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

You can test the rules by running the following commands, which will return 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]

Exemples de patrons

Patró Descripció Coincidències Sense coincidències
* Coincideix amb totes les claus possibles amb o sense paràmetres. Totes Cap
vfs.file.contents Coincideix amb vfs.file.contents sense paràmetres. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Coincideix vfs.file.contents amb paràmetres buits. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Fa coincidir vfs.file.contents amb qualsevol paràmetre; no coincidirà amb vfs.file.contents sense claudàtors. vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Fa coincidir vfs.file.contents amb els primers paràmetres que coincideixen amb /etc/passwd i tots els altres paràmetres amb un valor (també buit). vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]
vfs.file.contents[/var/log/zabbix_server.log]
vfs.file.contents[]
vfs.file.contents[*passwd*] Coincideix vfs.file.contents amb el primer paràmetre que coincideix amb *passwd* i sense cap altre paràmetre. vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Coincideix amb vfs.file.contents amb només el primer paràmetre que coincideix amb *passwd* i sense importar el valor dels següents paràmetres (també buits). vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/var/log/zabbix_server.log,*,abc] Coincideix vfs.file.contents amb el primer paràmetre que coincideix amb /var/log/zabbix_server.log, el tercer paràmetre corresponent a 'abc' i qualsevol segon paràmetre (també buit). vfs.file.contents[/var/log/zabbix_server.log,,abc]
vfs.file.contents[/var/log/zabbix_server.log,utf8,abc]
vfs.file.contents[/var/log/zabbix_server.log,,abc,def]
vfs.file.contents[/etc/passwd,utf8] Coincideix vfs.file.contents amb el primer paràmetre que coincideix amb /etc/passwd, el segon paràmetre que coincideix amb 'utf8' i cap altre argument. vfs.file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Coincideix amb totes les claus que comencen per vfs.file. sense cap paràmetre. vfs.file.contents
vfs.file.size
vfs.file.contents[]
vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Fa coincidir totes les claus que comencen per vfs.file. amb tots els paràmetres. vfs.file.size.bytes[]
vfs.file. mida[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Coincideix amb qualsevol clau que comenci per vfs. i acabi amb .contents sense cap paràmetre. vfs.mount.point.file.contents
vfs..contents
vfs.contents