Servidor DNS Bind9 – Recursivo + Autoritativo DNSSEC + Reverso + RPZ + Fail2ban + nftables + Zabbix no Debian 11/12


BIND (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato.

Ante de iniciar a instalação é preciso saber como funciona um DNS:

DNS Recursivo
O DNS recursivo é responsável pela resolução de nomes, começando sempre com consultas recursivas nos servidores raízes. Para melhorar a eficiência, reduzir o tráfego DNS na Internet e aumentar o desempenho em aplicativos de usuário final, utilizamos o cache de DNS, armazenando resultados das consulta DNS por um período de tempo determinado na configuração (tempo de vida determinado pelo autoritativo do domínio consultado).

DNS Autoritativo
É o serviço DNS que possui autoridade sob um domínio. Assim, como o servidor ns1.remontti.com.br é o DNS autoritativo de meu domínio remontti.com.br, é ele que sempre vai responder qualquer subdomínio ou “hosts” (por exemplo: blog.remontti.com.br).
É nesse servidor que você vai apontar nas configurações de um domínio registrado no registro.br, por exemplo.

DNS Reverso
DNS atua resolvendo o nome do domínio/subdomínio para um endereço IP correspondente. Já o DNS Reverso, como o próprio nome diz, resolve o endereço IP para o nome de domínio associado ao host. Ou seja, quando temos disponível o endereço IP de um host e não sabemos o endereço do domínio (nome dado à máquina ou outro equipamento que acesse uma rede), tentamos resolver o endereço IP através do DNS reverso que procura qual nome de domínio está associado aquele endereço.
Os servidores que utilizam o DNS Reverso conseguem verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS.
Isto evita que alguém utilize um domínio que não lhe pertence para enviar spam, por exemplo (por isso que ele é importante para servidores de e-mail).

Correção dos dados de geolocalização
É muito importante que sua geolocalização estaja correta no maxmind.com, verifique alguns de de seus IPs.
https://www.maxmind.com/en/geoip-demo

Para correção temos dois formulários.
Correct a GeoIP Location
https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-location/
Correct a GeoIP ISP or Organization
https://support.maxmind.com/geoip-data-correction-request/correct-a-geoip-isp-or-organization/

Instalação do Debian

Requesitos:
Debian 12 Bookworm – Instalação Limpa (Recomendado)
Debian 11 Bullseye – Instalação Limpa

Leitura obrigatória:
Configurando interface de rede no Debian
Como melhorar a produtividade no seu Debian após instalação

Vire root com o comando correto!

No Debian 12 o rsyslog foi abandonado como sistema de logs e esta usando systemd-journald. Como o bind salva alguns logs em arquivo e o fail2ban lê os mesmo vamos precisar dele, para isso instale o mesmo:

Instalação fail2ban e nftables (Master/Slave)

Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores contra ataques de força bruta. Ele opera monitorando arquivos de logs, sendo o mais comum seu uso para bloquear endereços IPs que podem pertencer à hosts que estão tentando violar a segurança do seu servidor.
nftables é um firewall baseado no iptables que agora no Debian 11 já vem instalado por padrão subistituindo o antigo iptables.

Entendo o funcionamento do fail2ban:

Por padrão o filtro de SSH já vem habilitado, então seu SSH (porta 22) já está “protegida”, se alguém errar a senha por 5 vezes terá seu IP bloqueado por 10 minutos.

Para alterar esses padrões de tempo e número de tentativas edite: (este arquivo é muito bem comentado o que cada variável faz!)

Localize as linhas, e ajuste de acordo com suas necessidades

Se desejar desativar o filtro de SSH

Altere para false

Porém como eu sempre altero a porta do SSH de todo o servidor bem como tempo para digitar a senha, é natural que o fail2ban não ira poteger caso você tenha alterado a mesma. Inclusive recomendo você adotar essa boa pratica.

Em Port defina a nova porta, e LoginGraceTime defina o tempo em segundos para digitar a senha, e nunca seja ignorante de permitir o acesso root direto no SSH em PermitRootLogin, a não ser que tenha uma forte motivo para isso (Me conte nos comentários, até hoje não tive motivo para tal!)

Com a porta alterada do SSH (como no exemplo 60002) vamos ajusta no fail2ban para proteger essa nova porta

Localize e adicione 60002:

Por padrão de segurança do fail2ban usa o iptables e faz o bloquei apenas da porta do serviço que esta sofrendo o “ataque”, vamos subistituir o iptables pelo nftables ou por route. Vou deixar os dois modelos a baixo de exemplo.

nftables: Em vez de usar o filtro multiport, vou setar allports e modificá-lo para que tentativas de violação crie uma regra de firewall de drop e não reject definitivamente o IP e não apenas fechando a porta do serviço. Para isso edite:

Localize banaction e banaction_allports e altere para nftables-allports:

Para bloquear tudo e não apenas a porta do serviço atacada:

Localize rule_match-allports e remova o meta l4proto \{ \} ficando:

Ainda no altere o blocktype de reject para drop

Habilite o nftblaes para o boot do sistema, em seguida reinicie os serviços

Verifique se mesmo estão rodando sem nenhum erro:

route: Com o método route iremos em vezes de criar uma regra de firewall para o IP que esta “atacando” vamos coloca-lo em blackhole, assim se você possuir algum roteamento já poderá exportar o IP para sua borda para matar lá já (gosto + dessa).

Localize banaction e banaction_allports e altere para route:

Vamos ajustar agora para ação ser blackhole

Em blocktype altere para blackhole

Se tiver acesso a outro servidor externo tente fazer uma conexão SSH, e erre varias vezes a senha para ser bloqueado, assim você pode validar seu fail2ban.

Para visualizar seu firewall nftables use o comando:

Ou se usou route para mostra a tabela de rotas:

Alguns comandos úteis do fail2ban
Visulizar os filtros

Visualizar detalhe de um filtro

Remover um IP de um determinado filtro

Exemplo de script para remover todos os IPs banidos uma a um.

Se desejar adicionar algum prefixo a uma lista branca você pode editar:

Localize ignoreip, desomente a linha (remova o # da frete) e adicione os prefixo que deseja ignorar, para não cair bloqueio.

Reinicie o serviço

Instalação do Bind9 (Master/Slave)

Instalação dos pacotes

Arquitetura de arquivos e diretórios do bind9 no Debian 11:

Configuração do Recursivo

Alteramos o DNS do servidor fazendo com que ele consulte em si próprio, através dos IPs de loopback. Essa alteração deve ser feita no arquivo /etc/resolv.conf.

Para validar se seu servidor conseguer resolver nomes nele próprio, use o comando dig e host. Alguns comandos de Ex:

Como identificar o problema com resoluções de nomes, famoso: “Meu DNS não está resolvendo nomes!”. Use o atributo +trace, assim o mesmo mostrará todo o caminho feito para a resolução, assim você ira identificar onde “parou” e não obteve a informação necessária. Ex:

Observe as linhas em destaque.

Primeiramente consultamos os root servers, que estão em nosso servidor essa info, logo perceba que ele fez a consulta dos root servers em localhost, em seguida um dos root servers falou para ele que é são os DNS responsáveis do .br e no exemplo ele escolheu o a.root-servers.net, que falou para ele quem são os DNS fo google, e o DNS do google, neste cado o c.dns.br falou qual é o IPv4 (A) do google.com.br = 42.250.219.195, o valor 300 é o tempo que seu servidor irá armazenar essa resposta em cache. Eu levaria muito tempo para explicar aqui, então quando tiver um curso meu de DNS não fique de fora 🙂

Configurando Recursivo no DNS Master

Nesse cenário vou usar os prefixos 45.80.48.0/22 e 2804:f123::/32 (desculpe caso seja de alguém)

Edite:

A explicação de todos os campos e variáveis estão nos comentários do arquivo:

Leitura recomendada:
https://bind9.readthedocs.io/en/latest/reference.html
https://downloads.isc.org/isc/bind9/9.11.24/doc/arm/Bv9ARM.ch06.html

Para verificar se seu arquivo tem algum erro use o comando named-checkconf

Imprime todas as configurações

Bem útil para você mandar suas conf quando esta com algum problema lá no grupo do telegram 🙂

Reinicie o bind9 para que as novas configurações sejam carregadas, e verifique se o serviço subiu sem erros.

Configurando Recursivo (Slave)

Não esqueça da parte do fail2ban e nftables.

Já explicado no master, a diferença aqui aqui não temos os campos allow-transfer e also-notify, já que ele é o servidor secundário.

Reinicie o bind9 para que as novas configurações sejam lidas, e verifique se o serviço subiu sem erros.

Colocando o fail2ban para protege seu DNS (Master/Slave)

Ele irá ler os logs do bind com tentativas de consultas negadas (denied), para isso precisamos configurar nosso bind para gerar tal logs.Faça isso no Mastere Slave.

Adicione logging { … }:

Crie o diretório onde o bind vai registrar seus logs e dê permissão para que ele possa gravar nesta pasta.

Reinicie o serviço

Iremos criar um filtro para ler os logs do bind

Adicione:

Ativamos o filtro que criamos, e definimos o tempo de banimento para 12h, se você desejar pode ajustar para mais ou menos se achar necessário. E “maxretry” que é a quantidade de tentativas usaremos 1, limitando a 1 tentativa (não recomendo alterar) apenas para já ser bloqueado.

Em seguida ativamos reinciamos os serviços.

Consulte se o filtro bind9 foi carregado

Para validar realize um teste de um servidor externo não autorizado à resolver nomes em seu servidor com o comando dig, ex:

Deixe rodando o comando para visualizar os logs.

Log como ira aparecer, onde 192.168.254.198 é o IP que tentou resolver nomes e google.com.br foi o dóminio.

Verificando agora o fail2ban vamos encontrar o IP 192.168.254.198 em Banned IP list.

Verificando as regras do firewall nftables também iremos encontra-lo.

Para remover o IP basta:

Atualização dos Roots servers

Não é comum os Roots Servers terem alguma alteração, mas é algo que ao logo desses anos vi acontecer já, então caso um dia precise atualiza-los. Primeiramente renomei o arquivo atual root.hints

Agora vamos baixar a versão mais recente.

Para visualizar se tem alguma diferença entre os arquivos execute o comando:

Perceba que o que mudou apenas foi a data em last update. Resto do arquivo continua igual.

Desativar IPv6 do bind 🙁

Se por algum motivo precisar desabilitar faça:

Para

Para

Reinicie o serviço

Configurando um proxy do DNS recursivo

Está confiuração deixará de usar os Root Serves e irá fazer as consultar em outros servidores DNS, e armazenar no seu cache local.

Adicione dentro de options { ….. }

Comando dig

Algumas coisas que você precisa saber, ex:

O resultado retornará algumas seções, porém como configuramos no named.conf.options minimal-responses yes, iremos ter apenas 3. Isso deixa seu DNS mais otimizado, além do mais yes é o padrão agora na versão 9.16 do bind, caso queira testar experimente setar em: no.

HEADER: Ela contém diversas informações a respeito da consulta.

status indica o tratamento de erro nas consultas, sendo eles:
NOERROR: Nenhum erro encontrado, ou seja, sucesso.
SERVFAIL: Houve algum problema com o servidor, que não conseguiu processar a query.
NXDOMAIN: Significa que o domínio pesquisado não existe.
REFUSED: O servidor rejeitou a solicitação.
flags: indicador das opções de recursividade e de autoridade, em resumo este conjunto de “letrinhas” (aa, rd, ra, etc), indica o estado ligado/desligado RFC1035
qr: se a mensagem é uma query (0) ou uma resposta (1). Como estamos avaliando somente as respostas, este bit sempre estará ligado (consequentemente, sempre veremos a string “qr” no campo “flags“).
aa: que o servidor que respondeu à solicitação é autoritativo do domínio.
rd: que a query é recursiva, que as requisições devem ser encaminhadas a outros servidores até que o servidor autoritativo seja encontrado.
ra: que o servidor que respondeu à requisição suporta consultas recursivas.
tc: que a mensagem de resposta está truncada.
z: reservado para uso futuro.
contadores: na mesma linha das flags, econtramos quantos resultados vieram nas sessões.

QUESTION
Replica a query que foi enviada para consulta, por padão quando não passa A = IPv4

Outros exemplos:

ANSWER
Contém a resposta para a consulta que foi enviada.

AUTHORITY
Servidores que respondem com “autoridade” pelo domínio (os NS)

ADDITIONAL
Informações auxiliares ou adicionais à pesquisa, no exemplo IPs dos servidores DNS

E na ultima sessão entrosamos podemos dizer mais 4 sub sessões:

QUERY TIME: vai informar o tempo que levou para realizar a consulta solicitada, quando esse tempo retora 0 é porque a consulta ele pegou do cache.
SERVER: Qual servidor ele realizou a consulta
WHEN: dara e hora da consulta + UTC
MSG SIZE: tamanho do pacote

😉 Um pouquinho de dig para vocês!

Seu DNS recursivo já está pronto, se seu intuito é apenas um DNS recursivo pode pular a parte do autoritativo/reverso, e eu recomendo que você crie uma regra extra no seu nftables (firewall) para fechar a porta 53 externamente, então vou deixar um modelo dessa configuração:
ISSO SÓ DEVER SER FEITO SE SEU DNS FOR APENAS RECURSIVO!

Em elements, altere para os seus IPs que terão permissão, o arquivo é quase que auto explicativo. Eu vou aproveitar e criar uma proteção para o SSH e o Zabbix agent

Reinicie os serviços

Autoritativo

Valorize os domínios.br registrados no https://registro.br/ o memos financia todo o projeto NIC.BR, que na internet brasileira tem uma papel fundament

Configuração do Autoritativo (Master)

Para ficar organizado criaremos alguns diretórios em /var/cache/bind/. Primeiramente a pasta master-aut que se é referencia onde vai ficar nossa configuração do DNS Master autoritativo, e dentro desta pasta uma com o nome do nosso domínio no exemplo remontti.net.br, assim se você tiver vários dominios criamos uma pasta para cada ficando bem organizado.

Agora vamos criar um em /var/cache/bind/master-aut/remontti.net.br/ para que conter toda a configuração do mesmo, e para ficar objetivo adotei em usar o nome do próprio domínio.hosts ex: remontti.net.br.hosts

É importante que o serial (2021102601) seja alterado toda vez que for o aruquivo sofrer qualquer alteração, assim o servidor slave saberá que precisa importar novamente as configurações. Ele segue o padrão [ano-mes-dia-sequencial] não que seja uma regra.

No exemplo estou confiurando apenas alguns subdomínos básicos, como ns1, ns2, www e apontando ele para seus respectivos endereços IPv4 e IPv6, os ipos mais comuns de registros:
A: Associa um nome a um endereço IPv4.
AAAA: Associa um nome a um endereço IPv6.
NS: Name Server. Define quais servidores são os servidores autoritativos do domínio
SOA: Start-Of-Authority. Detalhes da autoridade do domínio. Descreve o servidor que tem autoridade sobre a zona, além do contato técnico, número serial e outros campos.
MX: Mail eXchanger. Define os servidores de e-mail.
PTR: Pointer. Retorna o nome associado a um endereço IP. (reverso)
CNAME: Canonical NAME. Usados para criar apelidos para o domínio.
TXT: TeXT. Usados para descrições, comentários, observações de um domínio. Também usado para definir configurações de SPF.

Vamos criar um diretório para gerar nossas keys do DNSSEC.

Entre no diretório:

Agora vamos a criação das chaves:

Os comandos acima irão gerar 4 arquivos com extensões .key e .private

Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.

Em /etc/bind/named.conf.local “chamaremos” a zona remontti.net.br

Adicione ao final do arquivo:

Para facilitar farei um atalho da pasta /var/cache/bind/master-aut em /etc/bind/master-aut.

Se você é da turma do mimi você pode subistiruir type master por type primary e type slave por type secondary bem como nome das pastas. 😛

Reinicie o serviço.

Certifique-se que o bind esta rodando sem erros

Novos arquivos são gerados em /var/cache/bind/master-aut/remontti.net.br/ .jbk .signed .signed.jnl

Precisaremos descobri nossa keytag e o digest que serão informados no registro.br, para isso rode o comando:

Sendo, keytag:26883 e o digest: F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841

Possíveis bloqueios do fail2ban em caso de configuração errada, ao verificação de um domínios que seu servidor não é autoritativo, ou por um erro na configuração, a consulta será interpretada como recursiva, logo o IP de origem será bloqueado pelo fail2ban, e registrado no arquivo de logs /var/log/named/security.log.

Para evitar fail2ban bloquei seus IPs e pricnipalmente do registro.br, pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam sendo bloqueando. Para evitarmos isso vamos incluir seus IPs bem como os do registrobr na variável ignoreip do fail2ban:

Localize #ignoreip =, remova o comentário (#) e inclua os prefixo do registrobr 200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32 bem como altere 45.80.48.0/22 2804:f123::/32 para IPs do seu AS

Reinicie o fail2ban

Configuração do Autoritativo (Slave)

A configuração do slave é bem simples, pois ele irá importar do master todas as configurações.
Para organização vamos seguir o mesmo padrão de diretórios do master

Informamos nossa zona do tipo slave e o IP do nosso servidor master.

Alteramos a permissão do diretório para que o bind consiga criar os arquivos.

Mais uma vez farei uma atalho dentro de /etc/bind para facilitar.

E reiniciamos o serviço

Agora ao verificar o diretório /var/cache/bind/slave-aut/remontti.net.br/ encontraremos nosso arquivo criado automaticamente importado do servidor master.

Validando seu autoritativo no registro.br

Vamos verificar se o servidor responde pelo nosso domínio, acesse: https://registro.br/tecnologia/ferramentas/verificacao-de-dns/ e preecha o formulário com o seu domínio “remontti.net.br” e o IP do seu servidor e clique em pesquisar.
RESULTADO

Se seu servidor DNS estiver respondedo pelo domínio solicitado uma resposta de sucesso ira apacer: Autoridade sobre o domínio. Repita o mesmo no seu servidor Slave
Agora vamos fazer o mesmo para validade nosso DNSSEC, acesse: https://registro.br/tecnologia/ferramentas/verificacao-de-ds/ e preecha o formulário com o seu domínio “remontti.net.br” e o IP do seu servidor e clique em pesquisar.
RECORDS DS DAS CHAVES ENCONTRADAS

Se tudo estiver OK, ira receber o resultado da sua KEYTAG e DISGEST bem como encontrado anteriormente.

Seu domínio já está pronto para ser configurado no registro.br, para isso acesse sua conta clique sobre seu domínio e clique em: ALTERAR SERVIDORES DNS, e preecha o formulário, exemplo:

Posso ter mais de um autoritativo no mesmo servidor?

Sim, inclusive o reverso é um autoritavio, vamos falar dele em seguida. Não existe um limite, o limite é seu hardware.
Veja mais um exemplo para um segundo domínio:

Adicione:

Vamos criar um diretório para gerar nossas keys do DNSSEC.

Entre no diretório:

Agora vamos a criação das chaves:

Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.

Adicione a zona cursodns.com.br em named.conf.local

Adicione ao final do arquivo:

Se desejar validar seu arquivo antes de reiniciar o serviço:

Tudo ok, altere as permissões para não ter erro, e reinicie o bind:

Para o Slave

Posso ter domínios “fakes”?
Sim, basta criar uma zona. Mas juridicamente você pode ter dor de cabeça. Recomendo a leitura do DNS Response Policy Zone (RPZ) para que retornem resultados modificados em grande escala de uma foma mais eficaz. Alguns administradores podem usar o DNS RPZ para impedir acessos indesejados, normalmente é usado em empresas para bloquear por exemplo hosts infectados por malwares, sites pornográficos, entre outros casos, bloqueando a resolução de nomes. Segue um modelo simples e rápido para montar seu RPZ.

Adicione mais uma entrada em para um novo subdominio “umbrella” apontando para um servidor, esse pode está rodando um serviço web qual pode ter uma tela com um aviso.

Adicione uma nova zona chamada rpz.zone

Dentro de options { … } adcione:

};
Criaremos o diretório rpz, bem como o arquivos de hosts

Sendo que para cada dominio que você deseja apontar para resolver o mesmo IP do nosso umbrella.cursodns.com.br siga este padrão:

Assim qualquer subidominio (*).domino.com seja traduzido sempre para o mesmo IP.

Altere as permissões e reinicie o serviço

Agora faça um teste para ver o que seu servidor ira traduzir:

Uma boa list de hosts você pode encontrar aqui.
🙂 Não esquece de mandar meu presente de natal!

Reverso DNS Master – Para prefixos maiores ou igual a /24.

Obs: Para fazer a Delegações de DNS reverso do seu bloco, é importante que você já tenha configurado no registro.br seu DNS autoritativo.

Para ficar organizado criaremos a pasta master-rev para salvar todos nossos arquivos

Para nosso cenários vou usar os prefixos 45.80.48.0/22 e 2804:f123::/32. O bloco 45.80.48.0/22 será necessário quebrar em 4 arquivos uma para cada prefixo /24 qual teremos nossos 1024 nome de hosts (IPs).

Lembra que anteriormente comentei que o reverso não passa de um domínio autoritativo? Então é isso mesmo, a forma de configuração é a mesma, porem já temos o nosso domínios para IPv4 x.x.x.in-addr.arpa e x.x.x.x.x.x.x.x.ip6.arpa para IPv6.

Primeiro arquivo /24 farei com o nome de 45.80.48.rev, poderia ser qualquer nome, mas assim fica bem sugestivo.

Preste atenção em 48.80.45.in-addr.arpa. essa linha ela deve ser alterada com o inverso do seu IP, de trás para frente.
Outra coisa importante é o serial (2021102601) ele está presente em todos os arquivos e deve ser alterado toda vez que for alterado. Ele segue o padrão [ano-mes-dia-sequencial]. É fundamental altera-lo para que o servidor slave copie sempre que tiver uma alteração.

Neste arquivo darei nomes personalizados apenas para o ns1 e ns2 o resto usarei o GENERATE para gerar de forma automatica todos os mais de mil nomes, sengindo o padrão 45-80-50-x.remontti.net.br.

Proximo /24

Antenção no 3.2.1.f.4.0.8.2.ip6.arpa o site http://rdns6.com/hostRecord pode ser bem útil para gerar seus PTRs.

Ajustamos as permissões:

Criamos uma atalho para facilitar:

Agora nós precisamos informar nossas zonas reversas no named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master.

Adicione ao final do arquivo:

Reinicie o serviço e verifique se o mesmo subiu sem erros.

Checando se nosso IP reverso está resolvendo os nomes setados, com o comando dig -x IP @localhost +short

Como criamos nomes aos 1024 hosts/IPs (x-x-x-x.remontti.net.br) será necessário apontar cada nome desses no arquivo de autoritativo do domínio remontti.net.br para cada nome um IP. Para isso vamos voltar as configurações do domínio autoritativo que já configurado. Lembre-se de alterar o serial!

Host 45-80-50-0.remontti.net.br. not found: 3(NXDOMAIN)
Só para relembrar: NXDOMAIN: Significa que o domínio pesquisado não existe.

Para resolver isso então vamos criar todos nosso nomes.
vamos adicionar ao final do arquivo /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts

Ficando:

Autoritativo ajustado, reinicie o serviço e verifique se o mesmo subiu sem erros.

Agora ao consultar nosso nomes temos uma resposta dizendo qual nosso endereço ip

Para o servidor Slave

Crie o diretório onde irão ficar os arquivos e dê permissão

Em seguiga crie as zonas no arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do DNS Master para que o servidor slave faça a transferência.

Adicione ao final:

Crio o atalho, reinico o serviço e verifico se o mesmo subiu sem erros, em seguida olho se os arquivos foram criando nas pasta.

Validando seu reverso no registro.br https://registro.br/tecnologia/ferramentas/verificacao-de-dns/
Vamos verificar pelos domínos .arpa

RESULTADOS

Se tudo estiver certo você terá Autoridade sobre o domínio, repita o mesmo no seu para o IP do servidor Slave.

Seu reverso está pronto para ser configurado no registro.br, acesse sua conta clique em NUMERAÇÃO em seguira sobre seu prefixo exemplo 45.80.48.0/22, clique no “quadro azul” e clique em Configurar DNS, preencha o formulário Delegação DNS – 45.80.48.0/22 informado o Servidor 1: ns1.remontti.net.br e Servidor 2: ns2.remontti.net.br. Lembrando que o DNS do autoritativo “remontti.net.br” deve estar com os subdominios ns1 e ns2 apontando para o IP do seu servidor DNS, e o mesmo já deve ter propagado, se você tem acabou de alterar os DNS do remontti.net.br aguarde um tempo (até 24h) para fazer a configuração do reverso.

Dúvida frequente:
Posso ter reversos de diferentes blocos usando o mesmo domínio autoritativo?
Sim, como também pode para outros domínios, inclusive mesclados.

– É possível configurar o DNSSEC para os reversos? Sim basta seguir o mesmo padrão que usamos no exemplo com nosso propío domínio, lembrado que “não existe reverso” tudo é um dominio autoritativo que já existe chamado de xxxxxxxx.in-addr.arpa e xxxxxxx.ip6.arpa, para configurar no registro br é muito simples, basta você realizar a configuração do DNSSEC em cima de cada /24 seu e ir no painel do registro e clicar em DNSSEC e salvar, ele ira identificar sua configuração.

Um ótimo site para verificar seu DNSSEC é o https://dnsviz.net/

Como configurar o reverso para prefixos menores que /24

Vamos supor que você dono de um /22 e vai repassar um prefixo /28 para um provedor sem AS ou uma empresa que é seu cliente, e o mesmo deseja ter seu reverso respondendo em seus servidores DNS (RFC2317).

Primeiramente faça a delegação no registro.br do /28 para o CNPJ/Domínios do de seu cliente, acesse sua conta clique em NUMERAÇÃO em seguira sobre seu prefixo exemplo 45.80.48.0/22, clique no “quadro azul” e clique em Expandir até chegar no prefixo /28, clieque sobre o quadro do prefixo desejado e em seguida em Configurar designação e preecha o formulário com o CNPJ/Domínios do seu cliente, se o mesmo não possuir solicite que faça seu cadastro.

Se ficar em dúvidas recomendo que assista: https://www.youtube.com/watch?v=VIa1dHtmQ4U DNS Reverso (~20min fala sobre isso)
No exemplo vamos supor que o bloco seja o 45.80.49.64/28, como o mesmo fica no arquivo 45.80.49.rev vamos edita-lo.

Iremos quebrar nosso GENERETE para pular os IPs finais 64 a 79, e vamos apontar ele para os DNS do cliente, logo é claro que ele precisa ter um domínio já configurado, e nesse DNS ele apontar exemplo ns1 e ns2 para o IP do servidor que ele estará fazendo a configuração. Explico já já como faz o lado dele.

Reinicie o serviço e verifique o mesmo

Lado do “provedor do Jose”

Como estamos falando de um outro provedor, é quase certo que ele fará seu DNS: Recursivo, autoritativo e reverso. Então faça a instalação do bind e todos os procedimentos das configurações de recursivo e autoritativo sobre o domínio “provedordojose.com.br”, porém a configuração do reverso irá mudar um pouco, ficando:

Autoritativo

Reverso

Reinicie o serviço

Situação de reverso para cliente final sem ele ter servidor de DNS

Meu cliente quer que eu aponto os nomes dos IPs reverso para o seu domínio, posso?
Sim, pode! Em muitos casos de clientes corporativos que tem seu próprio servidor de e-mail é possível que o mesmo peça para fazer isso. Ex:

Reinicie os serviços

Mais um pouco de DNS!

Posso configurar DNS reverso de IPs privados?
Sim pode, ajustes no named.conf.default-zones e zones.rfc1918
Remova as linhas dos IPs privados que deseja configurar.

Posso configurar DNS reverso de outro AS?
Sim. Basta configurar! (Conheço provedores pequenos que ambos tem 1 servidor DNS cada e um é o backup do outro)

Estatísticas do DNS

Estatística web/http (statistics-channels)
Para ativar edite o /etc/bind/named.conf

Adicione antes dos include, sendo que 45.80.48.2 é o IP público do DNS e 45.80.48.100 e 45.80.48.101 (Só aceita /32) são os IPs que poderão acessar no navegaro a porta 58053 para visualizar as informações. Porém perceba que também deixou um inet só para o IP de loopback (127.0.0.1 ) a ideiá aqui é que só o zabbix-agente acesse, eu particularmente não deixou o outro inet sendo ouvido, se deseja comente ele com //

Para surtir efeito reinicie o serviço

Agora acesse http://IP_DNS:58053/

Usaremos a seguir este método para coletar informações para o zabbix.

Outra forma é as estatística em arquivo (statistics-file), você pode definir um local especifico para gerar seu arquivo com as estatística, caso não especificado o mesmo é gerado em /var/cache/bind/named.stats

Adicione dentro de options { … }

Como sempre, em toda alteração reiniciamos o serviço

Porém para gere o arquivo de estatísticas é necessário o comando, e toda vez que deseja atualizar precisa executar o comando.

Exibe os dados do arquivo

Caso queira ver oque esta em cache pode usar o comando:

Ira gerar um arquivo named_dump.db em /var/cache/bind/

Criando Backup

Basta salvar os diretórios /etc/bind/* /var/cache/bind/* /usr/share/dns/* Gerar um arquivo de backup

Extrair arquivo de backup

Recomendo a leitura do tutorial: Criando backups de forma simples e enviando para o Telegram ou servidor via SSH

Coletando dados dos bind e fail2ban para Zabbix 6 LTS

Se você ainda não tem um zabbix server aqui tem um belo tutorial:
Instalação do Zabbix 6 LTS + NGINX + PostgreSQL + Debian 11
Instalação do Grafana no Debian 11 Bullseye

No nosso servidor DNS vamos precisar apenas do zabbix-agent, vamos adiciona o repositório do zabbix LTS para Debian 11 e em seguina intala-lo.

Em seguida vamos precisar informar o IP do zabbix server:

Localize e altere:

Reinicie o serviço do zabbix agent

Não esqueça de ajustar statistics-channels named.conf:

Vou usar o projeto Zabbix-Bind9-Statistics-Collection compartilhado no meu gituhub

Copie o userparameter_rr_bind.conf no diretório (/etc/zabbix/zabbix_agentd.d) de inclusão dos agentes do Zabbix.

Copie o script bind-stats-rr.py para dentro de /etc/zabbix/script/ e ajustaremos os poderes e permissões.

Você pode receber estatísticas por zona (que serão descobertas automaticamente) adicionando a seguinte cláusula a cada definição de zona no seu named.conf.local: zone-statistics yes; Ex.:

Não esqueça de restartar o serviço se editar o named.local.conf systemctl restart zabbix-agent

Baixe o arquivo RR Bind9.xml para seu computador e importe o mesmo para o seu Zabbix Server.
Vamos ter 3 novos templates:

Coletando dados das prisões do Fail2ban

Projeto zabbix-fail2ban-discovery

Faça o download do arquivo userparameter_fail2ban.conf para o diretório /etc/zabbix/zabbix_agentd.d/

O Fail2ban funciona apenas com root por padrão. Precisaremos conceder permissão ao Zabbix para acessar o Fail2ban. Não é uma boa ideia conceder permissão de root ao Zabbix em termos de segurança. Em vez disso, permitiremos que o usuário do Zabbix use esse soquete. O agente Zabbix é executado sob o usuário zabbix. Primeiro, precisamos criar um novo grupo chamado fail2ban. Todos os usuários pertencentes a este grupo poderão acessar o Fail2ban.

Criar um grupo:

Adicionar o usuário zabbix existente ao grupo fail2ban:

Em seguida, devemos alterar o proprietário do grupo do soquete de root para fail2ban:

Por fim, ajuste as permissões no soquete para que os membros do grupo possam acessá-lo:

Agora podemos testar que o agente Zabbix pode chamar Fail2ban:

As instruções de instalação abrangem a alteração das permissões do soquete fail2ban para acesso como um usuário não root; no entanto, essas alterações são perdidas na próxima vez que o soquete é criado.

Para tornar as alterações permanentes em um sistema em que o fail2ban é gerenciado pelo systemd, adicione o seguinte ao arquivo de substituição de serviço fail2ban

Adicione:

Reinicie os serviços

Consulte se o grupo é o fail2ban

Faça download do template RR Servico Fail2ban – Monitor Filtros e importe para o Zabbix Server.

Por hoje é “só” pessoal!
Espero ter colaborado com uma pequena parcela em seu conhecimento.
Esse tutorial levei dois dias escrevendo então conto com sua ajuda para poder manter o blog!

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Recomendado:
https://www.isc.org/download/
https://downloads.isc.org/isc/bind9/9.16.15/doc/arm/Bv9ARM.pdf
Extensão para navegador:
https://chrome.google.com/webstore/detail/ipvfoo/ecanpcehffngcegjmadlcijfolapggal
https://addons.mozilla.org/en-US/firefox/addon/ipvfoo-pmarks/

Ferramentas web:
https://dnschecker.org/
https://zonemaster.net/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

53 Resultados

  1. maycon disse:

    prefregex = ^%(__line_prefix)s(?: error:)?\s*client(?: @\S*)? #\S+(?: \([\S.]+\))?: .+\s(?:denied|\(NOTAUTH\)|\(allow-query-cache did not match\))\s*$

  2. pedro disse:

    Fiz os testes em ubuntu-server funcionou 100% porém estou com um unico problema.. dnssec , consigo gerar as chaves ao dar reboot ele gera os arquivos .signed, .jnl, .jbk ao validar o dnssec no site do registro.br ele mostra a keytag e o digest1 blz.. após logar no registro.br para adicionar a keytag e o digest1 no meus dns ele dá ! DS: TEMPO ESGOTADO em vermelho e não salva.. voltei de novo na ferramenta do dnssec do registro.br e ao digitar o meu dominio + IP servidor dns1 ele mostra a keytag e o digest normal, ao tentar digitar o dominio + IP dns2 servidor slave ele não mostra nada dá tempo esgotado também é normal?

    Verifiquei também que no seu tutorial ele mostra no keytag e digest eo algoritmo RSA-SHA-1-NSEC3 mas nos comandos para gerar as chaves no tutorial ele mostra
    1
    # dnssec-keygen -a ECDSAP256SHA256 remontti.net.br
    Generating key pair.
    Kremontti.net.br.+007+29298
    1
    2
    Generating key pair.
    Kremontti.net.br.+007+29298
    # dnssec-keygen -a ECDSAP256SHA256 -f KSK remontti.net.br
    1
    # dnssec-keygen -a ECDSAP256SHA256 -f KSK remontti.net.br

    Ao testar na ferramenta do registro.br ele mostra algoritmo ECDSA-SHA-256

    o restante o slave, está recebendo automático a zona dominio.com.br.signed porém ao gerar no dns servidor slave (d=meudominio.com.br; dig @127.0.0.1 +norecurse “$d”. DNSKEY | dnssec-dsfromkey -f – “$d” | head -1) ele mostra outro keytag e outro digest 1 totalmente diferente do que mostra no dns servidor master autoritativo.. será que estou efetuando algum passao errado? na ferramenta do registro br tanto master como slave dns mostra lá como autoridade sobre o dominio

  3. no fail2ban, aparece alguns ips v4 e v6, consigo visualizar no firewall as regras drop dos ipv4, mas não do ipv6, tem que habilitar o ipv6 no fil2ban?

  4. Fabio disse:

    Boa tarde, nomes no qual o ip está hospedado internamente não abrem. Teria algum ajuste a ser feito ?

  5. Opa, olha nóis aqui novamente pra agradecer o EXCELENTE tutorial disponibilizado.

    Há dois anos atrás a empresa onde atualmente trabalho tinha somente as poucas entradas que o registro.br disponibiliza na console web. Consegui instalar dois servidores na Cloud Oracle (OS: Ubuntu 22.04.2 LTS x86_64 – Memory: 203MiB / 964MiB) que são nossos servidores de DNS e a quantidade entradas de DNS que temos hoje facilitou e MUITO os acessos aos nossos serviços.

    Documentei TODO o procedimento interno que realizei numa Wiki interna com essa referência:
    * Melhor tutorial de todos os tempos: https://blog.remontti.com.br/3086 e https://blog.remontti.com.br/5958

    A título de curiosidade: Alteração efetuada no registro.br – 10/Mai/2022 às 18:50

  6. Montanaro Mendes disse:

    Olá Remontti, excelente tutorial!!!
    O DNS recursivo esta funcionando aqui perfeitamente!

    Só uma dúvida sobre o autoritativo. Localmente dentro da rede tenho ping no domínio sem nenhum problema, porém quando vou pra fora da rede, não consigo pingar. O que pode ser?

  7. Romário disse:

    bash: dnssec-keygen: comando não encontrado

    pra mim está dando erro.

  8. Eduardo disse:

    Artigo top demais, blog sempre me ajudando muito!
    Subi aqui só o servidor de DNS recursivo, estou com problemas que bancos em geral não abrem nos celulares. Pelo PC tudo normal, mas nos aplicativos só abre se ativar Ipv6 ou forçar um DNS externo.
    Alguma sugestão? Obrigado.

  9. Abdulio Waled disse:

    Olá, caso queiramos utilizar o DNS em um provedor, como faríamos para obter a guarda do log? Seria dentro desse servidor, teria algum software de para guarda de Log??? Como enquadrá-lo a LGPD???

  10. Dhefesson Santos disse:

    Conteúdo muito rico. Parabéns pela riqueza de detalhes.

  11. Gabriel disse:

    Estou com o DNS reverso funcionando, mas não esta propagando as informaçõs oque pode ser ?

  12. Walisson Gois disse:

    Boa tarde Rudimar, tudo bem ?

    Sobre a RFC 8482 que da uma enforcada nas queries com “ANY”. Tem alguma atualização do BIND pra essa implementação ?

  13. Fernando Hermann disse:

    No caso de querer um “view interna” a minhas redes,
    uma resposta do autoritativo apenas para alguns ranges de IP tem como ?
    Exemplo.
    Quero declarar meu sistema de tickets com um IP invalido, mas não desejo expor isto aos root servers

  14. ANTONIO EDILHO DE SOUSA disse:

    tudo isso feito em um server só? que top

  15. Ivo disse:

    O material desde blog possue uma extrema qualidade!

  16. Alisson disse:

    Mesmo após atualizar o arquivo DOMAIN.hosts, incrementar o serial e reiniciar o bind9, os registros inseridos não funcionam e o serial apresentado em testes com o comando dig são de um serial de dias passados. O que pode estar ocorrendo para que o servidor DNS não carregue o arquivo mais recente? PS: Ao realizar o teste com o named-checkzone, o serial é apresentado normalmente.

    • Fernando Novais disse:

      O meu também está assim. Quando consulto o RegistroBR também aparece o serial antigo. Você conseguiu resolver? SE sim, pode me ajudar? Obrigado!

    • Decio Vaz disse:

      Mesmo problema aqui, e isso fica claro nos logs:

      22-Aug-2022 18:34:38.157 zone linuxcloud.com.br/IN (unsigned): loaded serial 2022082201
      22-Aug-2022 18:34:38.157 zone linuxcloud.com.br/IN (signed): loaded serial 2022022501 (DNSSEC signed)

      eu até consegui alterar o serial com o comando abaixo, atualiza lá no Registro.BR, mas as entradas novas ainda não funcionam:

      rndc signing -serial 2022081201 linuxcloud.com.br

      Será que o jeito terá que “explodir” o diretório de chaves e recriar o DNSSEC ?

    • Decio Vaz disse:

      voces conseguiram alguma solucao para o mesmo ? estou com o mesmo problema.

  17. Alessandro Schneider disse:

    Conteúdo muito TOP!!
    Parabéns!!!

  18. Bruno Mendes dos Santos disse:

    Parabéns pelo tutorial
    Uma duvida, da forma que foi configurado neste tutorial , as zonas serão reassinadas automaticamente todos mês, ou tereis que reassinar manualmente a cada 30 dias ?

  19. Garcia disse:

    Com interesse de disponibilizar meus próprios servidores DNS encontrei múltiplos artigos e digo com convicção que esse foi o melhor artigo, cada etapa é explicada e isso é ótimo!

    Grato pelo conteúdo.

    • Garcia disse:

      Já possuo o servidor configurado perfeitamente, porém eu tenho uma dúvida, é necessário em toda alteração realizada dentro das zonas reiniciar o bind9? Pois mesmo aumentando o sequencial após alterar as alterações só são propagadas e lidas pelos desktops que configurei para usarem os servidores como resolvedores DNS depois de reiniciar o bind9, achei um pouco incoveniente esse fato

  20. Décio Vaz disse:

    Olá Rudimar, excelente artigo (e bem escrito didaticamente). Fiz a primeira versão dele e consegui sem problemas colocar meus NS autoritativos para rodar, sem problemas. Agora vou migrar de servidor cloud e fiquei com uma dúvida: será que funciona colocar os NS1 e o NS reverso (ns2) na mesma máquina, no mesmo serviço ? você já fez algo assim ? Obrigado.

      • Decio Vaz disse:

        Ola,

        Estou apanhando em dois momentos, segui o tutorial fielmente, mas…

        1) os arquivos do DNSSEC (.jbk .signed .signed.jnl) não são gerados de jeito nenhum, o serviço sobe certinho, as permissoes estao ok…

        2) como estou tentando configurar o Master e o Slave na mesma maquina (com 2 ips configurados, claro) quando adiciono a zone slave no /etc/named.conf.local ele reclama que a zona “dominio.com” já existe, se eu renomear a zona ela, claro, pra qualquer coisa ele passa, mas tambem os arquivos do master nao vao para o diretorio do slave. Ja tentei colocar outro arquivo como include senao o master.conf.local, mas nao vai… Onde estou errando ?

        Se puder me dar uma luz.

        Obrigado

        • 1) possivelmente permissão dos diretórios
          2) vc não precisa criar a zona slave, vc já fez a master

          • Decio Vaz disse:

            excelente! habilitei o debug level ao máximo e vi o erro. Tudo por causa de uma entrada em IPV6 incorreta…os arquivos foram criados, ja tenho autoridade sob o dominio e agora entendi o conceito de ter dois NS em uma maquina. Você somente do MASTER e o SLAVE é só se tiver que delegar para outra maquina secundária. (Eu achava que tinhamos que colocar os dois na mesma maquina). Te agradeço por sua prestatividade! Abraços!

  21. Francisco disse:

    Boa tarde Remonti.
    Com muita frequência eu tenho que fazer um restart no bind9. Quando eu analiso os logs não tem nada de errado. Fazendo um dig com trace ele resolve os nomes normalmente. Pra gente aqui é notório que sempre que tem um consumo de banda fora do nosso padrão que é uns 4 mb .. os clientes começam a reclamar etc .. dai reiniciou .. voltou ./… já passou por isso?

  22. Ed Gilson disse:

    no meu DNS, deu este erro alguem sabe o que pode ser:
    DNS format error from 192.33.4.12#53 resolving ./NS for : non-improving referral

  23. Opera Networks Solutions disse:

    Bom dia RR, obrigado pelos ensinamentos.
    Tem acontecido aqui comigo o seguinte:
    — Utilizo somente recursivo.
    — Root-server atualizado na última versão.
    — Quando faço um dig de dentro do servidor pra um domínio xyz resolve normalmente.

    Porém quando assinante utiliza o DNS recursivo ele tem problemas pra acessar.

    E só resolve quando no bind eu configuro pra ele encaminhar por exemplo para 8.8.8.8 ou 8.8.4.4

    Já pegou algum caso assim ?

  24. Hebio disse:

    Boa noite vc tem um curso para bgp com FrRouting para 2 operadora full route estou tentando montar um aqui fiz a parte do ospf deu certo mais o bgp nao achei muito exemplo que me ajudace.

  25. Nielson Padilha disse:

    Como fariamos para gerar dnssec para o /22 e /32 para cadastrar no registro.br ? Obrigado pelos tutoriais, são muito bons mesmo.

  26. Nielson Padilha disse:

    Fiquei na duvida do rev ipv6 na conf tem 2 faixas com inicio 2 e 3. Gerei o meu no site tenho que por inicio 2 e 3 também ?

    2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. PTR ns1.remontti.net.br.
    3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.e.f.a.c.e.b.e.b.3.2.1.f.4.0.8.2.ip6.arpa. PTR ns2.remontti.net.br.
    No site rDNS coloquei o IP finalizando com :: sem /32

  27. Quando terá curso de DNS novamente?

  28. Fabbyo disse:

    Referência pra comunidade, sempre trazendo artigos excelentes com uma boa didática aos menos entendidos mas sem ser superficial as explicações, parabéns Remontti! Contribuição garantida!!! Gostaria de saber como adicionar um IP como exceção no firewall do DNS, pois o mesmo esta bloqueando até o IP do zabbix para as coletas!

  29. Arthur Bernardes disse:

    Excelente artigo, Remontti. Muito obrigado por mais uma maravilhosa contribuição.

  1. 9 de novembro de 2021

    […] teste.remontti.com.br, logo é necessário configurar seu subdomínio “teste” em seu DNS Server, NÃO USE subdomínio chamado speedtest pois você terá possivelmente seu pedido negado. Exemplo […]

  2. 25 de março de 2022

    […] 11 (Bullseye) 64 bits instalação mínima pronta Configurado em seu DNS autoritativo um subdomínio exemplo “meet.remontti.com.br” apontado para o IPv4/6 do seu […]

  3. 28 de abril de 2022

    […] Não irei ensinar instalar o bind até porque já tem tutorial explicando aqui no blog. […]

  4. 22 de janeiro de 2024

    […] Não abordarei a instalação do BIND neste momento, pois já disponibilizamos um tutorial completo em nosso blog, que pode ser acessado através do seguinte link: Servidor DNS Bind9 (Debian 12). […]

  5. 6 de fevereiro de 2024

    […] Para que possamos encaminhar os acessos iremos necessitar configurar um subdomínios para cada situação em nosso servidor DNS autoritativo. […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *