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.
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 especificarse 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:
--print (-p) del agent de Zabbix no mostrará las claves de los items denegados.--test (-t) del agent de Zabbix devolverá "Unsupported item key." para las claves de los items denegados.LogRemoteCommands=1.Puede especificar un número ilimitado de reglas AllowKey o DenyKey, aunque su orden es importante.
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.Los siguientes ejemplos muestran patrones de configuración comunes para AllowKey y DenyKey.
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 que el agent de Zabbix ejecute scripts en los hosts a través de todos los métodos disponibles:
system.run[myscript.sh])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]Para controlar el parámetro wait/nowait, debe establecer una regla diferente. Por ejemplo, puede permitir solo items system.run[myscript.sh,wait], excluyendo así otros métodos:
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:
test.bat puede ejecutarse con cualquier argumento, incluidos los no deseados.vfs.file.* coincide solo con claves de item sin parámetros; sin embargo, todos los items vfs.file requieren parámetros.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 ejecutar 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]La siguiente tabla muestra cómo se comparan los patrones de claves de item:
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.sizevfs.file.contentsNo coincide: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
La clave comienza con vfs.La clave termina con .contentsSin parámetros |
Coincide: vfs..contentsvfs.mount.point.file.contentsNo coincide: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
La clave comienza con vfs.file.Cualquier parámetro o vacío |
Coincidevfs.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.contentsSin parámetros |
Coincide:vfs.file.contentsNo 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.contentsCualquier 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.contentsEl primer parámetro es /etc/passwdCualquier 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.contentsEl primer parámetro incluye passwdSin 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.contentsEl primer parámetro incluye passwdCualquier 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.contentsEl primer parámetro es /etc/passwdEl 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] |