Sidebar

Become a monitoring expert!
Sign up for Zabbix training

13 Restringindo verificações de agentes

Visão geral

É possível restringir as verificações do lado do agente criando um item lista negra, uma lista branca ou uma combinação de lista branca/lista negra.

Para fazer isso, use uma combinação de dois agentes configuração parâmetros:

  • AllowKey=<pattern> - quais verificações são permitidas; <padrão> é especificado usando uma expressão curinga (*)
  • DenyKey=<pattern> - quais verificações são negadas; <padrão> é especificado usando uma expressão curinga (*)

Observe que:

  • Todos os itens system.run[*] (comandos remotos, scripts) são desabilitados por padrão, mesmo quando nenhuma chave de negação é especificada;
  • Desde o Zabbix 5.0.2 o parâmetro do agente EnableRemoteCommands é:
   * obsoleto pelo agente Zabbix
          * não suportado pelo agente Zabbix2

Portanto, para permitir todos os comandos remotos, especifique um parâmetro AllowKey=system.run[*]. Para permitir apenas alguns comandos remotos, crie uma lista branca de comandos específicos do system.run[]. Para não permitir comandos remotos específicos, adicione parâmetros DenyKey com system.run[] comandos antes do parâmetro AllowKey=system.run[*].

Regras importantes

  • Uma lista branca sem uma regra de negação só é permitida para system.run[*] Itens. Para todos os outros itens, os parâmetros AllowKey não são permitidos sem um parâmetro DenyKey; neste caso o agente Zabbix não irá start apenas com parâmetros AllowKey.
  • A ordem importa. Os parâmetros especificados são verificados um a um de acordo com sua ordem de aparência no arquivo de configuração:
    • Assim que uma chave de item corresponder a uma regra de permissão/negação, o item será permitido ou negado; e a verificação de regras pára. Então, se um item corresponde a uma regra de permissão e uma regra de negação, o resultado será depende de qual regra vem primeiro.
    • A ordem afeta também o parâmetro EnableRemoteCommands (se usado).
  • Números ilimitados de parâmetros AllowKey/DenyKey são suportados.
  • As regras AllowKey, DenyKey não afetam HostnameItem, Parâmetros de configuração HostMetadataItem, HostInterfaceItem.
  • O padrão de chave é uma expressão curinga em que o curinga (*) caractere corresponde a qualquer número de caracteres em determinada posição. Pode ser usado tanto no nome da chave quanto nos parâmetros.
  • Se uma chave de item específica não for permitida na configuração do agente, o item será relatado como não suportado (nenhuma dica é dada quanto ao razão);
  • O agente Zabbix com a opção de linha de comando --print (-p) não será exibido chaves que não são permitidas pela configuração;
  • O agente Zabbix com a opção de linha de comando --test (-t) retornará "Chave de item não compatível." status para chaves que não são permitidas por configuração;
  • Comandos remotos negados não serão registrados no log do agente (se LogRemoteCommands=1).

Casos de uso

Negar verificação específica
  • Lista negra de uma verificação específica com o parâmetro DenyKey. Chaves correspondentes será desautorizado. Todas as chaves não correspondentes serão permitidas, exceto system.run[] itens.

Por exemplo:

# Negar acesso seguro a dados
       DenyKey=vfs.file.contents[/etc/passwd,*]

::: não importante Uma lista negra pode não ser uma boa escolha, porque um nova versão do Zabbix pode ter novas chaves que não são explicitamente restritas pela configuração existente. Isso pode causar uma segurança falha. :::

Negar comando específico, permitir outros
  • Lista negra de um comando específico com o parâmetro DenyKey. Colocar todos na lista de permissões outros comandos, com o parâmetro AllowKey.
# Desabilita comando específico
       DenyKey=system.run[ls -l /]
        
       # Permitir outros scripts
       AllowKey=system.run[*]
Permitir verificação específica, negar outras
  • Verificações específicas da lista de permissões com parâmetros AllowKey, negue outras com DenyKey=*

Por exemplo:

