This is a translation of the original English documentation page. Help us make it better.

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