Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida 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

Es posible restringir las comprobaciones en el lado del agente creando una lista negra de métricas, una lista blanca o una combinación de ambas.

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

  • AllowKey=<patrón> - qué comprobaciones están permitidas; <patrón> se especifica utilizando una expresión comodín (*)
  • DenyKey=<patrón> - qué comprobaciones están denegadas; <patrón> se especifica utilizando una expresión comodín (*)

Tenga en cuenta que:

  • Todos los ítems system.run[*] (comandos remotos, scripts) están deshabilitados por defecto, incluso cuando no se especifican claves denegadas, debe asumirse que DenyKey=system.run[*] se añade implícitamente.
  • Desde Zabbix 5.0.2 el parámetro EnableRemoteCommands del agente está:
    • obsoleto para Zabbix agent
    • no soportado por Zabbix agent2

Por lo tanto, para permitir comandos remotos, especifique AllowKey=system.run[<comando>,*] para cada comando permitido, * representa los modos wait y nowait. También es posible especificar AllowKey=system.run[*] para permitir todos los comandos con los modos wait y nowait. Para denegar comandos remotos específicos, añada parámetros DenyKey con comandos system.run[] antes del parámetro AllowKey=system.run[*].

Reglas importantes

  • Una lista blanca sin una regla de denegación solo se permite para métricas system.run[*]. Para todas las demás métricas, los parámetros AllowKey no están permitidos sin un parámetro DenyKey; en este caso, el agente Zabbix no se iniciará solo con parámetros AllowKey.
  • El orden importa. Los parámetros especificados se verifican uno por uno según su orden de aparición en el archivo de configuración:
    • Tan pronto como una clave de métrica coincida con una regla de permitir/denegar, la métrica será permitida o denegada; y la comprobación de reglas se detiene. Por lo tanto, si una métrica coincide tanto con una regla de permitir como con una de denegar, el resultado dependerá de cuál regla aparezca primero.
    • El orden también afecta al parámetro EnableRemoteCommands (si se utiliza).
  • Se admite un número ilimitado de parámetros AllowKey/DenyKey.
  • Las reglas AllowKey, DenyKey no afectan a los parámetros de configuración HostnameItem, HostMetadataItem, HostInterfaceItem.
  • El patrón de clave es una expresión comodín donde el carácter comodín (*) coincide con cualquier número de cualquier carácter en una posición determinada. Puede usarse tanto en el nombre de la clave como en los parámetros.
  • Si una clave de métrica específica no está permitida en la configuración del agente, la métrica se informará como no soportada (no se da ninguna pista sobre la razón);
  • El agente Zabbix con la opción de línea de comandos --print (-p) no mostrará las claves que no estén permitidas por la configuración;
  • El agente Zabbix con la opción de línea de comandos --test (-t) devolverá el estado "Clave de métrica no soportada." para las claves que no estén permitidas por la configuración;
  • Los comandos remotos denegados no se registrarán en el registro del agente (si LogRemoteCommands=1).

Casos de uso

Denegar una métrica específica
  • Ponga en la lista negra una métrica específica con el parámetro DenyKey. Las métricas coincidentes serán denegadas. Todas las métrricas que no coincidan serán permitidas, excepto las métricas system.run[].

Por ejemplo:

# Denegar acceso a datos sensibles
       DenyKey=vfs.file.contents[/etc/passwd,*]

Una lista negra puede no ser una buena elección, porque una nueva versión de Zabbix puede tener nuevas métricas que no estén explícitamente restringidas por la configuración existente. Esto podría causar una vulnerabilidad de seguridad.

Denegar un comando específico, permitir otros
  • Poner en la lista negra un comando específico con el parámetro DenyKey. Permitir todos los demás comandos con el parámetro AllowKey.
# Denegar comando específico
       DenyKey=system.run[ls -l /]
        
       # Permitir otros scripts
       AllowKey=system.run[*]
Permitir comprobaciones específicas, denegar otras
  • Permitir comprobaciones específicas con los parámetros AllowKey, denegar otras con DenyKey=*

Por ejemplo:

# Permitir la lectura de logs:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Permitir comprobaciones de hora local
       AllowKey=system.localtime[*]
       
       # Denegar todas las demás claves
       DenyKey=*
Permitir script con espacios en la ruta y argumentos
  • Permitir en la lista blanca un script ubicado en una ruta que contiene espacios y permitir pasarle argumentos. En Windows, escape los espacios usando ^ al especificar la ruta.

Por ejemplo:

# Permitir ejecutar test.bat con o sin argumentos
       AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]

Para probar:

PS C:\Program Files\Zabbix Agent 2> .\zabbix_get.exe -s 127.0.0.1 -k system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat caret"]

Esta configuración permite la ejecución del script independientemente de si se pasan argumentos (como caret) y asegura que system.run esté permitido incluso si la ruta del script contiene espacios.

Ejemplos de patrones

Patrón Descripción Coincide No coincide
* Coincide con todas las claves posibles con o sin parámetros. Cualquiera Ninguna
vfs.file.contents Coincide con vfs.file.contents sin parámetros. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Coincide con vfs.file.contents con parámetros vacíos. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Coincide con 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,*] Coincide con vfs.file.contents con el primer parámetro coincidiendo con /etc/passwd y todos los demás parámetros con cualquier valor (también vacío). 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*] Coincide con vfs.file.contents con el primer parámetro coincidiendo con *passwd* y sin otros parámetros. vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Coincide con vfs.file.contents con solo el primer parámetro coincidiendo con *passwd* y todos los parámetros siguientes con cualquier valor (también vacío). 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] Coincide con vfs.file.contents con el primer parámetro coincidiendo con /var/log/zabbix_server.log, el tercer parámetro coincidiendo con 'abc' y cualquier (también vacío) segundo parámetro. 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] Coincide con vfs.file.contents con el primer parámetro coincidiendo con /etc/passwd, el segundo parámetro coincidiendo con 'utf8' y sin otros argumentos. 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[]
vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Coincide con cualquier clave que comience con vfs.file. con cualquier parámetro. vfs.file.size.bytes[]
vfs.file.size[/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.contents

system.run y AllowKey

Un script hipotético como 'myscript.sh' puede ejecutarse en un equipo a través del agente Zabbix de varias maneras:

1. Como una clave de métrica en una comprobación pasiva o activa, por ejemplo:

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

Aquí el usuario puede añadir "wait", "nowait" u omitir el segundo argumento para usar su valor por defecto en system.run[].

2. Como un script global (iniciado por el usuario en la interfaz web o API).

Un usuario configura este script en AlertasScripts, establece "Ejecutar en: Agente Zabbix" y coloca "myscript.sh" en el campo de entrada "Comandos" del script. Cuando se invoca desde la interfaz web o API, el servidor Zabbix envía al agente:

  • system.run[myscript.sh,wait] - hasta Zabbix 5.0.4
  • system.run[myscript.sh] - desde 5.0.5

Aquí el usuario no controla los parámetros "wait"/"nowait".

3. Como un comando remoto desde una acción. El servidor Zabbix envía al agente:

  • system.run[myscript.sh,nowait]

Aquí nuevamente el usuario no controla los parámetros "wait"/"nowait".

Esto significa que si configuramos AllowKey así:

AllowKey=system.run[myscript.sh]

entonces

  • system.run[myscript.sh] - será permitido
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] no serán permitidos - el script no se ejecutará si se invoca como un paso de acción

Para permitir todas las variantes descritas, puede añadir:

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

a los parámetros del agente/agent2.