Restricción de comprobaciones de agent

Descripción general

Puede controlar qué claves de item puede utilizar o no Zabbix agent 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 permiso o denegación:

  • AllowKey=<pattern>
  • DenyKey=<pattern>
  • AllowKeyRegexp=<pattern>
  • DenyKeyRegexp=<pattern>

<pattern> debe contener una única clave de item.
Para AllowKey y DenyKey, <pattern> admite comodines (*). El comodín coincide con cualquier cantidad de caracteres en su posición y puede utilizarse para hacer coincidir claves de item o parámetros (por ejemplo, vfs.file.*[*]).
Para AllowKeyRegexp y DenyKeyRegexp, <pattern> admite expresiones regulares. El patrón de expresión regular puede utilizarse para hacer coincidir claves de item y sus cadenas de parámetros. Consulte también los ejemplos de escape correcto.
Tenga en cuenta que Zabbix agent y Zabbix agent 2 pueden admitir una sintaxis de expresiones regulares diferente.

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

Notas importantes

  • Use AllowKey o AllowKeyRegexp para permitir únicamente los items necesarios, y DenyKey o DenyKeyRegexp como última regla para denegar todos los demás. Esto es más seguro que depender únicamente de reglas de denegación, ya que las nuevas versiones del Zabbix agent pueden introducir claves de item que no estén contempladas en sus reglas DenyKey o DenyKeyRegexp.

  • Haga que las reglas de permiso sean lo más específicas posible: use claves de item exactas en lugar de comodines (*) en las reglas AllowKey, y use los patrones de expresión regular más específicos en las reglas AllowKeyRegexp.

  • Si utiliza DenyKey o DenyKeyRegexp, deniegue claves de item completas en lugar de archivos o comandos específicos. Las reglas dirigidas a parámetros específicos pueden eludirse; por ejemplo, el recorrido de rutas (vfs.file.contents["../../../../etc/passwd"]) puede leer un archivo que una regla destinada a bloquear su ruta directa debía impedir. Para obtener más información, consulte Protección de las reglas de permiso/denegación.

  • Todos los items system.run se deniegan de forma predeterminada (incluso cuando DenyKey y DenyKeyRegexp están vacíos), como si se hubiera establecido DenyKey=system.run[*] como la última regla. Por este motivo, puede permitir items system.run específicos sin denegar explícitamente otros items system.run. Esta denegación implícita se aplica únicamente a system.run; para todas las demás claves, las reglas de permiso no tienen efecto a menos que después de ellas haya una regla de denegación.

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

  • Los items denegados pasan a ser no soportados sin ninguna indicación de que hayan sido denegados; tienen el mismo aspecto que las claves de item inexistentes. Por ejemplo:

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

Orden de reglas allow/deny

Puede especificar un número ilimitado de reglas AllowKey, DenyKey, AllowKeyRegexp o DenyKeyRegexp, aunque su orden importa.

  • Las reglas se evalúan una por una, de arriba hacia abajo.
  • Cuando una clave de item coincide con una regla, se permite o se 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 la clave de item no coincide; el agent pasa a la siguiente regla.
AllowKey=vfs.file.contents[/etc/passwd]     # El patrón de la 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 la 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, DenyKey, AllowKeyRegexp y DenyKeyRegexp.

Permitir comprobaciones y comandos específicos

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

mediante AllowKey y DenyKey:

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

mediante AllowKeyRegexp y DenyKeyRegexp:

AllowKeyRegexp=^vfs\.file\.(contents|size)\[/tmp/app\.log\]$
AllowKeyRegexp=^system\.run\[/usr/bin/(uptime|df -h /)\]$
DenyKeyRegexp=^vfs\.file\..*\[[\s\S]*\]$

No es necesario establecer DenyKey=system.run[*], porque todos los demás comandos system.run se deniegan de forma predeterminada (consulte Notas importantes).

Permitir scripts

Permita que el Zabbix agent ejecute scripts en los hosts mediante todos los métodos disponibles:

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

o

AllowKeyRegexp=(?s)^system\.run\[myscript\.sh,.*\]$

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

AllowKey=system.run[myscript.sh,wait]

o

AllowKeyRegexp=^system\.run\[myscript\.sh,wait\]$
Protección de las reglas de allow/deny