# Permitir a leitura de logs:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Permitir verificações de hora local
       AllowKey=system.localtime[*]
       
       # Negar todas as outras chaves
       DenyKey=*

Exemplos de padrões

Padrão Descrição Correspondências Sem correspondência
* Corresponde a todas as chaves possíveis com ou sem parâmetros. Qualquer Nenhum
vfs.file.contents Corresponde a vfs.file.contents sem parâmetros. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Corresponde vfs.file.contents com parâmetros vazios. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Corresponde vfs.file.contents com quaisquer parâmetros; não corresponderá a vfs.file.contents sem colchetes. vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Corresponde vfs.file.contents com os primeiros parâmetros correspondentes a /etc/passwd e todos os outros parâmetros com qualquer valor (também vazio). vfs .file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]
vfs. file.contents[/var/log/zabbix_server.log]
vfs.file.contents[]
vfs.file.contents[*passwd*] Corresponde vfs.file.contents com o primeiro parâmetro correspondente a *passwd* e nenhum outro parâmetro. vfs.file.contents[/etc /passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Corresponde a vfs.file.contents apenas com o primeiro parâmetro correspondente a *passwd* e todos os parâmetros seguintes com qualquer valor (também vazio) . vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[/etc/passwd]<br >vfs.file.contents[/tmp/test]
vfs.file.contents[/var/log/zabbix_server.log,*,abc] Corresponde vfs.file.contents com o primeiro parâmetro correspondente a /var/log/zabbix_server.log , terceiro parâmetro correspondente a 'abc' e qualquer segundo parâmetro (também vazio). vfs.file.contents[/var/log/zabbix_server.log,,abc]
vfs.file.contents[/ var/log/zabbix_server.log,utf8,abc]
vfs.file.contents[/var/log/zabbix_server.log,,abc,def]
vfs.file.contents[/etc/passwd,utf8] Corresponde vfs.file.contents com o primeiro parâmetro correspondente a /etc/passwd, segundo parâmetro correspondente a 'utf8' e nenhum outro argumento. vfs. file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Corresponde a qualquer chave que comece com vfs.file. sem nenhum parâmetro. vfs.file.contents
vfs.file.size
vfs.file.contents[]< br>vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Corresponde a qualquer chave que comece com vfs.file. com quaisquer parâmetros. vfs.file.size.bytes[]
vfs.file. size[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Corresponde a qualquer chave começando com vfs. e terminando com .contents sem nenhum parâmetro. vfs.mount.point.file.contents
vfs..contents
vfs. conteúdo

system.run e AllowKey

Um script hipotético como 'myscript.sh' pode ser executado em um host via Agente Zabbix de várias maneiras:

1. Como chave de item em uma verificação passiva ou ativa, por exemplo:

  • system.run[myscript.sh]
  • system.run[myscript.sh,wait]
  • system.run[myscript.sh.nowait]

Aqui o usuário pode adicionar "wait", "nowait" ou omitir o 2º argumento para usar seu valor padrão em system.run[].

2. Como um script global (iniciado pelo usuário no frontend ou API).

Um usuário configura este script em AdministrationScripts, define "Execute on: Zabbix agent" e coloca "myscript.sh" no script Campo de entrada "Comandos". Quando invocado do frontend ou API o Zabbix servidor envia ao agente:

  • system.run[myscript.sh,wait] - até Zabbix 5.0.4
  • system.run[myscript.sh] - desde 5.0.5

Aqui o usuário não controla os parâmetros "wait"/"nowait".

3. Como um comando remoto de uma ação. O servidor Zabbix envia para agente:

  • system.run[myscript.sh,nowait]

Aqui, novamente, o usuário não controla os parâmetros "wait"/"nowait".

O que isso significa é se definirmos AllowKey como:

AllowKey=system.run[myscript.sh]

então

  • system.run[myscript.sh] - será permitido
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] não será permitido - o script não será executado se invocado como passo de ação

Para permitir todas as variantes descritas, você pode adicionar:

AllowKey=system.run[myscript.sh,*]
       DenyKey=system.run[*]

aos parâmetros agente/agente2.