Esta página incluye contenido traducido automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

12 Restringir comprobaciones del agente

Descripción general

Puede controlar qué claves de item puede usar el agent de Zabbix o agent 2 al ejecutar comprobaciones de item, comandos remotos o scripts.

Para ello, utilice estos parámetros de configuración del agent para definir reglas de permitir/denegar:

  • AllowKey=<patrón>
  • DenyKey=<patrón>

El <patrón> debe contener una sola clave de item y admite comodines (*). El comodín coincide con cualquier número de caracteres en su posición y se puede usar para hacer coincidir claves de item o parámetros (por ejemplo, vfs.file.*[*]).

Para mejorar la seguridad, se recomienda utilizar claves de item exactas en lugar de comodines. Para más detalles, consulte Asegurar las reglas de permitir/denegar.

A diferencia de otros parámetros de configuración del agent, puede especificar un número ilimitado de parámetros AllowKey o DenyKey.

Notas importantes

  • Todos los items system.run están deshabilitados por defecto (incluso cuando DenyKey está vacío), como si se hubiera establecido DenyKey=system.run[*] como la última regla. Debido a esto, puede permitir items system.run específicos sin denegar explícitamente otros items system.run.

  • Un item especificado en AllowKey también debe estar especificado en DenyKey (excepto para los items system.run); de lo contrario, el agent de Zabbix no se iniciará.

  • Si es posible, utilice AllowKey para permitir solo los items requeridos y denegar todo lo demás. Algunas claves pueden ser abusadas para leer archivos no deseados mediante path traversal (por ejemplo, vfs.file.contents["../../../../etc/passwd"]), y las nuevas versiones del agent de Zabbix pueden introducir claves no cubiertas por sus reglas DenyKey.

  • La configuración de AllowKey y DenyKey no afecta a los parámetros del agent HostnameItem, HostMetadataItem o HostInterfaceItem.

  • Los items denegados se vuelven no soportados sin ninguna pista o mensaje de error; por ejemplo:

    • El parámetro de línea de comandos --print (-p) del agent de Zabbix no mostrará las claves de los items denegados.
    • El parámetro de línea de comandos --test (-t) del agent de Zabbix devolverá "Unsupported item key." para las claves de los items denegados.
    • El archivo de registro del agent de Zabbix no registrará comandos remotos denegados si LogRemoteCommands=1.

Orden de las reglas de permitir/denegar

Puede especificar un número ilimitado de reglas AllowKey o DenyKey, aunque su orden es importante.

  • Las reglas se evalúan una por una, de arriba a abajo.
  • Cuando una clave de item coincide con una regla, se permite o deniega, y la evaluación de reglas se detiene.

Por ejemplo, al evaluar vfs.file.contents[/etc/passwd], las reglas se procesan de la siguiente manera:

AllowKey=vfs.file.contents[/tmp/app.log]    # El patrón de clave de item no coincide, el agent pasa a la siguiente regla.
       AllowKey=vfs.file.contents[/etc/passwd]     # El patrón de clave de item coincide; el agent permite la comprobación del item y detiene la evaluación de reglas.
       DenyKey=vfs.file.*[*]                       # El agent ignora la regla, ya que la evaluación se ha detenido.

El siguiente orden de reglas denegará la comprobación del item:

DenyKey=vfs.file.*[*]                       # El patrón de clave de item coincide; el agent deniega la comprobación del item y detiene la evaluación de reglas.
       AllowKey=vfs.file.contents[/etc/passwd]     # El agent ignora la regla, ya que la evaluación se ha detenido.
       AllowKey=vfs.file.contents[/tmp/app.log]    # El agent ignora la regla, ya que la evaluación se ha detenido.

Ejemplos

Los siguientes ejemplos muestran patrones de configuración comunes para AllowKey y DenyKey.

Permitir comprobaciones y comandos específicos

Permitir solo dos comprobaciones de vfs.file y dos comandos system.run:

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.*[*]

