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
AllowKeyoAllowKeyRegexppara permitir únicamente los items necesarios, yDenyKeyoDenyKeyRegexpcomo ú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 reglasDenyKeyoDenyKeyRegexp. -
Haga que las reglas de permiso sean lo más específicas posible: use claves de item exactas en lugar de comodines (
*) en las reglasAllowKey, y use los patrones de expresión regular más específicos en las reglasAllowKeyRegexp. -
Si utiliza
DenyKeyoDenyKeyRegexp, 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.runse deniegan de forma predeterminada (incluso cuandoDenyKeyyDenyKeyRegexpestán vacíos), como si se hubiera establecidoDenyKey=system.run[*]como la última regla. Por este motivo, puede permitir itemssystem.runespecíficos sin denegar explícitamente otros itemssystem.run. Esta denegación implícita se aplica únicamente asystem.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,AllowKeyRegexpyDenyKeyRegexpno afecta a los parámetros del agentHostnameItem,HostMetadataItemniHostInterfaceItem. -
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.
- 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
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.runcon 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.batpuede 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 itemsvfs.filerequieren parámetros. - El patrón
system.cpu.load[*]coincide únicamente 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 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[*yvfs.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.sizevfs.file.contentsNo coincide con: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
La clave comienza por vfs.La clave termina en .contentsSin parámetros |
Coincide con: vfs..contentsvfs.file.contentsvfs.mount.point.file.contentsNo coincide con: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
La clave comienza por vfs.file.Cualquier parámetro o parámetros vacíos |
Coincide convfs.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.contentsSin parámetros |
Coincide con:vfs.file.contentsNo 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.contentsCualquier 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.contentsEl primer parámetro es /etc/passwdCualquier 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.contentsExactamente 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.contentsEl primer parámetro contiene passwdCualquier 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.contentsEl primer parámetro es /etc/passwdEl 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.sizevfs.file.contentsNo coincide con: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
^vfs\..*\.contents$ |
La clave comienza por vfs.La clave termina en .contentsSin parámetros |
Coincide con: vfs..contentsvfs.mount.point.file.contentsNo coincide con: vfs.contentsvfs.file.contents[] |
^vfs\.file\..*\[[\s\S]*\]$ |
La clave comienza por vfs.file.Cualquier parámetro o parámetros vacíos |
Coincide convfs.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.contentsSin parámetros |
Coincide con:vfs.file.contentsNo 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.contentsCualquier 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.contentsEl primer parámetro es /etc/passwdCualquier 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.contentsCualquier 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.contentsEl primer parámetro contiene passwdCualquier 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.contentsEl primer parámetro es /etc/passwdEl 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] |