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).

Cas d'usage

Deny specific check
  • Blacklist a specific check with DenyKey parameter. Matching keys will be disallowed. All non-matching keys will be allowed, except system.run[] items.
Refuser une vérification spécifique
  • Blacklist une vérification spécifique avec le paramètre DenyKey. Les clés correspondantes seront refusées. Toutes les clés non correspondantes seront autorisées, à l'exception des éléments system.run[].

Par exemple :

# Refuser l'accès sécurisé aux données
       DenyKey=vfs.file.contents[/etc/passwd,*]

Une blacklist peut ne pas être un bon choix, car une nouvelle version de Zabbix peut avoir de nouvelles clés qui ne sont pas explicitement restreintes par la configuration existante. Cela pourrait provoquer une faille de sécurité.

Refuser une commande spécifique, autoriser les autres
  • Blacklister une commande spécifique avec le paramètre DenyKey. Mettez en whitelist toutes les autres commandes, avec le paramètre AllowKey.
# Interdire une commande spécifique
       DenyKey=system.run[ls -l /]
        
       # Autoriser d'autres scripts
       AllowKey=system.run[*]
Autoriser une vérification spécifique, refuser les autres
  • Whitelist des vérifications spécifiques avec les paramètres AllowKey, refuser les autres avec DenyKey=*

Par exemple :

# Autoriser la lecture des journaux :
       AllowKey=vfs.file.*[/var/log/*]
       
       # Autoriser les vérifications de l'heure locale
       AllowKey=system.localtime[*]
       
        # Refuser toutes les autres clés
        DenyKey=*

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

system.run et AllowKey

Un script hypothétique comme 'myscript.sh' peut être exécuté sur un hôte via l'agent Zabbix de plusieurs manières :

1. En tant que clé d'élément dans une vérification passive ou active, par exemple :

  • system.run[myscript.sh]
  • system.run[myscript.sh,wait]
  • system.run[myscript.sh,nowait]

Ici, l'utilisateur peut ajouter "wait", "nowait" ou omettre le 2ème argument pour utiliser sa valeur par défaut dans system.run[].

2. En tant que script global (initié par l'utilisateur dans le frontend ou l'API).

Un utilisateur configure ce script dans AdministrationScripts, définit "Exécuter sur : agent Zabbix" et place "monscript.sh" dans le champ de saisie "Commandes" du script. Lorsqu'il est invoqué depuis l'interface ou l'API, le serveur Zabbix envoie à l'agent :

  • system.run[myscript.sh,wait] - jusqu'à Zabbix 5.0.4
  • system.run[myscript.sh] - depuis 5.0.5

Ici, l'utilisateur ne contrôle pas les paramètres "wait"/"nowait".

3. Comme une commande à distance d'une action. Le serveur Zabbix envoie à l'agent :

  • system.run[myscript.sh,nowait]

Là encore l'utilisateur ne contrôle pas les paramètres "wait"/"nowait".

Cela signifie que si nous définissons AllowKey comme :

AllowKey=system.run[myscript.sh]

alors

  • system.run[myscript.sh] - sera autorisé
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] ne seront pas autorisés - le script ne sera pas exécuté s'il est appelé comme étape d'action

Pour autoriser toutes les variantes décrites, vous pouvez ajouter :

AllowKey=system.run[myscript.sh,*] 
       DenyKey=system.run[*]

aux paramètres agent/agent2.