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

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