DNS Recursivo

De Gigafull
Revisão de 15h28min de 2 de março de 2023 por Admin (discussão | contribs)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Requisitos
SO: Ubuntu Server 22.04.2 LTS
Memória: 4Gb
Disco: 40Gb
CPU: 2vCPU

Firewall Entrada
TCP 22 - Confiáveis
TCP/UDP 53 - Somente hosts clientes de consultas (Se tiver DNS Autoritativo ou Reverso junto, estas portas devem estar aberta externamente)

Pacotes Essenciais

apt-get install net-tools -y
apt-get install vim -y
apt-get install nmap -y
apt-get install cockpit -y

Instalação bind9

apt-get install bind9 dnsutils -y

Configurar consultas localmente

echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver ::1" >> /etc/resolv.conf

Testes de funcionamento

dig @localhost google.com.br 
dig @127.0.0.1 google.com.br 
dig @::1 google.com.br +short
host google.com.br

Localizando erros de consulta

dig @localhost google.com.br +trace

Configurando Recursivo (Master)

vim /etc/bind/named.conf.options
// ACL "autorizados" essa colocamos os IPs que são autorizados a fazer consultas recursivas neste servidor.
// Neste caso vou incluir os IPs que foram nos delegados bem como de localhost e todos IPs privados.
acl autorizados {
       127.0.0.1;
       ::1;
       192.168.0.0/16;
       172.16.0.0/12;
       100.64.0.0/10;
       10.0.0.0/8;
       45.80.48.0/22;
       2804:f123::/32;
       df00::/8;
       2001:db8::/32;
       fe80::/64;
       
}; 

options {
   // O diretório de trabalho do servidor
   // Quaisquer caminho não informado será tomado como padrão este diretório
   directory "/var/cache/bind";

   //Suporte a DNSSEC
   dnssec-validation auto;

   // Conforme RFC1035
   // https://www.ietf.org/rfc/rfc1035.txt
   // Se o servidor deve responder negativamente (NXDOMAIN) para consultas de domínios que não existem.
   auth-nxdomain no;

   // Respondendo para IPv4 e IPv6
   // Porta 53 estará aberta para ambos v4 e v6 (pode ser informar apenas os IPs que ficarão ouvindo)
   // ex listen-on { 127.0.0.1; 45.80.48.2; }; 
   // ex listen-on-v6 { ::1; 2804:f123:bebe:cafe::2; };
   // ou any para todos os IPs das interfaces (recomendado, pricipalmente em anycast)
   listen-on { any; };
   listen-on-v6 { any; };

   // Serve como uma ferramenta de mitigação para o problema de ataques de amplificação de DNS
   // No momento, a implementação de RRL (Response Rate Limiting)é recomendada apenas para servidores autoritativos
   // Se seu servidor será apenas autoritativo descomente as linhas a baixo. (https://kb.isc.org/docs/aa-00994)
   //rate-limit {
   //    responses-per-second 15;
   //    window 5;
   //};

   // Informações adicionais em suas respostas DNS
   // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
   // O padrão BIND é (no) não.
   minimal-responses yes;

   // Reduzir o tráfego da rede e aumentar o desempenho, o servidor armazena respostas negativas.
   // é usado para definir um tempo máximo de retenção para essas respostas no servidor. (segundos)
   // Determina por quanto tempo o servidor irá acreditar nas informações armazenadas em cache de 
   // respostas negativas (NXDOMAIN) antes de buscar novamente informações.
   max-ncache-ttl 300;

   // Desativar recursão. Por padrão já é yes.
   // recursion no;

   // Especifica quais hosts estão autorizados a fazer consultas
   // recursivas através deste servidor.
   // Aqui que você vai informar os IPs da sua rede que você irá permitir consultar os DNS.
   allow-recursion { autorizados; };

   // Endereço estão autorizados a emitir consultas ao cache local,
   // sem acesso ao cache local as consultas recursivas são inúteis.
   allow-query-cache { autorizados; };

   // Especifica quais hosts estão autorizados a “fazer perguntas” ao seu DNS. 
   // Se for apenas recursivo pode informa a ACL “autorizados” 
   // allow-query { autorizados; };
   allow-query { any; };

   // Especifica quais hosts estão autorizados a receber transferências de zona a partir do servidor.
   // Seu servidor Secundário, no nosso ex vou deixar então o ips dos dois servidores v4 e v6.
   allow-transfer {
       45.80.48.3;
       2804:f123:bebe:cafe::3;
   };
   also-notify {
       45.80.48.3;
       2804:f123:bebe:cafe::3;
   };

   // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
   // mastes deste servidor no formato binário (raw) do arquivo ou texto (text)
   // text será legível por humanos, já raw formato é mais eficiente em termos de desempenho.
   // masterfile-format raw;
   masterfile-format text;

   // Para evitar que vase a versao do Bind, definimos um nome
   // Reza a lenda que deixar RR DNS Server seu servidor nunca sofrerá ataques.
   version "RR DNS Server – Do good";

   // Define a quant. máxima de memória a ser usada para o cache do servidor (bytes ou porcentagem)
   // Por padrão no debian 10/bind9 ele reserva 90% da memoria física. Então não se apavore com log ex.:
   // Servidor com 2GB: none:106: 'max-cache-size 90%' - setting to 1795MB (out of 1994MB)
   // Recomendo não alterar
   // max-cache-size 512M;
   // max-cache-size 50%;

   // Isso define o tempo mínimo para o qual o servidor armazena 
   // em cache as respostas positivas, em segundos.
   // Ex o tiktok.com manda tempo de ttl de 20 segundos, 
   // e você quer ignorar esse valor 20 e setar que o minimo seja 90.
   // que é o máximo permitido.
   min-cache-ttl 90;

   // Não recomendado alterar para menos que 24h.
   // Define o tempo máximo durante o qual o servidor armazena (informado pelo dono do domínio)
   // em cache as respostas positivas, em segundos. O max-cache-ttl padrão é 604800 (uma semana) 
   // max-cache-ttl 86400; // 24h 

};

Configurando LOGs

vim /etc/bind/named.conf
 logging {

   channel security_file {
       file "/var/log/named/security.log" versions 3 size 30m;
       severity dynamic;
       print-time yes;
   };

   channel file_log {
       file "/var/log/named/bind.log" versions 3 size 1m;
       severity info;
       #severity debug 3;
       print-time yes;
       print-severity yes;
       print-category yes;
   };

   channel dnssec_log {
       file "/var/log/named/dnssec.log" versions 3 size 1m;
       severity warning;
       print-time yes;
   };

   category security { security_file; };
   category default { file_log; };
   category dnssec { dnssec_log; };
   category lame-servers { null; };
   category edns-disabled { null; };
   category resolver { null; };
   category unmatched { null; };

};

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Criar diretório onde ira ficar os LOGs

mkdir /var/log/named/
chown bind. /var/log/named/

Checando as configurações do arquivo

named-checkconf /etc/bind/named.conf.options

Mostra todas configurações

named-checkconf -p

Reiniciar o bind9

systemctl restart bind9
systemctl status bind9
systemctl enable named