Estos ejemplos muestran cómo proteger las reglas AllowKey/AllowKeyRegexp o DenyKey/DenyKeyRegexp demasiado permisivas.

Considere las siguientes reglas:

usando AllowKey y DenyKey:

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

usando AllowKeyRegexp y DenyKeyRegexp:

AllowKeyRegexp=^system\.run\["C:\\Program\sFiles\\Zabbix\sAgent\s2\\scripts\\test\.bat.*"\]$
DenyKeyRegexp=^vfs\.file\..*$
DenyKeyRegexp=^system\.cpu\.load\[.*\]$

En Windows, debe escapar los espacios de la ruta mediante un signo de intercalación (^) para AllowKey o DenyKey, y mediante \s para AllowKeyRegexp o DenyKeyRegexp.

Estas reglas contienen un comodín (*) que puede utilizarse de forma indebida:

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

Para proteger 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:

usando AllowKey y DenyKey:

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

usando AllowKeyRegexp y DenyKeyRegexp:

AllowKeyRegexp=^system\.run\["C:\\Program\sFiles\\Zabbix\sAgent\s2\\scripts\\test\.bat (status|version)"\]$
DenyKeyRegexp=^vfs\.file\..+\[[\s\S]*\]$
DenyKeyRegexp=^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

Las siguientes tablas muestran cómo se comparan los patrones de las claves de item:

  • Una clave coincide con el patrón solo si cumple todas las condiciones de la columna Coincide con.
  • Los parámetros deben estar completamente encerrados entre corchetes (por ejemplo, vfs.file.contents[* y vfs.file.contents*utf8] son patrones no válidos).
  • Los ejemplos ilustran únicamente la comparación de patrones; los item reales requieren parámetros.

Se recomienda utilizar AllowKey o AllowKeyRegexp para permitir explícitamente el acceso solo a los archivos y comandos necesarios, y DenyKey o DenyKeyRegexp para denegar claves de item completas (consulte Notas importantes).

Uso de reglas basadas en comodines:

Patrón Coincide con Ejemplos
* Cualquier clave con o sin parámetros
vfs.file.* La clave comienza por vfs.file.
Sin parámetros
Coincide con:
vfs.file.size
vfs.file.contents

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

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

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

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

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

No coincide con:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] La clave es vfs.file.contents
El primer parámetro es /etc/passwd
Cualquier parámetro, parámetros vacíos o ningún parámetro adicional
Coincide con:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]

No coincide con:
vfs.file.contents[]
vfs.file.contents[*passwd*] La clave es vfs.file.contents
Exactamente un parámetro que contiene passwd
Coincide con:
vfs.file.contents[/etc/passwd]

No coincide con:
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 contiene passwd
Cualquier segundo parámetro o un segundo parámetro vacío
Coincide con:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]

No coincide con:
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 con:
vfs.file.contents[/etc/passwd,utf8]

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

Uso de reglas basadas en expresiones regulares:

Patrón Coincide con Ejemplos
^[\s\S]*$ Cualquier clave con o sin parámetros
^vfs\.file\.[^\[]*$ La clave comienza por vfs.file.
Sin parámetros
Coincide con:
vfs.file.size
vfs.file.contents

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

No coincide con:
vfs.contents
vfs.file.contents[]
^vfs\.file\..*\[[\s\S]*\]$ La clave comienza por vfs.file.
Cualquier parámetro o parámetros vacíos
Coincide con
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

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

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

No coincide con:
vfs.file.contents
^vfs\.file\.contents\[[\s\S]*\]$ La clave es vfs.file.contents
Cualquier parámetro o parámetros vacíos
Coincide con:
vfs.file.contents[/path/to/file]

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

No coincide con:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
^vfs\.file\.contents\[[\s\S]*passwd[\s\S]*\]$ La clave es vfs.file.contents
Cualquier parámetro, con al menos uno que contenga passwd
Coincide con:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
^vfs\.file\.contents\[[^,]*passwd[^,]*,[\s\S]*\]$ La clave es vfs.file.contents
El primer parámetro contiene passwd
Cualquier segundo parámetro o un segundo parámetro vacío
Coincide con:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

No coincide con:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
^vfs\.file\.contents\[/etc/passwd,(utf8|windows-1252)\]$ La clave es vfs.file.contents
El primer parámetro es /etc/passwd
El segundo parámetro es utf8 o windows-1252
Coincide con:
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd,windows-1252]

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