Esta es una traducción de la página de documentación original en español. Ayúdanos a mejorarla.

#13 Controles de agentes restrictivos

Descripción general

Es posible restringir los controles por parte del agente creando una lista negra de métricas, lista blanca o una combinación de lista blanca/lista negra.

Para ello utilice una combinación de dos parámetros de configuración del agente:

  • AllowKey=<pattern> - qué comprobaciones están permitidas; el <patrón> es especificado usando una expresión comodín (*)
  • DenyKey=<pattern> - qué comprobaciones se rechazan; el <patrón> es especificado usando una expresión comodín (*)

Tenga en cuenta que:

  • Todas las métricas system.run[*] (comandos remotos, scripts) están deshabilitadas de forma predeterminada, incluso cuando no se especifican claves de denegación;
  • Desde Zabbix 5.0.2 el parámetro del agente EnableRemoteCommands es:
    • obsoleto por el agente de Zabbix
    • no soportado por Zabbix agent2

Por lo tanto, para permitir comandos remotos, especifique AllowKey=system.run[<command>,*] para cada comando permitido, * representa el modo de espera y no espera. También es posible especificar el parámetro AllowKey=system.run[*] para permitir todos los comandos con modos de espera y no espera. Para no permitir comandos remotos específicos, agregue parámetros DenyKey con comandos system.run[] antes del parámetro AllowKey=system.run[*].

Reglas importantes

  • Solo se permite una lista blanca sin una regla de denegación para system.run[*] elementos. Para todos los demás elementos, los parámetros AllowKey no están permitidos sin un parámetro DenyKey; en este caso, el agente Zabbix ** no lo hará empezar** con solo los parámetros AllowKey.
  • El orden importa. Los parámetros especificados se comprueban uno por uno según su orden de aparición en el archivo de configuración:
    • Tan pronto como la clave de un elemento coincida con una regla de permitir/denegar, el elemento se ya sea permitido o denegado; y la verificación de reglas se detiene. Así que si un artículo coincide tanto con una regla de permitir como con una regla de denegar, el resultado será depende de qué regla viene primero.
    • El orden afecta también al parámetro EnableRemoteCommands (si se usa).
  • Se admite un número ilimitado de parámetros AllowKey/DenyKey.
  • Las reglas AllowKey, DenyKey no afectan a HostnameItem, Parámetros de configuración HostMetadataItem, HostInterfaceItem.
  • El patrón de clave es una expresión comodín donde el comodín (*) carácter coincide con cualquier número de cualquier carácter en cierta posición. Puede usarse tanto en el nombre de la clave como en los parámetros.
  • Si una clave de artículo específica no está permitida en la configuración del agente, el el elemento se informará como no compatible (no se da ninguna pista sobre el razón);
  • El agente Zabbix con la opción de línea de comando --print (-p) no se mostrará claves que no están permitidas por la configuración;
  • Volverá el agente de Zabbix con la opción de línea de comando --test (-t) "Clave de elemento no admitida". estado de las claves que no están permitidas por configuración;
  • Los comandos remotos denegados no se registrarán en el registro del agente (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 de uso

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]

Ejemplos de patrones

Patrón Descripción Coincidencias Sin coincidencia
* Hace coincidir todas las claves posibles con o sin parámetros. Cualquiera Ninguno
vfs.file.contents Coincide vfs.file.contents sin parámetros. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Hace coincidir vfs.file.contents con parámetros vacíos. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Hace coincidir vfs.file.contents con cualquier parámetro; no coincidirá con vfs.file.contents sin corchetes. vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Hace coincidir vfs.file.contents con los primeros parámetros que coinciden con /etc/passwd y todos los demás parámetros que tienen cualquier valor (también vacío). vfs .file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]
vfs. archivo.contenido[/var/log/zabbix_server.log]
vfs.archivo.contenido[]
vfs.file.contents[*passwd*] Hace coincidir vfs.file.contents con el primer parámetro que coincide con *passwd* y ningún otro parámetro. vfs.file.contents[/etc /contraseña] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Coincide vfs.file.contents con solo el primer parámetro que coincide con *passwd* y todos los parámetros siguientes que tienen algún valor (también vacío) . vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[/etc/passwd]<br >vfs.file.contents[/tmp/test]
vfs.file.contents[/var/log/zabbix_server.log,*,abc] Hace coincidir vfs.file.contents con el primer parámetro que coincide con /var/log/zabbix_server.log , tercer parámetro que coincida con 'abc' y cualquier segundo parámetro (también vacío). 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] Hace coincidir vfs.file.contents con el primer parámetro que coincide con /etc/passwd, el segundo parámetro que coincide con 'utf8' y ningún otro argumento. vfs. file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Coincide con cualquier clave que comience con vfs.file. sin ningún parámetro. vfs.file.contents
vfs.file.size
vfs.file.contents[]< br>vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Hace coincidir cualquier clave que comience con vfs.file. con cualquier parámetro. vfs.file.size.bytes[]
vfs.file. tamaño[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Coincide con cualquier clave que comience con vfs. y termine con .contents sin ningún parámetro. vfs.mount.point.file.contents
vfs..contents
vfs. contenidos