12 Restringindo verificações do agent
Visão geral
Você pode controlar quais keys de item o agent Zabbix ou agent 2 tem permissão ou negação para usar ao executar verificações de item, comandos remotos ou scripts.
Para isso, utilize estes parâmetros de configuração do agent para definir regras de permissão/negação:
AllowKey=<pattern>DenyKey=<pattern>
O <pattern> deve conter uma única key de item e suporta curingas (*).
O curinga corresponde a qualquer número de caracteres em sua posição e pode ser usado para corresponder a keys de item ou parâmetros (por exemplo, vfs.file.*[*]).
Para melhorar a segurança, recomenda-se usar keys de item exatas em vez de curingas. Para mais detalhes, consulte Protegendo regras de permissão/negação.
Ao contrário de outros parâmetros de configuração do agent, você pode especificar um número ilimitado de parâmetros AllowKey ou DenyKey.
Notas importantes
-
Todos os itens
system.runestão desabilitados por padrão (mesmo quandoDenyKeyestá vazio), como seDenyKey=system.run[*]estivesse definido como a última regra. Por causa disso, você pode permitir itenssystem.runespecíficos sem negar explicitamente outros itenssystem.run. -
Um item especificado em
AllowKeytambém deve ser especificado emDenyKey(exceto para itenssystem.run); caso contrário, o agent Zabbix não iniciará. -
Se possível, use
AllowKeypara permitir apenas os itens necessários e negar todo o resto. Algumas chaves podem ser abusadas para ler arquivos não intencionais via path traversal (por exemplo,vfs.file.contents["../../../../etc/passwd"]), e novas versões do agent Zabbix podem introduzir chaves não cobertas por suas regrasDenyKey. -
A configuração de
AllowKeyeDenyKeynão afeta os parâmetros do agentHostnameItem,HostMetadataItemouHostInterfaceItem. -
Itens negados tornam-se não suportados sem qualquer dica ou mensagem de erro; por exemplo:
- O parâmetro de linha de comando do agent Zabbix
--print (-p)não mostrará as chaves de itens negados. - O parâmetro de linha de comando do agent Zabbix
--test (-t)retornará "Unsupported item key." para as chaves de itens negados. - O arquivo de log do agent Zabbix não registrará comandos remotos negados se
LogRemoteCommands=1.
- O parâmetro de linha de comando do agent Zabbix
Ordem das regras de permitir/negar
Você pode especificar um número ilimitado de regras AllowKey ou DenyKey, embora a ordem delas seja importante.
- As regras são avaliadas uma a uma, de cima para baixo.
- Quando uma chave de item corresponde a uma regra, ela é permitida ou negada, e a avaliação das regras é interrompida.
Por exemplo, ao avaliar vfs.file.contents[/etc/passwd], as regras são processadas da seguinte forma:
AllowKey=vfs.file.contents[/tmp/app.log] # O padrão da chave de item não corresponde, o agent passa para a próxima regra.
AllowKey=vfs.file.contents[/etc/passwd] # O padrão da chave de item corresponde; o agent permite a checagem do item e interrompe a avaliação das regras.
DenyKey=vfs.file.*[*] # O agent ignora a regra, pois a avaliação foi interrompida.
A seguinte ordem de regras irá negar a checagem do item:
DenyKey=vfs.file.*[*] # O padrão da chave de item corresponde; o agent nega a checagem do item e interrompe a avaliação das regras.
AllowKey=vfs.file.contents[/etc/passwd] # O agent ignora a regra, pois a avaliação foi interrompida.
AllowKey=vfs.file.contents[/tmp/app.log] # O agent ignora a regra, pois a avaliação foi interrompida.
Exemplos
Os exemplos a seguir mostram padrões comuns de configuração para AllowKey e DenyKey.
Permitindo verificações e comandos específicos
Permitir apenas duas verificações de item vfs.file e dois 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.*[*]
Definir DenyKey=system.run[*] é desnecessário, pois todos os outros comandos system.run são negados por padrão.
Permitindo scripts
Permita que o agent Zabbix execute scripts nos hosts por todos os métodos disponíveis:
- Scripts globais que podem ser executados no frontend ou via API (este método sempre usa a chave
system.run[myscript.sh]) - Comandos remotos de operações de ação (este método sempre usa a chave
system.run[myscript.sh,nowait]) - Itens do agent Zabbix
system.runcom o script, por exemplo:system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]
Para controlar o parâmetro wait/nowait, você deve definir uma regra diferente.
Por exemplo, você pode permitir apenas itens system.run[myscript.sh,wait], excluindo assim outros métodos:
AllowKey=system.run[myscript.sh,wait]
Protegendo regras allow/deny
Este exemplo mostra como proteger regras AllowKey ou DenyKey excessivamente permissivas.
Considere as seguintes regras:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]
No Windows, você deve escapar espaços no caminho usando um acento circunflexo (^).
Essas regras contêm um caractere curinga (*), que pode ser mal utilizado:
- O script
test.batpode ser executado com quaisquer argumentos, incluindo argumentos não intencionais. - O padrão
vfs.file.*corresponde apenas a chaves de item sem parâmetros; no entanto, todos os itensvfs.fileexigem parâmetros. - O padrão
system.cpu.load[*]corresponde apenas a chaves de item com parâmetros; no entanto, os itenssystem.cpu.loadnão exigem parâmetros.
Para proteger essas regras, permita explicitamente a execução de test.bat apenas com argumentos específicos e negue padrões corretos de chaves de item; por exemplo:
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[*]
Você pode testar as regras executando os seguintes comandos, que retornarão 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]
Exemplos de padrões
A tabela a seguir mostra como os padrões de chave de item são correspondidos:
- Uma chave corresponde ao padrão somente se atender a todas as condições na coluna Corresponde.
- Os parâmetros devem estar totalmente entre colchetes (por exemplo,
vfs.file.contents[*evfs.file.contents*utf8]são padrões inválidos).
| Padrão | Corresponde | Exemplos |
|---|---|---|
* |
Qualquer chave com ou sem parâmetros | |
vfs.file.* |
A chave começa com vfs.file.Sem parâmetros |
Corresponde:vfs.file.sizevfs.file.contentsNão corresponde: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
A chave começa com vfs.A chave termina com .contentsSem parâmetros |
Corresponde: vfs..contentsvfs.mount.point.file.contentsNão corresponde: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
A chave começa com vfs.file.Qualquer parâmetro ou vazio |
Correspondevfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Não corresponde: vfs.file.get.custom |
vfs.file.contents |
A chave é vfs.file.contentsSem parâmetros |
Corresponde:vfs.file.contentsNão corresponde: vfs.file.contents[/etc/passwd] |
vfs.file.contents[] |
A chave é vfs.file.contents[]Parâmetros vazios |
Corresponde:vfs.file.contents[]Não corresponde: vfs.file.contents |
vfs.file.contents[*] |
A chave é vfs.file.contentsQualquer parâmetro ou vazio |
Corresponde:vfs.file.contents[/path/to/file]Não corresponde: vfs.file.contents |
vfs.file.contents[/etc/passwd,*] |
A chave é vfs.file.contentsO primeiro parâmetro é /etc/passwdQualquer segundo parâmetro ou vazio |
Corresponde:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Não corresponde: vfs.file.contents[]vfs.file.contents[/etc/passwd] |
vfs.file.contents[*passwd*] |
A chave é vfs.file.contentsO primeiro parâmetro inclui passwdSem segundo parâmetro |
Corresponde:vfs.file.contents[/etc/passwd]Não corresponde: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8] |
vfs.file.contents[*passwd*,*] |
A chave é vfs.file.contentsO primeiro parâmetro inclui passwdQualquer segundo parâmetro ou vazio |
Corresponde:vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Não corresponde: vfs.file.contents[/etc/passwd]vfs.file.contents[/tmp/test] |
vfs.file.contents[/etc/passwd,utf8] |
A chave é vfs.file.contentsO primeiro parâmetro é /etc/passwdO segundo parâmetro é utf8 |
Corresponde:vfs.file.contents[/etc/passwd,utf8]Não corresponde: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |