[comment]: # ({5024b934-780b1aa2})
# 12 Restringir comprobaciones del agente

[comment]: # ({/5024b934-780b1aa2})

[comment]: # ({40953ae4-9de656b2})
#### Resumen

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, utilice estos parámetros de [configuración del agent](/manual/appendix/config/zabbix_agentd) para definir reglas de अनुमति/denegación:

-   `AllowKey=<pattern>`
-   `DenyKey=<pattern>`

El `<pattern>` 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 puede usarse para hacer coincidir claves de item o parámetros (por ejemplo, `vfs.file.*[*]`).

::: noteimportant
Para mejorar la seguridad, se recomienda usar claves de item exactas en lugar de comodines.
Para más detalles, consulte [Securing allow/deny rules](#securing-allowdeny-rules).
:::

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

[comment]: # ({/40953ae4-9de656b2})

[comment]: # ({6fa61f9f-3145c750})
#### Notas importantes

-   Todos los items [`system.run`](/manual/config/items/itemtypes/zabbix_agent/#system.run) están deshabilitados por defecto (incluso cuando `DenyKey` está vacío), como si se hubiera configurado `DenyKey=system.run[*]` como la [última regla](#allowdeny-rule-order).
    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 la manipulación de rutas (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:
    -   El parámetro de línea de comandos [`--print (-p)`](/manual/concepts/agent#options) del agent de Zabbix no mostrará las claves de los items denegados.
    -   El parámetro de línea de comandos [`--test (-t)`](/manual/concepts/agent#options) del agent de Zabbix devolverá "Unsupported item key." para las claves de los items denegados.
    -   Cuando el registro está activado (`LogRemoteCommands=1`), el archivo de registro del agent de Zabbix no registrará [comandos remotos](/manual/config/notifications/action/operation/remote_command) denegados.

[comment]: # ({/6fa61f9f-3145c750})

[comment]: # ({071aae59-66ec4bb8})
#### Orden de las reglas de permitir/denegar

Puede especificar un número ilimitado de reglas `AllowKey` o `DenyKey`, aunque su orden es importante.

-   Las reglas se evalúan una por una, de arriba a abajo.
-   Cuando una clave de item coincide con una regla, se permite o 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:

```default
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:

```default
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.
```

[comment]: # ({/071aae59-66ec4bb8})

[comment]: # ({cb10c569-253ad144})
#### Ejemplos

Los siguientes ejemplos muestran patrones de configuración comunes para `AllowKey` y `DenyKey`.

[comment]: # ({/cb10c569-253ad144})

[comment]: # ({0fd42e58-19895d10})
##### Permitir comprobaciones y comandos específicos

Permitir solo dos comprobaciones de [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) y dos comandos [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system.run):

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

::: noteclassic
No es necesario establecer `DenyKey=system.run[*]`, porque todos los demás comandos `system.run` se deniegan por defecto.
:::

[comment]: # ({/0fd42e58-19895d10})

[comment]: # ({b0df3494-3cc5f239})
##### Permitir scripts

Permitir que el agent de Zabbix ejecute scripts en los hosts a través de todos los métodos disponibles:

-   [Scripts globales](/manual/web_interface/frontend_sections/alerts/scripts) que pueden ejecutarse en el frontend o a través de la API (este método siempre utiliza la clave `system.run[myscript.sh]`)
-   Comandos remotos desde [operaciones de acción](/manual/config/notifications/action/operation#operation-details) (este método siempre utiliza la clave `system.run[myscript.sh,nowait]`)
-   [`system.run`](/manual/config/items/itemtypes/zabbix_agent#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]`

```default
AllowKey=system.run[myscript.sh,*]
```

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

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

[comment]: # ({/b0df3494-3cc5f239})

[comment]: # ({abfd7422-1965a7d7})
##### Asegurar las reglas allow/deny

Este ejemplo muestra cómo asegurar reglas `AllowKey` o `DenyKey` demasiado permisivas.

Considere las siguientes reglas:

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

::: noteclassic
En Windows, debe escapar los espacios en la ruta utilizando un acento circunflejo (`^`).
:::

Estas reglas contienen un comodín (`*`), que puede ser mal utilizado:

-   El script `test.bat` puede ejecutarse con cualquier argumento, incluidos los no deseados.
-   El patrón `vfs.file.*` solo coincide con claves de item sin parámetros; sin embargo, todos los items [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) requieren parámetros.
-   El patrón `system.cpu.load[*]` solo coincide con claves de item con parámetros; sin embargo, los items [`system.cpu.load`](/manual/config/items/itemtypes/zabbix_agent#system.cpu.load) no requieren parámetros.

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

```default
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`.

```bash
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]
```

[comment]: # ({/abfd7422-1965a7d7})

[comment]: # ({23f78b84-16bccaff})
##### Ejemplos de patrones

La siguiente tabla muestra cómo se comparan los patrones de claves de item:

-   Una clave coincide con el patrón solo si cumple **todas** las condiciones de la columna *Coincide*.
-   Los parámetros deben estar completamente entre corchetes (por ejemplo, `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.`<br>Sin parámetros|Coincide:<br>`vfs.file.size`<br>`vfs.file.contents`<br><br>No coincide:<br>`vfs.file.contents[]`<br>`vfs.file.size[/var/log/app.log]`|
|`vfs.*.contents`|La clave comienza con `vfs.`<br>La clave termina con `.contents`<br>Sin parámetros|Coincide: <br>`vfs..contents`<br>`vfs.mount.point.file.contents`<br><br>No coincide:<br>`vfs.contents`<br>`vfs.file.contents[]`|
|`vfs.file.*[*]`|La clave comienza con `vfs.file.`<br>Cualquier parámetro o vacío|Coincide<br>`vfs.file.get.custom[]`<br>`vfs.file.size[/var/log/app.log, utf8]`<br><br>No coincide:<br>`vfs.file.get.custom`|
|`vfs.file.contents`|La clave es `vfs.file.contents`<br>Sin parámetros|Coincide:<br>`vfs.file.contents`<br><br>No coincide:<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[]`|La clave es `vfs.file.contents[]`<br>Parámetros vacíos|Coincide:<br>`vfs.file.contents[]`<br><br>No coincide:<br>`vfs.file.contents`|
|`vfs.file.contents[*]`|La clave es `vfs.file.contents`<br>Cualquier parámetro o vacío|Coincide:<br>`vfs.file.contents[/path/to/file]`<br><br>No coincide:<br>`vfs.file.contents`|
|`vfs.file.contents[/etc/passwd,*]`|La clave es `vfs.file.contents`<br>El primer parámetro es `/etc/passwd`<br>Cualquier segundo parámetro o vacío|Coincide:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>No coincide:<br>`vfs.file.contents[]`<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[*passwd*]`|La clave es `vfs.file.contents`<br>El primer parámetro incluye `passwd`<br>Sin segundo parámetro|Coincide:<br>`vfs.file.contents[/etc/passwd]`<br><br>No coincide:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`|
|`vfs.file.contents[*passwd*,*]`|La clave es `vfs.file.contents`<br>El primer parámetro incluye `passwd`<br>Cualquier segundo parámetro o vacío|Coincide:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>No coincide:<br>`vfs.file.contents[/etc/passwd]`<br>`vfs.file.contents[/tmp/test]`|
|`vfs.file.contents[/etc/passwd,utf8]`|La clave es `vfs.file.contents`<br>El primer parámetro es `/etc/passwd`<br>El segundo parámetro es `utf8`|Coincide:<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>No coincide:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf16]`|

[comment]: # ({/23f78b84-16bccaff})
