# Monitoramento de servidores DNS (Unbound ou Bind), homologado com Debian 11, Debian 12, Ubuntu Server 22.04 LTS, python3.11, Zabbix 6.x, Grafana 10.x e Infinity
Obs: No Zabbix basta importar os templates e vincular ao host, a criacao da api deve ser feita no proprio servidor DNS.
# Verifique a sua distribuição SO e faca a instalação do zabbix-agent no servidor DNS que será monitorado (Siga as instruções de instalação pela página de download oficial do Zabbix)
cat /etc/os-release
https://www.zabbix.com/br/download
# Após fazer a instalação libere o ip do seu servidor zabbix e também a execução de scripts:
nano /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,ip-do-seu-zabbix-aqui
### Option: EnableRemoteCommands - Deprecated, use AllowKey=system.run[*] or DenyKey=system.run[*] instead
# Internal alias for AllowKey/DenyKey parameters depending on value:
# 0 - DenyKey=system.run[*]
# 1 - AllowKey=system.run[*]
#
# Mandatory: no
AllowKey=system.run[*] # Adicione essa linha aqui para liberar a execução de scripts pelo Zabbix-agent.
# Apos os ajustes reinicie o zabbix-agent no servidor DNS
systemctl restart zabbix-agent
-----------------------------------------------
# Instale as dependências do Linux para o projeto (No servidor DNS, base Debian, se tiver usando Rhel ou outra distribuição, pesquise como instalar essas dependências)
apt install tcpdump dnstop uuid jq net-tools
# Criando diretório de scripts no servidor DNS
mkdir -p /usr/lib/zabbix/externalscripts/
# Criando diretório de logs e de leitura para o zabbix
mkdir /usr/lib/zabbix/externalscripts/beedns
chown -R zabbix:zabbix /usr/lib/zabbix/externalscripts/beedns/
# Criando e navegando ate o diretório base do projeto (ATENCAO: Não mude o nome dos diretórios base ou você vai ter que adaptar varias coisas '-')
mkdir /opt/bee
cd /opt/bee/
# Baixe o diretório do projeto para a API (beesoftDNS) no diretório recém criado /opt/bee/ (Voce pode usar o WinSCP ou FileZilla)
# Navegue até o diretório do projeto
cd /opt/bee/beesoftDNS/
# Mova os scripts para o diretorio de scrips do Zabbix no servidor DNS /usr/lib/zabbix/externalscripts/
mv /opt/bee/beesoftDNS/bee_captura_clientes_dns.sh /usr/lib/zabbix/externalscripts/
mv /opt/bee/beesoftDNS/bee_consulta_clientes_dns.sh /usr/lib/zabbix/externalscripts/
mv /opt/bee/beesoftDNS/bee_consulta_status_dns.sh /usr/lib/zabbix/externalscripts/
# Ajuste as permissoes dos scripts
chmod +x /usr/lib/zabbix/externalscripts/bee_*
# Verifique o caminho completo para os executáveis e ajuste se necessário nos scripts bee_captura_clientes_dns.sh e beedns_executor.sh (Evitar problemas com o crontab em distribuições mais antigas)
which timeout
which tcpdump
which dnstop
root@DNS-MASTER[/opt/bee/beesoftDNS]# which timeout
/usr/bin/timeout
root@DNS-MASTER[/opt/bee/beesoftDNS]# which tcpdump
/usr/bin/tcpdump
root@DNS-MASTER[/opt/bee/beesoftDNS]# which dnstop
/usr/bin/dnstop
root@DNS-MASTER[/opt/bee/beesoftDNS]#
# Ajuste a interface no script de captura dos clientes (Configure o nome da sua interface seguindo o exemplo da ens18)
nano /usr/lib/zabbix/externalscripts/bee_captura_clientes_dns.sh
# Faca a instalacao do python-venv (Necessario para criacao de ambientes virtuais do python no Linux)
apt install python3-venv
# Crie o seu ambiente virtual e o ative (Basicamente aqui voce esta dizendo que ao executar scripts com o python sera usado o python que esta no venv, nao o python padrao do Linux)
python3 -m venv venv
source venv/bin/activate
# Faca a instalacao das dependencias do python para esse projeto (Alguem pra fazer o decouple? hehe)
pip install django
# Faca um teste na aplicacao (Pare com CTRL + C)
python manage.py runserver
# Crie o service que vamos utilizar pra rodar a API em segundo plano (Maneira simplificada, caso prefira pode subir via Nginx)
nano /etc/systemd/system/beedns-server.service
[Unit] Description=Beedns Server [Service] ExecStart=/opt/bee/beesoftDNS/venv/bin/python /opt/bee/beesoftDNS/manage.py runserver 0.0.0.0:8053 Restart=always User=root Group=root [Install] WantedBy=default.target
# Ajuste para a interface que tem o Ip do seu servidor DNS (Padrao ens18)
nano /opt/bee/beesoftDNS/beedns_executor.sh
# Iniciando a API, verificando o status e habilitando para iniciar junto ao boot
systemctl start beedns-server.service
systemctl status beedns-server.service
systemctl enable beedns-server.service
# Validando se a API foi iniciada com sucesso (Verifique se a porta 8053 e listada como aberta)
netstat -tulpn
# Ajuste as permissoes e teste o script que gera os arquivos json (Veja a saida dos arquivos 1.json ate o 13.json no diretorio /opt/bee/beesoftDNS/tmp)
chmod +x /opt/bee/beesoftDNS/beedns_executor.sh
chmod +x /opt/bee/beesoftDNS/dnstop.py
# Teste do executor, a saida deve ser parecida com essa
/opt/bee/beesoftDNS/beedns_executor.sh
tcpdump: listening on ens18, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11792 packets captured
11836 packets received by filter
0 packets dropped by kernel
Caso de erro, pode ser o caminho do arquivo. mude essa linha:
Acesse:
nano /opt/bee/beesoftDNS/beedns_executor.sh
Mude:
/usr/bin/timeout 10 /usr/sbin/tcpdump -ni $interface udp port 53 -w /opt/bee/beesoftDNS/tmp/dns.pcap
Por:
/usr/bin/timeout 10 /usr/bin/tcpdump -ni $interface udp port 53 -w /opt/bee/beesoftDNS/tmp/dns.pcap
# Crie uma chave Token para a sua API
uuid
A2:
3bea24aa-ab7e-11f0-a193-d2d63eb283bf
# Adicione a sua chave Token no seu arquivo views.py
nano /opt/bee/beesoftDNS/beeapi/views.py
VALID_TOKEN = "Sua-Chave-Token-uuid-Aqui"
# Libere no arquivo settings.py os ips que podem requisitar a API beedns (Uma seguranca a mais seria adicionar um iptables ou ufw, fica a seu criterio)
nano /opt/bee/beesoftDNS/beesoft/settings.py
# Lista de IPs permitidos
ALLOWED_IPS = [
'ip-do-seu-grafana',
'ip-de-onde-voce-quiser-testar',
'127.0.0.1', # Localhost
]
# Reinicie a API
systemctl restart beedns-server.service
# Faca um teste direto da API (A partir do IP que voce liberou na lista anterior, tenha cuidado com possiveis NATs no caminho):
Instale:
apt install curl -y
http://ip-do-seu-servidor-dns:8053/api/consulta/?token=Seu-Token-uuid-Aqui&file=9
curl "http://10.100.100.2:8053/api/consulta/?token=3bea24aa-ab7e-11f0-a193-d2d63eb283bf&file=9"
Exemplo feito direto no servidor ZABBIX para o Server DNS
# Adicione a atualização dos dados no crontab (Adicione no final do arquivo no servidor DNS)
crontab -e
# Atualizando informacoes de DNS | A cada 5min
*/5 * * * * /opt/bee/beesoftDNS/beedns_executor.sh > /opt/bee/beesoftDNS/logs/log_beedns_executor.txt
# Atualizando o total de clientes do DNS | A cada 5min
*/5 * * * * /usr/lib/zabbix/externalscripts/bee_captura_clientes_dns.sh > /usr/lib/zabbix/externalscripts/beedns/log_bee_captura_clientes_dns.txt
--------------
# Liste os seus agendamentos com crontab -l (l de list)
crontab -l
###########
# Caso eu passe pra voce testar os scripts que estao no crontab diretamente, sempre remove o redirecionamento com >, ex:
/opt/bee/beesoftDNS/beedns_executor.sh
ou
/usr/lib/zabbix/externalscripts/bee_captura_clientes_dns.sh
###########
# No Zabbix importe os templates:
--> Linux by Zabbix agent - BEE.yaml ou Linux by Zabbix agent padrao (Linux padrao by zabbix-agent)
--> Template Monitoramento DNS - BEE.yaml (Especifico do DNS)
##Cuidado com NAT
# No Grafana importe o json, selecione as datasources do Zabbix e do Infinity (Caso nao tenha o Infinity faca a instalacao, nao precisa configurar nada nele inicialmente).
# Ajuste as variaveis do Dashboard:
Coloque o IP do DNS e o TOKEN
# E pronto, seja feliz ;)
Tem dois templates diferentes.
Um para
DNS RECURSIVO - MASTER
DNS RECURSIVO - SLAVE
###########
Ref:
https://github.com/measurement-factory/dnstop
https://t.me/beesolutions
https://t.me/fernandoalmondes
#variavel grafana do hd
/Space: Used, in %|Space utilization/
Este artigo foi útil?
Que bom!
Obrigado pelo seu feedback
Desculpe! Não conseguimos ajudar você
Obrigado pelo seu feedback
Feedback enviado
Agradecemos seu esforço e tentaremos corrigir o artigo