12 Restringir comprobaciones del agente
Descripción general
Puede controlar qué claves de item Zabbix agent o agent 2 tiene permitido o denegado usar al ejecutar comprobaciones de item, comandos remotos o scripts.
Para ello, use estos parámetros de configuración del agent para definir reglas de अनुमति/denegación:
AllowKey=<pattern>DenyKey=<pattern>AllowKeyRegexp=<pattern>DenyKeyRegexp=<pattern>
El <pattern> debe contener una sola clave de item.
Para AllowKey y DenyKey, el <pattern> admite comodines (*).
El comodín coincide con cualquier número de caracteres en su posición y puede usarse para coincidir con claves de item o parámetros (por ejemplo, vfs.file.*[*]).
Para AllowKeyRegexp y DenyKeyRegexp, el <pattern> admite expresiones regulares.
El patrón de expresión regular puede usarse para coincidir con claves de item y sus cadenas de parámetros.
Consulte también ejemplos de escape correcto.
Tenga en cuenta que Zabbix agent y Zabbix agent 2 pueden admitir una sintaxis de expresiones regulares diferente.
Para mejorar la seguridad, se recomienda usar claves de item exactas en lugar de comodines para AllowKey y DenyKey.
También se recomienda usar los patrones de expresión regular más específicos para AllowKeyRegexp y DenyKeyRegexp.
Para más detalles, consulte Protección de las reglas de अनुमति/denegación.
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
-
Todos los items
system.runestán deshabilitados de forma predeterminada (incluso cuandoDenyKeyyDenyKeyRegexpestán vacíos), como si se hubiera establecidoDenyKey=system.run[*]oDenyKeyRegexp=^system\.run\[.*\]$como la última regla. Debido a esto, puede permitir items específicos desystem.runsin denegar explícitamente otros items desystem.run. -
Si es posible, use
AllowKey/AllowKeyRegexppara permitir solo los items necesarios y denegar todo lo demás. Algunas claves pueden aprovecharse para leer archivos no previstos mediante path traversal (por ejemplo,vfs.file.contents["../../../../etc/passwd"]), y las nuevas versiones de Zabbix agent pueden introducir claves no cubiertas por sus reglasDenyKey/DenyKeyRegexp. -
La configuración
AllowKey,DenyKey,AllowKeyRegexpyDenyKeyRegexpno afecta a los parámetros de agentHostnameItem,HostMetadataItemniHostInterfaceItem. -
Los items denegados pasan a no ser compatibles sin ninguna indicación ni mensaje de error; por ejemplo:
- El parámetro de línea de comandos
--print (-p)de Zabbix agent no mostrará las claves de item denegadas. - El parámetro de línea de comandos
--test (-t)de Zabbix agent devolverá "Unsupported item key." para las claves de item denegadas. - Cuando la registración está activada (
LogRemoteCommands=1), el archivo de registro de Zabbix agent no registrará los comandos remotos denegados.
- El parámetro de línea de comandos
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
Permita solo dos comprobaciones de item vfs.file y dos comandos system.run:
usando 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.*[*]
usando AllowKeyRegexp y DenyKeyRegexp:
AllowKeyRegexp=^vfs\.file\.(contents|size)\[/tmp/app\.log\]$
AllowKeyRegexp=^system\.run\[/usr/bin/(uptime|df -h /)\]$
DenyKeyRegexp=^vfs\.file\..*\[.*\]$
No es necesario establecer DenyKey=system.run[*] ni DenyKeyRegexp=^system\.run\[.*\]$, porque todos los demás comandos system.run se deniegan de forma predeterminada.
Permitir scripts
Permita que Zabbix agent ejecute scripts en los hosts mediante todos los métodos disponibles:
- Scripts globales que pueden ejecutarse en el frontend o mediante API (este método siempre usa la clave
system.run[myscript.sh]) - Comandos remotos de operaciones de acción (este método siempre usa la clave
system.run[myscript.sh,nowait]) - Elementos
system.runde Zabbix agent 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=^system\.run\[myscript\.sh,.*\]$
Para controlar el parámetro wait/nowait, debe establecer una regla diferente.
Por ejemplo, puede permitir solo elementos system.run[myscript.sh,wait], excluyendo así otros métodos:
AllowKey=system.run[myscript.sh,wait]
o
AllowKeyRegexp=^system\.run\[myscript\.sh,wait\]$
Protección de reglas allow/deny
Estos ejemplos muestran cómo proteger 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 en la ruta usando un caret (^) para AllowKey o DenyKey y \s para AllowKeyRegexp o DenyKeyRegexp.
Estas reglas contienen un comodín (*) (o .* para patrones basados en expresiones regulares), que puede ser mal utilizado:
- El script
test.batpuede ejecutarse con cualquier argumento, incluidos los no deseados. - El patrón
vfs.file.*(^vfs\.file\..*$) coincide con claves de item tanto con parámetros como sin ellos; sin embargo, todos los itemsvfs.filerequieren parámetros. - El patrón
system.cpu.load[*](^system\.cpu\.load\[.*\]$) coincide solo con claves de item con parámetros; sin embargo, los itemssystem.cpu.loadno requieren parámetros.
Para proteger estas reglas, permita explícitamente la ejecución de test.bat solo con argumentos específicos y deniegue 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\..+\[.*\]$
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 clave de item:
- Una clave coincide con el patrón solo si cumple todas las condiciones de la columna Matches.
- Los parámetros deben estar completamente encerrados entre corchetes (por ejemplo,
vfs.file.contents[*yvfs.file.contents*utf8]son patrones no válidos). - Los ejemplos ilustran solo la coincidencia de patrones; los items reales requieren parámetros.
Para AllowKey y DenyKey:
| Pattern | Matches | Examples |
|---|---|---|
* |
Cualquier clave con o sin parámetros | |
vfs.file.* |
La clave comienza con vfs.file.Con o sin parámetros |
Matches:vfs.file.sizevfs.file.contentsvfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
La clave comienza con vfs.La clave termina con .contentsSin parámetros |
Matches: vfs..contentsvfs.mount.point.file.contentsDoes not match: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
La clave comienza con vfs.file.Parámetros cualesquiera o vacíos |
Matchesvfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Does not match: vfs.file.get.custom |
vfs.file.contents |
La clave es vfs.file.contentsSin parámetros |
Matches:vfs.file.contentsDoes not match: vfs.file.contents[/etc/passwd] |
vfs.file.contents[] |
La clave es vfs.file.contents[]Parámetros vacíos |
Matches:vfs.file.contents[]Does not match: vfs.file.contents |
vfs.file.contents[*] |
La clave es vfs.file.contentsParámetros cualesquiera o vacíos |
Matches:vfs.file.contents[/path/to/file]Does not match: vfs.file.contents |
vfs.file.contents[/etc/passwd,*] |
La clave es vfs.file.contentsEl primer parámetro es /etc/passwdEl segundo parámetro es cualquiera o vacío |
Matches:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Does not match: vfs.file.contents[]vfs.file.contents[/etc/passwd] |
vfs.file.contents[*passwd*] |
La clave es vfs.file.contentsParámetros cualesquiera, al menos uno contiene passwd |
Matches:vfs.file.contents[/etc/passwd]vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8] |
vfs.file.contents[*passwd*,*] |
La clave es vfs.file.contentsEl primer parámetro contiene passwdEl segundo parámetro es cualquiera o vacío |
Matches:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Does not match: 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 |
Matches:vfs.file.contents[/etc/passwd,utf8]Does not match: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |
Para AllowKeyRegexp y DenyKeyRegexp:
| Pattern | Matches | Examples |
|---|---|---|
^.*$ |
Cualquier clave con o sin parámetros | |
^vfs\.file\..*$ |
La clave comienza con vfs.file.Con o sin parámetros |
Matches:vfs.file.sizevfs.file.contentsvfs.file.contents[]vfs.file.size[/var/log/app.log] |
^vfs\..*\.contents$ |
La clave comienza con vfs.La clave termina con .contentsSin parámetros |
Matches: vfs..contentsvfs.mount.point.file.contentsDoes not match: vfs.contentsvfs.file.contents[] |
^vfs\.file\..*\[.*\]$ |
La clave comienza con vfs.file.Parámetros cualesquiera o vacíos |
Matchesvfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Does not match: vfs.file.get.custom |
^vfs\.file\.contents$ |
La clave es vfs.file.contentsSin parámetros |
Matches:vfs.file.contentsDoes not match: vfs.file.contents[/etc/passwd] |
^vfs\.file\.contents\[\]$ |
La clave es vfs.file.contents[]Parámetros vacíos |
Matches:vfs.file.contents[]Does not match: vfs.file.contents |
^vfs\.file\.contents\[.*\]$ |
La clave es vfs.file.contentsParámetros cualesquiera o vacíos |
Matches:vfs.file.contents[/path/to/file]Does not match: vfs.file.contents |
^vfs\.file\.contents\[/etc/passwd,.*\]$ |
La clave es vfs.file.contentsEl primer parámetro es /etc/passwdEl segundo parámetro es cualquiera o vacío |
Matches:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Does not match: vfs.file.contents[]vfs.file.contents[/etc/passwd] |
^vfs\.file\.contents\[.*passwd.*\]$ |
La clave es vfs.file.contentsParámetros cualesquiera, al menos uno contiene passwd |
Matches:vfs.file.contents[/etc/passwd]vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8] |
^vfs\.file\.contents\[.*passwd.*,.*\]$ |
La clave es vfs.file.contentsEl primer parámetro contiene passwdEl segundo parámetro es cualquiera o vacío |
Matches:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Does not match: vfs.file.contents[/etc/passwd]vfs.file.contents[/tmp/test] |
^vfs\.file\.contents\[/etc/passwd,(utf8|windows-1252)\]$ |
La clave es vfs.file.contentsEl primer parámetro es /etc/passwdEl segundo parámetro es utf8 o windows-1252 |
Matches:vfs.file.contents[/etc/passwd,utf8]vfs.file.contents[/etc/passwd,windows-1252]Does not match: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |