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

Casos de uso

Denegar verificación específica
  • Lista negra de un control específico con el parámetro DenyKey. Teclas a juego será desestimado. Se permitirán todas las claves que no coincidan, excepto system.run[] elementos.

Por ejemplo:

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

Una lista negra puede no ser una buena opción, porque un la nueva versión de Zabbix puede tener nuevas claves que no están restringidas explícitamente por la configuración existente. Esto podría causar una seguridad falla.

Denegar comando específico, permitir otros
  • Lista negra de un comando específico con el parámetro DenyKey. Lista blanca de todos otros comandos, con el parámetro AllowKey.
# Deshabilitar comando específico
       DenyKey=sistema.ejecutar[ls -l /]
        
       # Permitir otros scripts
       AllowKey=sistema.ejecutar[*]
Permitir verificación específica, negar otras
  • Incluya verificaciones específicas en la lista blanca con parámetros AllowKey, deniegue otros con DenyKey=*

Por ejemplo:

# Permitir la lectura de registros:
       AllowKey=vfs.archivo.*[/var/log/*]
       
       # Permitir comprobaciones de hora local
       AllowKey=sistema.horalocal[*]
       
       # Denegar todas las demás claves
       Denegar clave=*

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

system.run y AllowKey

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

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

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

Aquí el usuario puede agregar "esperar", "no esperar" u omitir el segundo argumento para usar su valor predeterminado en system.run[].

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

Un usuario configura este script en AdministraciónScripts, establece "Ejecutar en: agente de Zabbix" y pone "myscript.sh" en el script Campo de entrada "Comandos". Cuando se invoca desde la interfaz o la API, Zabbix servidor 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 "esperar"/"noesperar".

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

  • system.run[myscript.sh,nowait]

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

Lo que eso significa es si configuramos AllowKey como:

AllowKey=sistema.ejecutar[miscript.sh]

después

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

Para permitir todas las variantes descritas, puede agregar:

AllowKey=sistema.ejecutar[miscript.sh,*]
       DenyKey=sistema.ejecutar[*]

a los parámetros agent/agent2.