13 Restreindre les vérifications des agents

Aperçu

Il est possible de restreindre les vérifications côté agent en créant une liste noire, une liste blanche ou une combinaison de liste blanche/liste noire d'éléments.

Pour ce faire, utilisez une combinaison de deux paramètres de configuration d'agent :

  • AllowKey=<pattern> - quelles vérifications sont autorisées ; <pattern> est spécifié à l'aide d'une expression générique (*)
  • DenyKey=<pattern> - quelles vérifications sont refusées ; <pattern> est spécifié à l'aide d'une expression générique (*)

Notez que:

  • Tous les éléments system.run[*] (commandes distantes, scripts) sont désactivés par défaut, même lorsqu'aucune clé de refus n'est spécifiée ;
  • Depuis Zabbix 5.0.2, le paramètre d'agent EnableRemoteCommands est :
<!-- -->
   * obsolète par l'agent Zabbix
   * non pris en charge par l'agent Zabbix 2

Par conséquent, pour autoriser les commandes à distance, spécifiez une clé AllowKey=system.run[<commande>,*] pour chaque commande autorisée, * représente le mode wait et nowait. Il est également possible de spécifier le paramètre AllowKey=system.run[*] pour autoriser toutes les commandes avec les modes wait et nowait. Pour interdire des commandes distantes spécifiques, ajoutez des paramètres DenyKey avec les commandes system.run[] avant le paramètre AllowKey=system.run[*].

Règles importantes

  • Une liste blanche sans règle de refus n'est autorisée que pour les éléments system.run[*]. Pour tous les autres éléments, les paramètres AllowKey ne sont pas autorisés sans un paramètre DenyKey ; dans ce cas, l'agent Zabbix ne démarrera pas avec uniquement les paramètres AllowKey.
  • L'ordre compte. Les paramètres spécifiés sont vérifiés un par un selon leur ordre d'apparition dans le fichier de configuration :
    • Dès qu'une clé d'élément correspond à une règle d'autorisation/de refus, l'élément est soit autorisé, soit refusé ; et la vérification des règles s'arrête. Ainsi, si un élément correspond à la fois à une règle d'autorisation et à une règle de refus, le résultat dépendra de la règle qui vient en premier.
    • L'ordre affecte également le paramètre EnableRemoteCommands (s'il est utilisé).
  • Un nombre illimité de paramètres AllowKey/DenyKey est pris en charge.
  • Les règles AllowKey, DenyKey n'affectent pas les paramètres de configuration HostnameItem, HostMetadataItem, HostInterfaceItem.
  • Le modèle de clé est une expression générique où le caractère générique (*) correspond à n'importe quel nombre de caractères dans une certaine position. Il peut être utilisé à la fois dans le nom de la clé et dans les paramètres.
  • Si une clé d'élément spécifique n'est pas autorisée dans la configuration de l'agent, l'élément sera signalé comme non pris en charge (aucune indication n'est donnée quant à la raison) ;
  • L'agent Zabbix avec l'option de ligne de commande --print (-p) n'affichera pas les clés qui ne sont pas autorisées par la configuration ;
  • L'agent Zabbix avec l'option de ligne de commande --test (-t) renverra l'état "Clé d'élément non prise en charge." pour les clés non autorisées par la configuration ;
  • Les commandes à distance refusées ne seront pas consignées dans le journal 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.

Cas d'usage

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 motif

Motif Description Correspondances Aucune correspondance
* Correspond à toutes les clés possibles avec ou sans paramètres. Tout Aucun
vfs.file.contents Correspond à vfs.file.contents sans paramètres. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Correspond à vfs.file.contents avec des paramètres vides. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Correspond à vfs.file.contents avec n'importe quel paramètre ; ne correspondra pas à vfs.file.contents sans crochets. vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Correspond à vfs.file.contents avec les premiers paramètres correspondant à /etc/passwd et tous les autres paramètres ayant une valeur (également vide). 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*] Correspond à vfs.file.contents avec le premier paramètre correspondant à *passwd* et aucun autre paramètre. vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Correspond à vfs.file.contents avec seulement le premier paramètre correspondant à *passwd* et tous les paramètres suivants ayant n'importe quelle valeur (également vide). 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] Correspond à vfs.file.contents avec le premier paramètre correspondant à /var/log/zabbix_server.log, le troisième paramètre correspondant à 'abc' et tout deuxième paramètre (également vide). 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] Correspond à vfs.file.contents avec le premier paramètre correspondant à /etc/passwd, le second paramètre correspondant à 'utf8' et aucun autre argument. vfs.file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Correspond à toutes les clés commençant par vfs.file. sans aucun paramètre. vfs.file.contents
vfs.file.size
vfs.file.contents[]
vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Correspond à toutes les clés commençant par vfs.file. avec tous les paramètres. vfs.file.size.bytes[]
vfs.file.size[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Correspond à n'importe quelle clé commençant par vfs. et se terminant par .contents sans aucun paramètre. vfs.mount.point.file.contents
vfs..contents
vfs.contents