No es necesario establecer DenyKey=system.run[*], porque todos los demás comandos system.run se deniegan por defecto.

Permitir scripts

Permitir que el agent de Zabbix ejecute scripts en los hosts a través de todos los métodos disponibles:

  • Scripts globales que pueden ejecutarse en el frontend o a través de la API (este método siempre utiliza la clave system.run[myscript.sh])
  • Comandos remotos desde operaciones de acción (este método siempre utiliza la clave system.run[myscript.sh,nowait])
  • system.run items del agent de Zabbix con el script, por ejemplo:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

Para controlar el parámetro wait/nowait, debe establecer una regla diferente. Por ejemplo, puede permitir solo los items system.run[myscript.sh,wait], excluyendo así otros métodos:

AllowKey=system.run[myscript.sh,wait]
Asegurar las reglas allow/deny

Este ejemplo muestra cómo asegurar reglas AllowKey o DenyKey demasiado permisivas.

Considere las siguientes reglas:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
       DenyKey=vfs.file.*
       DenyKey=system.cpu.load[*]

En Windows, debe escapar los espacios en la ruta utilizando un acento circunflejo (^).

Estas reglas contienen un comodín (*), que puede ser mal utilizado:

  • El script test.bat puede ejecutarse con cualquier argumento, incluidos los no deseados.
  • El patrón vfs.file.* coincide solo con claves de item sin parámetros; sin embargo, todos los items vfs.file requieren parámetros.
  • El patrón system.cpu.load[*] coincide solo con claves de item con parámetros; sin embargo, los items system.cpu.load no requieren parámetros.

Para asegurar estas reglas, permita explícitamente la ejecución de test.bat solo con argumentos específicos y deniegue los patrones correctos de claves de item; por ejemplo:

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[*]

Puede probar las reglas ejecutando los siguientes comandos, que devolverán 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

La siguiente tabla muestra cómo se comparan los patrones de las claves de los items:

  • Una clave coincide con el patrón solo si cumple todas las condiciones de la columna Coincide.
  • Los parámetros deben estar completamente entre corchetes (por ejemplo, vfs.file.contents[* y vfs.file.contents*utf8] son patrones no válidos).
Patrón Coincide Ejemplos
* Cualquier clave con o sin parámetros
vfs.file.* La clave comienza con vfs.file.
Sin parámetros
Coincide:
vfs.file.size
vfs.file.contents

No coincide:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents La clave comienza con vfs.
La clave termina con .contents
Sin parámetros
Coincide:
vfs..contents
vfs.mount.point.file.contents

No coincide:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] La clave comienza con vfs.file.
Cualquier parámetro o vacío
Coincide
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

No coincide:
vfs.file.get.custom
vfs.file.contents La clave es vfs.file.contents
Sin parámetros
Coincide:
vfs.file.contents

No coincide:
vfs.file.contents[/etc/passwd]
vfs.file.contents[] La clave es vfs.file.contents[]
Parámetros vacíos
Coincide:
vfs.file.contents[]

No coincide:
vfs.file.contents
vfs.file.contents[*] La clave es vfs.file.contents
Cualquier parámetro o vacío
Coincide:
vfs.file.contents[/path/to/file]

No coincide:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] La clave es vfs.file.contents
El primer parámetro es /etc/passwd
Cualquier segundo parámetro o vacío
Coincide:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

No coincide:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
vfs.file.contents[*passwd*] La clave es vfs.file.contents
El primer parámetro incluye passwd
Sin segundo parámetro
Coincide:
vfs.file.contents[/etc/passwd]

No coincide:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[*passwd*,*] La clave es vfs.file.contents
El primer parámetro incluye passwd
Cualquier segundo parámetro o vacío
Coincide:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

No coincide:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/etc/passwd,utf8] La clave es vfs.file.contents
El primer parámetro es /etc/passwd
El segundo parámetro es utf8
Coincide:
vfs.file.contents[/etc/passwd,utf8]

No coincide:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]