Introdução
O Zabbix Agent2 tem sido um divisor de águas nas questões de monitoramento com a ferramenta Zabbix. Se o Zabbix Agent tradicional (escrito em C) já era bom, o novo agente, escrito em “Go” veio para suprir muitas necessidades de monitoramento e anseios por parte dos usuários/administradores.
Há muito o que se falar sobre as novas features do novo agente, mas neste pequeno artigo, vamos focar em apenas 1 delas, o monitoramento de certificados digitais de web sites.
O problema
A necessidade de acompanhar a validade dos certificados digitais de nossos sites sempre existiu. Quando as organizações passaram a adotar o Zabbix (Feliz escolha!) para monitorar seus ativos e serviços, logo procuraram uma forma de monitorar vários recursos operacionais e táticos, além claro, dos estratégicos ao negócio, mas monitorar certificados digitais continuou sendo um desafio, pois o Zabbix Agent tradicional não tinha (e ainda não tem) uma forma nativa de fazer isso (out-of-the-box).
Pois bem, havia uma solução: “UserParameter”.
Vamos explorá-la um pouco!
Solução inicial (uma delas)
O Zabbix Agent, há muitas versões, traz consigo a possibilidade de estender suas funcionalidades nativas permitindo que a ferramenta “aprenda” novos comandos, o que flexibilizou e viabilizou muitos monitoramentos e aceitação crescente na adoção da plataforma. Mas, existe um custo… (calma, a ferramenta é opensource, então o custo é outro: performance e tempo de configuração).
Criar um monitoramento customizado através do recurso “UserParameter” permitiu aos administradores fazer com que o Zabbix Agent obtivesse o resultado de uma consulta às informações de um certificado de web site. Por exemplo:
Alterar o arquivo zabbix_agent.conf (ou algum outro informado no “Include”) da seguinte forma:
UserParameter=check.cert[*],echo | openssl s_client -servername $1 -connect $2:$3 2>/dev/null | openssl x509 -noout -issuer -subject -dates | awk -F”=” ‘{print $$2}’ | tail -1
O resultado:
May 18 23:59:59 2022 GMT
Nosso Item no Zabbix seria assim:
Nada elegante e nesse exemplo, pouco funcional.
E para as outras informações do mesmo certificado? Mais “UserParameter”.
Novamente, ressalto: Não é a única forma, mas muitos ainda fazem assim! Como você faria?
Zabbix Agent2 e a nova chave para monitoramento de certificados web
Com a versão 5.4, o Zabbix Agent2 trouxe uma forma diferente e mais inteligente de se fazer este monitoramento (dentre tantas outras, para tantos outros). Vejamos!
web.certificate.get[hostname,<port>,<address>]
Ao construir um Item para este monitoramento, teríamos o seguinte:
Este simples Item retornaria uma porção de informações no formato JSON, da seguinte forma:
[s|{“x509”:{“version”:3,”serial_number”:”0475d556f03ac389e7bfb8645d7de68e8de2″,”signature_algorithm”:”SHA256-RSA”,”issuer”:”CN=R3,O=Let’s Encrypt,C=US”,”not_before”:{“value”:”Sep 22 02:11:59 2021 GMT”,”timestamp”:1632276719},”not_after”:{“value”:”Dec 21 02:11:58 2021 GMT”,”timestamp”:1640052718},”subject”:”CN=www.unirede.net”,”public_key_algorithm”:”RSA”,”alternative_names”:[“www.unirede.net”]},”result”:{“value”:”valid”,”message”:”certificate verified successfully”},”sha1_fingerprint”:”4e647487eee205ceb5b1761920a69f5e26491898″,”sha256_fingerprint”:”8c973d9f2a24a252ae8c25dff54e1066304f7d5b1b42aa2f4cb21f8736cf27a2″}]
Perceba que a informação que precisamos foi retornada em dois modos: Texto e Timestamp. Usaremos o segundo modo.
O poder do “Item Preprocessing”
O Preprocessing de um Item permite que o valor retornado, antes de ser inserido no banco de dados do Zabbix, seja trabalhado e passe por uma série de transformações. No caso do Timestamp, existe uma “Unit” no Zabbix que converte o valor numérico recebido e o transforma em data/hora. Pronto, teríamos nossa data de expiração do certificado. Mas antes disso, como faremos para pegar exatamente a informação que queremos? Resposta: Preprocessing.
A. Crie o seguinte Item:
- Escolha o nome do Item;
- Por enquanto, trabalhe com Zabbix Agent (passivo) para que possa executar a coleta da métrica pelo botão “Execute Now” do Frontend. No futuro, é interessante deixar o Zabbix Agent trabalhando como “Active”;
- Crie a chave como acima, escolhendo o site/URL desejado para seu monitoramento;
- No exemplo acima, estamos usando o host “Zabbix server” e seu Zabbix Agent para o monitoramento;
- A informação a ser retornada ainda será texto e coletaremos o valor a cada hora (periodicidade maior ou menor fica a critério do administrador, você!)
- O período de retenção do dado será de 1d, mas quando tudo estiver configurado corretamente, “não vamos reter o texto”, pois vamos alimentar “Dependent Items”.
- Vamos criar o “Dependent Item” para extrair nosso valor de Timestamp, utilizando Preprocessing.
Preencha da seguinte forma as informações sobre o novo Item:
Pule a guia “Tags”, vá para “Preprocessing”:
Da forma como está acima, o “Preprocessing” extrairá o valor numérico do texto do primeiro Item (O Master item), filtrando apenas a parte que nos interessa.
“Discard unchenged with heartbeat” pode ser usado para não armazenar o valor a cada coleta, evitando escrita desnecessária no banco de dados por um valor repetido. Porém, de 6 em 6 horas, mesmo que o valor não mude, o Zabbix o escreverá. Claro, esses parâmetros podem e devem ser de acordo com seu entendimento da administração do valor a ser coletado x armazenado.
Se desejar, antes de criar o “Dependent Item”, faça o teste. Clique em “Test all steps”:
Agora, o valor retornado, quando aplicado à Unit “unixtime”, será convertido para uma visualização de uma data e hora, correspondente à expiração do certificado. Aqui, temos um grande ganho: o valor será armazenado no banco em formato numérico, o que performa melhor no Zabbix!
Na coluna “Last value”, temos a data e hora da expiração do certificado.
Podemos fazer o mesmo para as outras informações que desejamos do certificado digital do web site, porém, a Zabbix SIA já nos deu mais uma forcinha: Existe um template pronto para uso, bastando apenas preencher o nome do site nas variáveis corretas chamadas “MACRO”.
Sejamos felizes!
Considerações
Este pequeno artigo não abordou a criação de triggers para que fossem alarmadas as datas de expiração, o que deve ser de acordo com cada perfil e entendimento do administrador Zabbix.
A data recebida e convertida pelo timestamp se refere à GMT usada para gerar o certificado, logo, pode haver diferença entre a data recebida e a data gravada. Mais passos de “Preprocessing” podem ser necessários para essa correção.
Uma vez que o Master Item está alimentando corretamente os “Dependent Items”, seu histórico não precisa ser armazenado. Isso será uma escrita desnecessária de valores de texto no banco de dados do Zabbix.
Vale explorar o “Template” criado pela Zabbix SAI, mas sempre recomendamos criticar periodicidade, etc…
Ao contrário do que ocorria com o monitoramento via “UserParameter”, o esforço do monitoramento não será feito pelo Zabbix Agent completamente. O Preprocessing será realizado pelo Zabbix Server ou pelo Zabbix Proxy (via a escalabilidade).
O UserParameter ainda poderia ser usado para extrair o valor em texto e em seguida, serem trabalhados “Preprocessing steps”, mas exige conhecimento dos comandos openssl e outros relacionados, além de shellscript.
Por favor, deixe seu comentário e contribua com visões diferentes. Orientamos, mas gostamos de contribuição e construção conjunta.
Bons estudos!
Fale com um especialista!
Saiba como os Treinamentos Zabbix podem ajudar seu negócio.
Paulo R. Deolindo Jr.
Zabbix Trainer
Graduado em Tecnologia da Informação, Pós-graduado em Produção e Sistemas IFF – Instituto Federal de Educação, Ciência e Tecnologia Fluminense e pós-graduado pela Unisul (PR) no curso de Gestão de Projetos de Tecnologia da Informação. Atua confeccionando e ministrando treinamentos com foco em tecnologias Open Source, como Zabbix, Zimbra, Bacula, Gestão e Segurança em Servidores Linux, dentre outras.
- [2017] – Linux Professional Institude Certified
- [2014] – Zabbix Certified Professional
- [2014] – Zabbix Certified Specialist
- [2013] – Zimbra Collaboration Suite
Clique aqui e conheça também os nossos treinamentos na área da segurança da informação.
Bom dia,
Como se encaixaria um cenário de autenticação se fosse necessário ?