Instalação do Bind9 (Master/Slave)
Instalação dos pacotes
| # apt install bind9 dnsutils |
Arquitetura de arquivos e diretórios do bind9 no Debian 11:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /etc/bind/ ├── bind.keys ├── db.0 ├── db.127 ├── db.255 ├── db.empty ├── db.local ├── named.conf ├── named.conf.default-zones ├── named.conf.local ├── named.conf.options ├── rndc.key └── zones.rfc1918 /usr/share/dns/ ├── root.ds ├── root.hints ├── root.hints.sig └── root.key /var/cache/bind/ ├── managed-keys.bind └── managed-keys.bind.jnl |
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.
| # echo "nameserver 127.0.0.1" > /etc/resolv.conf # echo "nameserver ::1" >> /etc/resolv.conf |
Para validar se seu servidor conseguer resolver nomes nele próprio, use o comando dig e host. Alguns comandos de Ex:
| # dig @localhost google.com.br # dig @127.0.0.1 google.com.br # dig @::1 google.com.br +short # host google.com.br |
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:
| # dig @localhost google.com.br +trace |
Observe as linhas em destaque.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ; <<>> DiG 9.16.15-Debian <<>> @localhost google.com.br +trace ; (2 servers found) ;; global options: +cmd . 517911 IN NS b.root-servers.net. . 517911 IN NS c.root-servers.net. . 517911 IN NS m.root-servers.net. . 517911 IN NS a.root-servers.net. . 517911 IN NS l.root-servers.net. . 517911 IN NS k.root-servers.net. . 517911 IN NS e.root-servers.net. . 517911 IN NS i.root-servers.net. . 517911 IN NS d.root-servers.net. . 517911 IN NS f.root-servers.net. . 517911 IN NS g.root-servers.net. . 517911 IN NS h.root-servers.net. . 517911 IN NS j.root-servers.net. . 517911 IN RRSIG NS 8 0 518400 20211107... ;; Received 1137 bytes from ::1#53(localhost) in 0 ms br. 172800 IN NS f.dns.br. br. 172800 IN NS e.dns.br. br. 172800 IN NS b.dns.br. br. 172800 IN NS c.dns.br. br. 172800 IN NS d.dns.br. br. 172800 IN NS a.dns.br. br. 86400 IN DS 2471 13 2 5E4F35... br. 86400 IN RRSIG DS 8 1 86400 202... ;; Received 741 bytes from 198.41.0.4#53(a.root-servers.net) in 140 ms google.com.br. 3600 IN NS ns1.google.com. google.com.br. 3600 IN NS ns2.google.com. google.com.br. 3600 IN NS ns3.google.com. google.com.br. 3600 IN NS ns4.google.com. uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7... uh3thc9qu1qbt25pspmqnbuvm420ur2e.com.br. 900 IN RRSIG NSEC3 13 3 900 202... hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN NSEC3 1 1 10 A8A465B84D7... hekajlrgmga91msd4es7bmhol7dbtbbi.com.br. 900 IN RRSIG NSEC3 13 3 900 202... ;; Received 507 bytes from 2001:12f8:a::10#53(c.dns.br) in 140 ms google.com.br. 300 IN A 142.250.219.195 ;; Received 58 bytes from 2001:4860:4802:38::a#53(ns4.google.com) in 144 ms |
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:
| # vim /etc/bind/named.conf.options |
A explicação de todos os campos e variáveis estão nos comentários do arquivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | // 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; 2001:db8::/32; fd00::/8; fe80::/10; fc00::/8; 45.80.48.0/22; 2804:f123::/32; }; 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 }; |
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
| # named-checkconf /etc/bind/named.conf.options |
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.
| # systemctl restart bind9 # systemctl status bind9 |
Configurando Recursivo (Slave)
Não esqueça da parte do fail2ban e nftables.
| # vim /etc/bind/named.conf.options |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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; 2001:db8::/32; fd00::/8; fe80::/10; fc00::/8; 45.80.48.0/22; 2804:f123::/32; }; options { directory "/var/cache/bind"; dnssec-validation auto; auth-nxdomain no; listen-on { any; }; listen-on-v6 { any; }; minimal-responses yes; max-ncache-ttl 300; allow-recursion { autorizados; }; allow-query-cache { autorizados; }; //allow-query { autorizados; }; //Se apenas for recursivo allow-query { any; }; allow-transfer { none; }; masterfile-format text; version "RR DNS Server"; }; |
Reinicie o bind9 para que as novas configurações sejam lidas, e verifique se o serviço subiu sem erros.
| # systemctl restart bind9 # systemctl status bind9 |
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 Master e Slave.
| # vim /etc/bind/named.conf |
Adicione logging { … }:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local 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"; |
Crie o diretório onde o bind vai registrar seus logs e dê permissão para que ele possa gravar nesta pasta.
| # mkdir /var/log/named/ # chown bind. /var/log/named/ |
Reinicie o serviço
| # systemctl restart bind9 |
Iremos criar um filtro para ler os logs do bind
| # vim /etc/fail2ban/filter.d/bind9.conf |
Adicione:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Fail2Ban filter file for named (bind9 v9.16.x). # [Definition] # Daemon name _daemon=named # Shortcuts for easier comprehension of the failregex __pid_re=(?:\[\d+\]) __daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:? __daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)s?:) # hostname daemon_id spaces # this can be optional (for instance if we match named native log files) __line_prefix=(?:\s\S+ %(__daemon_combs_re)s\s+)? prefregex = ^%(__line_prefix)s(?: error:)?\s*client(?: @\S*)? <HOST>#\S+(?: \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>\s(?:denied|\(NOTAUTH\))\s*$ failregex = ^(?:view (?:internal|external): )?query(?: \(cache\))? ^zone transfer ^bad zone transfer request: '\S+/IN': non-authoritative zone ignoreregex = # DEV Notes: # Author: Rudimar Remontti |
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.
| # vim /etc/fail2ban/jail.d/bind9.conf |
| [bind9] enabled = true port = domain,953 protocol = tcp logpath = /var/log/named/security.log bantime = 12h maxretry = 1 |
Em seguida ativamos reinciamos os serviços.
| # systemctl restart fail2ban # systemctl status fail2ban |
Consulte se o filtro bind9 foi carregado
| Status |- Number of jail: 2 `- Jail list: bind9, sshd |
Para validar realize um teste de um servidor externo não autorizado à resolver nomes em seu servidor com o comando dig, ex:
| # dig @ip_so_seu_dns google.com.br |
Deixe rodando o comando para visualizar os logs.
| # tail -f /var/log/named/security.log |
Log como ira aparecer, onde 192.168.254.198 é o IP que tentou resolver nomes e google.com.br foi o dóminio.
| 25-Oct-2021 17:57:09.284 client @0x7f79e80104c8 192.168.254.198#63239 (google.com.br): query (cache) 'google.com.br/A/IN' denied |
Verificando agora o fail2ban vamos encontrar o IP 192.168.254.198 em Banned IP list.
| # fail2ban-client status bind9 |
| Status for the jail: bind9 |- Filter | |- Currently failed: 0 | |- Total failed: 1 | `- File list: /var/log/named/security.log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.254.198 |
Verificando as regras do firewall nftables também iremos encontra-lo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | table inet filter { chain input { type filter hook input priority filter; policy accept; } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; } } table inet f2b-table { set addr-set-bind9 { type ipv4_addr elements = { 192.168.254.198 } } chain f2b-chain { type filter hook input priority filter - 1; policy accept; ip saddr @addr-set-bind9 drop } } |
Para remover o IP basta:
| # fail2ban-client set bind9 unbanip 192.168.254.198 |
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
| # mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d` |
Agora vamos baixar a versão mais recente.
| # apt install wget # wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints |
Para visualizar se tem alguma diferença entre os arquivos execute o comando:
| # diff /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d` |
Perceba que o que mudou apenas foi a data em last update. Resto do arquivo continua igual.
| 11,13c11,13 < ; < ; last update: October 14, 2021 < ; related version of root zone: 2021101401 --- > ; > ; last update: January 11, 2021 > ; related version of root zone: 2021011101 |
Desativar IPv6 do bind
Se por algum motivo precisar desabilitar faça:
Para
| # vim /etc/bind/named.conf.options |
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.
| # vim /etc/bind/named.conf.options |
Adicione dentro de options { ….. }
| recursion yes; forwarders { 8.8.8.8; 1.1.1.1; 1.0.0.1; 8.8.4.4; }; forward only; |
Comando dig
Algumas coisas que você precisa saber, ex:
| # dig google.com.br @localhost |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ; <<>> DiG 9.16.15-Debian <<>> google.com.br @localhost ; <<>> DiG 9.16.15-Debian <<>> google.com.br @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49083 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 595c2c7eb1d62205010000006177f1e2e08119b0ec4133aa (good) ;; QUESTION SECTION: ;google.com.br. IN A ;; ANSWER SECTION: google.com.br. 300 IN A 172.217.173.67 ;; AUTHORITY SECTION: google.com.br. 3599 IN NS ns1.google.com. google.com.br. 3599 IN NS ns4.google.com. google.com.br. 3599 IN NS ns3.google.com. google.com.br. 3599 IN NS ns2.google.com. ;; ADDITIONAL SECTION: ns1.google.com. 172800 IN AAAA 2001:4860:4802:32::a ns2.google.com. 172800 IN AAAA 2001:4860:4802:34::a ns3.google.com. 172800 IN AAAA 2001:4860:4802:36::a ns4.google.com. 172800 IN AAAA 2001:4860:4802:38::a ns1.google.com. 172800 IN A 216.239.32.10 ns2.google.com. 172800 IN A 216.239.34.10 ns3.google.com. 172800 IN A 216.239.36.10 ns4.google.com. 172800 IN A 216.239.38.10 ;; Query time: 1560 msec ;; SERVER: ::1#53(::1) ;; WHEN: ter out 26 09:17:38 -03 2021 ;; MSG SIZE rcvd: 344 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ; <<>> DiG 9.16.15-Debian <<>> google.com.br @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13858 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 38763b6c79757a2a010000006177f255c6a6a6d3e4833e77 (good) ;; QUESTION SECTION: ;google.com.br. IN A ;; ANSWER SECTION: google.com.br. 300 IN A 172.217.173.67 ;; Query time: 1524 msec ;; SERVER: ::1#53(::1) ;; WHEN: ter out 26 09:19:33 -03 2021 ;; MSG SIZE rcvd: 86 |
HEADER: Ela contém diversas informações a respeito da consulta.
| ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49083 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9 |
– 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.
| QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9 |
QUESTION
Replica a query que foi enviada para consulta, por padão quando não passa A = IPv4
| ;; QUESTION SECTION: ;google.com.br. IN A |
Outros exemplos:
| # dig AAAA google.com.br @localhost # dig MX google.com.br @localhost # dig NS google.com.br @localhost # dig TXT google.com.br @localhost # dig ANY google.com.br @localhost |
ANSWER
Contém a resposta para a consulta que foi enviada.
| ;; ANSWER SECTION: google.com.br. 86400 IN CAA 0 issue "pki.goog" google.com.br. 60 IN SOA ns1.google.com. dns-admin.google.com. 405356128 900 900 1800 60 google.com.br. 300 IN AAAA 2800:3f0:4001:819::2003 google.com.br. 300 IN A 172.217.173.67 google.com.br. 300 IN MX 0 smtp.google.com. google.com.br. 300 IN TXT "v=spf1 -all" google.com.br. 2774 IN NS ns4.google.com. google.com.br. 2774 IN NS ns2.google.com. google.com.br. 2774 IN NS ns1.google.com. google.com.br. 2774 IN NS ns3.google.com. |
AUTHORITY
Servidores que respondem com “autoridade” pelo domínio (os NS)
| ;; AUTHORITY SECTION: google.com.br. 3599 IN NS ns1.google.com. google.com.br. 3599 IN NS ns4.google.com. google.com.br. 3599 IN NS ns3.google.com. google.com.br. 3599 IN NS ns2.google.com. |
ADDITIONAL
Informações auxiliares ou adicionais à pesquisa, no exemplo IPs dos servidores DNS
| ;; ADDITIONAL SECTION: ns1.google.com. 172800 IN AAAA 2001:4860:4802:32::a ns2.google.com. 172800 IN AAAA 2001:4860:4802:34::a ns3.google.com. 172800 IN AAAA 2001:4860:4802:36::a ns4.google.com. 172800 IN AAAA 2001:4860:4802:38::a ns1.google.com. 172800 IN A 216.239.32.10 ns2.google.com. 172800 IN A 216.239.34.10 ns3.google.com. 172800 IN A 216.239.36.10 ns4.google.com. 172800 IN A 216.239.38.10 |
E na ultima sessão entrosamos podemos dizer mais 4 sub sessões:
| ;; Query time: 1560 msec ;; SERVER: ::1#53(::1) ;; WHEN: ter out 26 09:17:38 -03 2021 ;; MSG SIZE rcvd: 344 |
– 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #!/usr/sbin/nft -f flush ruleset table inet filter { set acesso-total4 { type ipv4_addr flags interval elements = { 200.200.200.0/26, 200.200.200.128/29 } } set acesso-total6 { type ipv6_addr flags interval elements = { 2001:db8:f0da::/48 } } set acesso-dns4 { flags interval type ipv4_addr elements = { 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 200.200.200.0/22 } } set acesso-dns6 { flags interval type ipv6_addr elements = { ::1, 2001:db8::/32 } } chain input { type filter hook input priority 0; #ip saddr @acesso-total4 accept #ip6 saddr @acesso-total6 accept # Permite acesso SSH na porta 22 (alterada para 60002), a 22 eu fecho só de sacanagem, para aparecer filtrada nos scanners ip saddr @acesso-total4 tcp dport 22 counter accept ip6 saddr @acesso-total6 tcp dport 22 counter accept ip saddr @acesso-total4 tcp dport 60002 counter accept ip6 saddr @acesso-total6 tcp dport 60002 counter accept tcp dport 22 counter drop tcp dport 60002 counter drop # Permite coleta de dados pelo Zabbix-Agent na porta 10050 ip saddr @acesso-total4 tcp dport 10050 counter accept ip6 saddr @acesso-total6 tcp dport 10050 counter accept tcp dport 10050 counter drop # Permite Acesso DNS na porta 53 ip saddr @acesso-dns4 udp dport 53 counter accept ip saddr @acesso-dns4 tcp dport 53 counter accept ip6 saddr @acesso-dns6 udp dport 53 counter accept ip6 saddr @acesso-dns6 tcp dport 53 counter accept udp dport 53 counter drop tcp dport 53 counter drop type filter hook input priority 0; } chain forward { type filter hook forward priority 0; } chain output { type filter hook output priority 0; } } |
Reinicie os serviços
| # systemctl restart nftables fail2ban |