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!
# su -
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:
# apt install rsyslog
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.
# apt install fail2ban
Entendo o funcionamento do fail2ban:
# fail2ban-client status
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.
Status |- Number of jail: 1 `- Jail list: sshd
Para alterar esses padrões de tempo e número de tentativas edite: (este arquivo é muito bem comentado o que cada variável faz!)
# vim /etc/fail2ban/jail.conf
Localize as linhas, e ajuste de acordo com suas necessidades
bantime = 10m findtime = 10m maxretry = 5
Se desejar desativar o filtro de SSH
# vim /etc/fail2ban/jail.d/defaults-debian.conf
Altere para false
[sshd] enabled = 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.
# vim /etc/ssh/sshd_config
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!)
Port 60002 LoginGraceTime 10 #PermitRootLogin prohibit-password # Nao seja burro de colocar um yes aqui!
Com a porta alterada do SSH (como no exemplo 60002) vamos ajusta no fail2ban para proteger essa nova porta
# vim /etc/fail2ban/jail.conf
Localize e adicione 60002:
[sshd] Port = ssh,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:
# vim /etc/fail2ban/jail.conf
Localize banaction e banaction_allports e altere para nftables-allports:
banaction = nftables-allports banaction_allports = nftables-allports
Para bloquear tudo e não apenas a porta do serviço atacada:
# vim /etc/fail2ban/action.d/nftables.conf
Localize rule_match-allports e remova o meta l4proto \{
rule_match-allports =
Ainda no altere o blocktype de reject para drop
blocktype = drop
Habilite o nftblaes para o boot do sistema, em seguida reinicie os serviços
# systemctl enable nftables # systemctl restart nftables fail2ban
Verifique se mesmo estão rodando sem nenhum erro:
# systemctl status nftables fail2ban
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).
# vim /etc/fail2ban/jail.conf
Localize banaction e banaction_allports e altere para route:
banaction = route banaction_allports = route
Vamos ajustar agora para ação ser blackhole
# vim /etc/fail2ban/action.d/route.conf
Em blocktype altere para blackhole
blocktype = blackhole
# systemctl restart fail2ban
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:
# nft list ruleset
Ou se usou route para mostra a tabela de rotas:
# ip route list # ip -6 route list
Alguns comandos úteis do fail2ban
Visulizar os filtros
# fail2ban-client status
Visualizar detalhe de um filtro
# fail2ban-client status NOME_FILTRO # fail2ban-client status sshd
Remover um IP de um determinado filtro
# fail2ban-client set sshd unbanip IPADDRESS # fail2ban-client set sshd unbanip 200.200.200.200
Exemplo de script para remover todos os IPs banidos uma a um.
#!/bin/bash BANIDOS=`fail2ban-client status bind9 | grep "Banned IP list" | awk '{$1=$2=$3=$4=$5=""; print $0}'` IPS=$(echo $BANIDOS | tr " " "\n") for IP in $IPS do #echo "Removendo: ${IP}" fail2ban-client set bind9 unbanip ${IP} ; #ip route del ${IP} done
Se desejar adicionar algum prefixo a uma lista branca você pode editar:
# vim /etc/fail2ban/jail.conf
Localize ignoreip, desomente a linha (remova o # da frete) e adicione os prefixo que deseja ignorar, para não cair bloqueio.
ignoreip = 127.0.0.1/8 ::1 200.200.200.0/22 2000:2000::/32
Reinicie o serviço
# systemctl restart fail2ban
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:
/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.
; <<>> 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:
// 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
# named-checkconf -p
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
# 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.
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 Mastere Slave.
# vim /etc/bind/named.conf
Adicione logging { … }:
// 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:
# Fail2Ban filter file for named (bind9). # v9.18.x # This filter blocks attacks against named (bind9) however it requires special # configuration on bind. # # By default, logging is off with bind9 installation. # # You will need something like this in your named.conf to provide proper logging. # # logging { # channel security_file { # file "/var/log/named/security.log" versions 3 size 30m; # severity dynamic; # print-time yes; # }; # category security { # security_file; # }; # }; [Definition] # Daemon name _daemon=named(?:-\w+)? # 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?:) _category = (?!error|info)[\w-]+ _category_re = (?:%(_category)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+)?%(_category_re)s prefregex = ^%(__line_prefix)s(?:(?:error|info):\s*)?client(?: @\S*)? <HOST>#\S+(?: \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>\s(?:denied|denied \(allow-query-cache did not match\)|\(NOTAUTH\))\s*$ failregex = ^(?:view (?:internal|external): )?query(?: \(cache\))? ^zone transfer ^bad zone transfer request: '\S+/IN': non-authoritative zone ignoreregex = # DEV Notes: Debian 12 # 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
# fail2ban-client status
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.
# nft list ruleset
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:
# vim /etc/default/named
OPTIONS="-u bind"
Para
OPTIONS="-4 -u bind"
# vim /etc/bind/named.conf.options
listen-on-v6 { any; };
Para
listen-on-v6 { none; };
Reinicie o serviço
# systemctl restart bind
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
; <<>> 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.
; <<>> 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!
# vim /etc/nftables.conf
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
#!/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
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.
# mkdir /var/cache/bind/master-aut # mkdir /var/cache/bind/master-aut/remontti.net.br
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
# vim /var/cache/bind/master-aut/remontti.net.br/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.
$ORIGIN . $TTL 86400 ; 1 day remontti.net.br IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 $ORIGIN remontti.net.br. $TTL 10800 ; 3 hours ns1 A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 hostmaster A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 ns2 A 45.80.48.3 AAAA 2804:f123:bebe:cafe::3 www A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4
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.
# mkdir /var/cache/bind/master-aut/remontti.net.br/keys
Entre no diretório:
# cd /var/cache/bind/master-aut/remontti.net.br/keys
Agora vamos a criação das chaves:
# dnssec-keygen -a ECDSAP256SHA256 remontti.net.br
Generating key pair. Kremontti.net.br.+007+29298
# dnssec-keygen -a ECDSAP256SHA256 -f KSK remontti.net.br
Generating key pair. Kremontti.net.br.+007+26883
Os comandos acima irão gerar 4 arquivos com extensões .key e .private
├── Kremontti.net.br.+007+26883.key ├── Kremontti.net.br.+007+26883.private ├── Kremontti.net.br.+007+29298.key └── Kremontti.net.br.+007+29298.private
Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.
# chown bind: /var/cache/bind/master-aut/ -R
Em /etc/bind/named.conf.local "chamaremos" a zona remontti.net.br
# vim /etc/bind/named.conf.local
Adicione ao final do arquivo:
zone "remontti.net.br" { type master; file "/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts"; key-directory "/var/cache/bind/master-aut/remontti.net.br/keys/"; dnssec-policy default; inline-signing yes; serial-update-method unixtime; };
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. 😛
# ln -s /var/cache/bind/master-aut /etc/bind/master-aut
Reinicie o serviço.
# systemctl restart bind9
Certifique-se que o bind esta rodando sem erros
# systemctl status bind9
Novos arquivos são gerados em /var/cache/bind/master-aut/remontti.net.br/ .jbk .signed .signed.jnl
└── remontti.net.br ├── keys │ ├── Kremontti.net.br.+007+26883.key │ ├── Kremontti.net.br.+007+26883.private │ ├── Kremontti.net.br.+007+29298.key │ └── Kremontti.net.br.+007+29298.private ├── remontti.net.br.hosts ├── remontti.net.br.hosts.jbk ├── remontti.net.br.hosts.signed └── remontti.net.br.hosts.signed.jnl
Precisaremos descobri nossa keytag e o digest que serão informados no registro.br, para isso rode o comando:
# (d=remontti.net.br; dig @127.0.0.1 +norecurse "$d". DNSKEY | dnssec-dsfromkey -f - "$d" | head -1)
remontti.net.br. IN DS 26883 7 2 F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841
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:
# vim /etc/fail2ban/jail.conf
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
ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 200.219.148.0/24 2001:12f8:6::/47 2001:12ff::/32 45.80.48.0/22 2804:f123::/32
Reinicie o fail2ban
# systemctl restart 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
# mkdir /var/cache/bind/slave-aut # mkdir /var/cache/bind/slave-aut/remontti.net.br
Informamos nossa zona do tipo slave e o IP do nosso servidor master.
# vim /etc/bind/named.conf.local
zone "remontti.net.br" { type slave; file "/var/cache/bind/slave-aut/remontti.net.br/remontti.net.br.hosts.signed"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; };
Alteramos a permissão do diretório para que o bind consiga criar os arquivos.
# chown bind: /var/cache/bind/slave-aut -R
Mais uma vez farei uma atalho dentro de /etc/bind para facilitar.
# ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut
E reiniciamos o serviço
# systemctl restart bind9
Agora ao verificar o diretório /var/cache/bind/slave-aut/remontti.net.br/ encontraremos nosso arquivo criado automaticamente importado do servidor master.
# ls -lhs /var/cache/bind/slave-aut/remontti.net.br
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
DOMÍNIO : remontti.net.br DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102601 TEMPO DE RESPOSTA : 19.422 ms
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
KEY TAG ALGORITMO DIGEST DS 26883 RSA-SHA-1-NSEC3 F8C2518674B22DB06B1EF38E030F9A238E4FA25D0E2FB80357496E92617FF841
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:
# mkdir /var/cache/bind/master-aut/cursodns.com.br # vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts
Adicione:
$ORIGIN . $TTL 86400 ; 1 day cursodns.com.br IN SOA ns1.cursodns.com.br. hostmaster.cursodns.com.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.cursodns.com.br. NS ns2.cursodns.com.br. A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 MX 10 mail.cursodns.com.br. TXT "v=spf1 a mx -all" SPF "v=spf1 a mx -all" $ORIGIN cursodns.com.br. _dmarc TXT "v=DMARC1; p=none" _domainkey TXT "t=y; o=~;" $ORIGIN _domainkey.cursodns.com.br. mail TXT "v=DKIM1; k=rsa; p=6B4EDqoi5l64qyxnenKx56IOIjPAnj350mq" $ORIGIN cursodns.com.br. $TTL 10800 ; 3 hours ns1 A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 hostmaster A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 ns2 A 45.80.48.3 AAAA 2804:f123:bebe:cafe::3 www A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 ftp A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 imap A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 pop A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 smtp A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 mail A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4
Vamos criar um diretório para gerar nossas keys do DNSSEC.
# mkdir /var/cache/bind/master-aut/cursodns.com.br/keys
Entre no diretório:
# cd /var/cache/bind/master-aut/cursodns.com.br/keys
Agora vamos a criação das chaves:
# dnssec-keygen -a ECDSAP256SHA256 cursodns.com.br
Generating key pair. Kcursodns.com.br.+007+00558
# dnssec-keygen -a ECDSAP256SHA256 -f KSK cursodns.com.br
Generating key pair. Kcursodns.com.br.+007+46491
Altere as permissões de diretórios/arquivos para que o bind consiga criar as assinaturas de forma automaticamente.
# chown bind: /var/cache/bind/master-aut/ -R
Adicione a zona cursodns.com.br em named.conf.local
# vim /etc/bind/named.conf.local
Adicione ao final do arquivo:
zone "cursodns.com.br" { type master; file "/var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts"; key-directory "/var/cache/bind/master-aut/cursodns.com.br/keys/"; dnssec-policy default; inline-signing yes; serial-update-method unixtime; };
Se desejar validar seu arquivo antes de reiniciar o serviço:
# cd /var/cache/bind/master-aut/ # named-checkzone cursodns.com.br cursodns.com.br.hosts
Tudo ok, altere as permissões para não ter erro, e reinicie o bind:
# chown bind: /var/cache/bind/master-aut -R # systemctl restart bind9
Para o Slave
# mkdir /var/cache/bind/slave-aut/cursodns.com.br # vim /etc/bind/named.conf.local
zone "cursodns.com.br" { type slave; file "/var/cache/bind/slave-aut/cursodns.com.br/cursodns.com.br.hosts.signed"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; };
# chown bind: /var/cache/bind/slave-aut -R # systemctl restart bind9
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.
# vim /var/cache/bind/master-aut/cursodns.com.br/cursodns.com.br.hosts
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.
//... umbrella A 45.80.48.5 AAAA 2804:f123:bebe:cafe::5 //...
Adicione uma nova zona chamada rpz.zone
# vim /etc/bind/named.conf.local
zone "rpz.zone" { type master; file "/var/cache/bind/rpz/db.rpz.zone"; allow-query { none; }; };
# vim /etc/bind/named.conf.options
Dentro de options { ... } adcione:
options { //... response-policy { zone "rpz.zone" policy CNAME umbrella.cursodns.com.br; }; //...
};
Criaremos o diretório rpz, bem como o arquivos de hosts
# mkdir /var/cache/bind/rpz/ # ln -s /var/cache/bind/rpz/ /etc/bind/rpz # vim /var/cache/bind/rpz/db.rpz.zone
$TTL 1H @ IN SOA LOCALHOST. umbrella.cursodns.com.br. ( 2023020101 ; Serial 1h ; Refresh 15m ; Retry 30d ; Expire 2h ; Negative Cache TTL ) NS umbrella.cursodns.com.br. xvideos.com IN CNAME . *.xvideos IN CNAME . redtube.com IN CNAME . *.redtube.com IN CNAME . pornhub.com IN CNAME . *.pornhub.com IN CNAME .
Sendo que para cada dominio que você deseja apontar para resolver o mesmo IP do nosso umbrella.cursodns.com.br siga este padrão:
domino.com IN CNAME . *.domino.com IN CNAME .
Assim qualquer subidominio (*).domino.com seja traduzido sempre para o mesmo IP.
Altere as permissões e reinicie o serviço
# chown bind: /var/cache/bind/rpz/ -R # systemctl restart bind9
Agora faça um teste para ver o que seu servidor ira traduzir:
# dig xvideos.com @localhost
; <<>> DiG 9.16.15-Debian <<>> xvideos.com @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1040 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: a060f744b32f2a4f01000000617842817ffcfff0a6b99fff (good) ;; QUESTION SECTION: ;xvideos.com. IN A ;; ANSWER SECTION: xvideos.com. 5 IN CNAME umbrella.cursodns.com.br. umbrella.cursodns.com.br. 10800 IN A 45.80.48.5 ;; ADDITIONAL SECTION: rpz.zone. 1 IN SOA LOCALHOST. umbrella.cursodns.com.br. 2020062400 3600 900 2592000 7200 ;; Query time: 0 msec ;; SERVER: ::1#53(::1) ;; WHEN: ter out 26 15:01:37 -03 2021 ;; MSG SIZE rcvd: 175
# dig qqrcoisa.xvideos.com @localhost # dig pornhub.com @localhost # dig www.pornhub.com @localhost # dig redtube.com @localhost
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
# mkdir /var/cache/bind/master-rev
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.
# vim /var/cache/bind/master-rev/45.80.48.rev
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.
$ORIGIN . $TTL 86400 ; 1 day 48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 48.80.45.in-addr.arpa. 2 PTR ns1.remontti.net.br. 3 PTR ns2.remontti.net.br. $ORIGIN 48.80.45.in-addr.arpa. $GENERATE 0-1 $ PTR 45-80-48-$.remontti.net.br. $GENERATE 4-255 $ PTR 45-80-48-$.remontti.net.br.
Proximo /24
# vim /var/cache/bind/master-rev/45.80.49.rev
$ORIGIN . $TTL 86400 ; 1 day 49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 49.80.45.in-addr.arpa. $GENERATE 0-255 $ PTR 45-80-49-$.remontti.net.br.
# vim /var/cache/bind/master-rev/45.80.50.rev
$ORIGIN . $TTL 86400 ; 1 day 50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 50.80.45.in-addr.arpa. $GENERATE 0-255 $ PTR 45-80-50-$.remontti.net.br.
# vim /var/cache/bind/master-rev/45.80.51.rev
$ORIGIN . $TTL 86400 ; 1 day 51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 51.80.45.in-addr.arpa. $GENERATE 0-255 $ PTR 45-80-51-$.remontti.net.br.
# vim /var/cache/bind/master-rev/2804.f123.rev
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.
$ORIGIN . $TTL 3600 ; 1 hour 3.2.1.f.4.0.8.2.ip6.arpa IN SOA ns1.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. hostmaster.remontti.net.br.3.2.1.f.4.0.8.2.ip6.arpa. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. 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.
Ajustamos as permissões:
# chown bind: /var/cache/bind/master-rev/ -R
Criamos uma atalho para facilitar:
# ln -s /var/cache/bind/master-rev/ /etc/bind/master-rev
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.
# vim /etc/bind/named.conf.local
Adicione ao final do arquivo:
zone "48.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.48.rev"; }; zone "49.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.49.rev"; }; zone "50.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.50.rev"; }; zone "51.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.51.rev"; }; zone "3.2.1.f.4.0.8.2.ip6.arpa" { type master; file "/var/cache/bind/master-rev/2804.f123.rev"; };
Reinicie o serviço e verifique se o mesmo subiu sem erros.
# systemctl restart bind9 # systemctl status bind9
Checando se nosso IP reverso está resolvendo os nomes setados, com o comando `dig -x IP @localhost +short`
# dig -x 45.80.48.0 @localhost +short 45-80-48-0.remontti.net.br. # dig -x 45.80.48.255 @localhost +short 45-80-48-255.remontti.net.br. # dig -x 45.80.48.2 @localhost +short ns1.remontti.net.br. # dig -x 45.80.48.3 @localhost +short ns2.remontti.net.br. # dig -x 45.80.49.0 @localhost +short 45-80-49-0.remontti.net.br. # dig -x 45.80.49.255 @localhost +short 45-80-49-255.remontti.net.br. # dig -x 45.80.50.0 @localhost +short 45-80-50-0.remontti.net.br. # dig -x 45.80.50.255 @localhost +short 45-80-50-255.remontti.net.br. # dig -x 45.80.51.0 @localhost +short 45-80-51-0.remontti.net.br. # dig -x 45.80.51.255 @localhost +short 45-80-51-255.remontti.net.br. # dig -x 2804:f123:bebe:cafe::2 @localhost +short ns1.remontti.net.br. # dig -x 2804:f123:bebe:cafe::3 @localhost +short ns2.remontti.net.br.
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.
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
$ORIGIN remontti.net.br. $GENERATE 0-1 45-80-48-$ A 45.80.48.$ $GENERATE 4-255 45-80-48-$ A 45.80.48.$ $GENERATE 0-255 45-80-49-$ A 45.80.49.$ $GENERATE 0-255 45-80-50-$ A 45.80.50.$ $GENERATE 0-255 45-80-51-$ A 45.80.51.$
# vim /var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts
Ficando:
$ORIGIN . $TTL 86400 ; 1 day remontti.net.br IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 $ORIGIN remontti.net.br. $TTL 10800 ; 3 hours ns1 A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 hostmaster A 45.80.48.2 AAAA 2804:f123:bebe:cafe::2 ns2 A 45.80.48.3 AAAA 2804:f123:bebe:cafe::3 www A 45.80.48.4 AAAA 2804:f123:bebe:cafe::4 $ORIGIN remontti.net.br. $GENERATE 0-1 45-80-48-$ A 45.80.48.$ $GENERATE 4-255 45-80-48-$ A 45.80.48.$ $GENERATE 0-255 45-80-49-$ A 45.80.49.$ $GENERATE 0-255 45-80-50-$ A 45.80.50.$ $GENERATE 0-255 45-80-51-$ A 45.80.51.$
Autoritativo ajustado, reinicie o serviço e verifique se o mesmo subiu sem erros.
# systemctl restart bind9 # systemctl status bind9
Agora ao consultar nosso nomes temos uma resposta dizendo qual nosso endereço ip
# host 45-80-48-0.remontti.net.br. 45-80-48-0.remontti.net.br has address 45.80.48.0 # host 45-80-49-0.remontti.net.br. 45-80-49-0.remontti.net.br has address 45.80.49.0 # host 45-80-50-0.remontti.net.br. 45-80-50-0.remontti.net.br has address 45.80.50.0 # host 45-80-51-0.remontti.net.br. 45-80-51-0.remontti.net.br has address 45.80.51.0 # host ns1.remontti.net.br. ns1.remontti.net.br has address 45.80.48.2 ns1.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::2 # host ns2.remontti.net.br. ns2.remontti.net.br has address 45.80.48.3 ns2.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::3
Para o servidor Slave
Crie o diretório onde irão ficar os arquivos e dê permissão
# mkdir /var/cache/bind/slave-rev # chown bind: /var/cache/bind/slave-rev -R
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.
# vim /etc/bind/named.conf.local
Adicione ao final:
zone "48.80.45.in-addr.arpa" { type slave; file "/var/cache/bind/slave-rev/45.80.48.rev"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; }; zone "49.80.45.in-addr.arpa" { type slave; file "/var/cache/bind/slave-rev/45.80.49.rev"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; }; zone "50.80.45.in-addr.arpa" { type slave; file "/var/cache/bind/slave-rev/45.80.50.rev"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; }; zone "51.80.45.in-addr.arpa" { type slave; file "/var/cache/bind/slave-rev/45.80.51.rev"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; }; zone "3.2.1.f.4.0.8.2.ip6.arpa" { type slave; file "/var/cache/bind/slave-rev/2804.f123.rev"; masters { 45.80.48.2; }; allow-notify { 45.80.48.2; }; };
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.
# ln -s /var/cache/bind/slave-rev /etc/bind/slave-rev # systemctl restart bind9 # systemctl status bind9 # ls -lh /var/cache/bind/slave-rev/
Validando seu reverso no registro.br https://registro.br/tecnologia/ferramentas/verificacao-de-dns/
Vamos verificar pelos domínos .arpa
48.80.45.in-addr.arpa 49.80.45.in-addr.arpa 50.80.45.in-addr.arpa 51.80.45.in-addr.arpa 3.2.1.f.4.0.8.2.ip6.arpa
RESULTADOS
DOMÍNIO : 48.80.45.in-addr.arpa DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102602 TEMPO DE RESPOSTA : 23.990 ms DOMÍNIO : 49.80.45.in-addr.arpa DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102602 TEMPO DE RESPOSTA : 23.990 ms DOMÍNIO : 50.80.45.in-addr.arpa DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102602 TEMPO DE RESPOSTA : 23.990 ms DOMÍNIO : 51.80.45.in-addr.arpa DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102602 TEMPO DE RESPOSTA : 23.990 ms DOMÍNIO : 3.2.1.f.4.0.8.2.ip6.arpa DNS : 45.80.48.2 STATUS : Autoridade sobre o domínio VERSÃ : O2021102602 TEMPO DE RESPOSTA : 23.990 ms
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.
# vim /var/cache/bind/master-rev/45.80.49.rev
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.
$ORIGIN . $TTL 86400 ; 1 day 51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 49.80.45.in-addr.arpa. $GENERATE 0-63 $ PTR 45-80-51-$.remontti.net.br. ; Cliente delegado ; <<64-79>> /28 ; Aponte para os DNS do Servidor do José 64/28 NS ns1.provedordojose.com.br. 64/28 NS ns2.provedordojose.com.br. ; 64 CNAME 64.45/28.49.80.45.in-addr.arpa. 65 CNAME 65.45/28.49.80.45.in-addr.arpa. 66 CNAME 66.45/28.49.80.45.in-addr.arpa. 67 CNAME 67.45/28.49.80.45.in-addr.arpa. 68 CNAME 68.45/28.49.80.45.in-addr.arpa. 69 CNAME 69.45/28.49.80.45.in-addr.arpa. 70 CNAME 70.45/28.49.80.45.in-addr.arpa. 71 CNAME 71.45/28.49.80.45.in-addr.arpa. 72 CNAME 72.45/28.49.80.45.in-addr.arpa. 73 CNAME 73.45/28.49.80.45.in-addr.arpa. 74 CNAME 74.45/28.49.80.45.in-addr.arpa. 75 CNAME 75.45/28.49.80.45.in-addr.arpa. 76 CNAME 76.45/28.49.80.45.in-addr.arpa. 77 CNAME 77.45/28.49.80.45.in-addr.arpa. 78 CNAME 78.45/28.49.80.45.in-addr.arpa. 79 CNAME 79.45/28.49.80.45.in-addr.arpa. $ORIGIN 51.80.45.in-addr.arpa. $GENERATE 80-255 $ PTR 45-80-51-$.remontti.net.br.
Reinicie o serviço e verifique o mesmo
# systemctl restart bind9 # systemctl status bind9
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
# vim /var/cache/bind/master-aut/provedordojose.com/provedordojose.com.br.hosts
$ORIGIN . $TTL 86400 ; 1 day provedordojose.com.br IN SOA ns1.provedordojose.com.br. hostmaster.provedordojose.com.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.provedordojose.com.br. NS ns2.provedordojose.com.br. A 45.80.49.67 $ORIGIN provedordojose.com.br. $TTL 10800 ; 3 hours ns1 A 45.80.49.66 hostmaster A 45.80.49.66 ns2 A 45.80.49.67 www A 45.80.49.67 $ORIGIN provedordojose.com.br. $GENERATE 64-65 45-80-49-$ A 45.80.49.$ $ORIGIN provedordojose.com.br. $GENERATE 68-79 45-80-49-$ A 45.80.49.$
Reverso
# vim /var/cache/bind/master-rev/45.80.49.64-79.rev
$TTL 1h @ IN SOA ns1.provedordojose.com.br. root.provedordojose.com.br. ( 2020050101 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) IN NS ns1.provedordojose.com.br. IN NS ns2.provedordojose.com.br. $ORIGIN 64/28.49.80.45.in-addr.arpa. 64 IN PTR 45-80-49-64.provedordojose.com.br. 65 IN PTR 45-80-49-65.provedordojose.com.br. 66 IN PTR ns1.provedordojose.com.br. 67 IN PTR ns2.provedordojose.com.br. 68 IN PTR 45-80-49-68.provedordojose.com.br. 69 IN PTR 45-80-49-69.provedordojose.com.br. 70 IN PTR 45-80-49-70.provedordojose.com.br. 71 IN PTR 45-80-49-71.provedordojose.com.br. 72 IN PTR 45-80-49-72.provedordojose.com.br. 73 IN PTR 45-80-49-73.provedordojose.com.br. 74 IN PTR 45-80-49-74.provedordojose.com.br. 75 IN PTR 45-80-49-75.provedordojose.com.br. 76 IN PTR 45-80-49-76.provedordojose.com.br. 77 IN PTR 45-80-49-77.provedordojose.com.br. 78 IN PTR 45-80-49-78.provedordojose.com.br. 79 IN PTR 45-80-49-79.provedordojose.com.br.
# vim /etc/bind/named.conf.local
zone "provedordojose.com.br" { type master; file "/var/cache/bind/master-aut/provedordojose.com.br/provedordojose.com.br.hosts"; key-directory "/var/cache/bind/master-aut/rprovedordojose.com.br/keys/"; dnssec-policy default; inline-signing yes; serial-update-method unixtime; }; zone "64/28.49.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.49.64-79.rev"; };
Reinicie o serviço
# systemctl restart bind9 # systemctl status bind9
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:
# vim /var/cache/bind/master-rev/45.80.49.rev
$ORIGIN . $TTL 86400 ; 1 day 49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2023020101 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 49.80.45.in-addr.arpa. $GENERATE 0-63 $ PTR 45-80-49-$.remontti.net.br. $ORIGIN 49.80.45.in-addr.arpa. 64 PTR 45-80-49-64.provedordojose.com.br. 65 PTR 45-80-49-65.provedordojose.com.br. 66 PTR ns1.provedordojose.com.br. 67 PTR ns2.provedordojose.com.br. 68 PTR mail.provedordojose.com.br. 69 PTR 45-80-49-69.provedordojose.com.br. 70 PTR 45-80-49-70.provedordojose.com.br. 71 PTR 45-80-49-71.provedordojose.com.br. 72 PTR 45-80-49-72.provedordojose.com.br. 73 PTR 45-80-49-73.provedordojose.com.br. 74 PTR 45-80-49-74.provedordojose.com.br. 75 PTR 45-80-49-75.provedordojose.com.br. 76 PTR 45-80-49-76.provedordojose.com.br. 77 PTR 45-80-49-77.provedordojose.com.br. 78 PTR 45-80-49-78.provedordojose.com.br. 79 PTR 45-80-49-79.provedordojose.com.br. $ORIGIN 49.80.45.in-addr.arpa. $GENERATE 80-199 $ PTR 45-80-49-$.remontti.net.br. $ORIGIN 49.80.45.in-addr.arpa. 200 PTR mail.empresa.com.br. 201 PTR mail.minhaempresa.com.br. 202 PTR mail.algumaempresa.com.br. 203 PTR www.algumchato.com.br. 204 PTR maischatoainda.com.br. $ORIGIN 49.80.45.in-addr.arpa. $GENERATE 205-255 $ PTR 45-80-49-$.remontti.net.br.
Reinicie os serviços
# systemctl restart bind9 # systemctl status bind9
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
# vim /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 //
statistics-channels { inet 127.0.0.1 port 58053 allow { 127.0.0.1; ::1; }; inet 45.80.48.2 port 58053 allow { 45.80.48.100; 45.80.48.101; }; };
Para surtir efeito reinicie o serviço
# systemctl restart bind9
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
# vim /etc/bind/named.conf.options
Adicione dentro de options { … }
options { //… //… statistics-file "/var/log/named/named.stats"; //… //… };
Como sempre, em toda alteração reiniciamos o serviço
# systemctl restart bind9
Porém para gere o arquivo de estatísticas é necessário o comando, e toda vez que deseja atualizar precisa executar o comando.
# rndc stats
Exibe os dados do arquivo
# cat /var/log/named/named.stats ou # cat /var/cache/bind/named.stats
Caso queira ver oque esta em cache pode usar o comando:
# rndc dumpdb -cache
Ira gerar um arquivo named_dump.db em /var/cache/bind/
# cat /var/cache/bind/ | more # cat /var/cache/bind/ | grep google
Criando Backup
Basta salvar os diretórios /etc/bind/* /var/cache/bind/* /usr/share/dns/* Gerar um arquivo de backup
# tar -czpf ns1.tar.gz /etc/bind/* /var/cache/bind/* /usr/share/dns/*
Extrair arquivo de backup
# tar vxf ns1.tar.gz
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.
# cd /tmp # apt install wget # cd /tmp/ # wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-5+debian12_all.deb # apt install ./zabbix-release_6.0-5+debian12_all.deb # apt update; apt upgrade -y # apt install zabbix-agent # systemctl enable zabbix-agent
Em seguida vamos precisar informar o IP do zabbix server:
# vim /etc/zabbix/zabbix_agentd.conf
Localize e altere:
Server=45.80.48.10 #IP Zabbix Server ServerActive=45.80.48.10 #IP Zabbix Server Hostname=ns1 #Nome exato cadastrado no Zabbix server
Reinicie o serviço do zabbix agent
# systemctl restart zabbix-agent
Não esqueça de ajustar statistics-channels named.conf:
statistics-channels { inet 127.0.0.1 port 58053 allow { 127.0.0.1; }; };
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.
# cd /etc/zabbix/zabbix_agentd.d/ # wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/userparameter_rr_bind.conf
Copie o script bind-stats-rr.py para dentro de /etc/zabbix/script/ e ajustaremos os poderes e permissões.
# mkdir /etc/zabbix/script # cd /etc/zabbix/script # wget https://raw.githubusercontent.com/remontti/Zabbix-Bind9-Statistics-Collection/master/bind-stats-rr.py # chmod a+x /etc/zabbix/script/bind-stats-rr.py # chown zabbix: /etc/zabbix/script/ -R # systemctl restart zabbix-agent
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.:
zone "remontti.net.br" { type master; file "/var/cache/bind/master-aut/remontti.net.br/remontti.net.br.hosts"; key-directory "/var/cache/bind/master-aut/remontti.net.br/keys/"; dnssec-policy default; inline-signing yes; serial-update-method unixtime; zone-statistics yes; }; zone "48.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.48.rev"; zone-statistics yes; }; zone "49.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.49.rev"; zone-statistics yes; }; zone "50.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.50.rev"; zone-statistics yes; }; zone "51.80.45.in-addr.arpa" { type master; file "/var/cache/bind/master-rev/45.80.51.rev"; zone-statistics yes; }; zone "3.2.1.f.4.0.8.2.ip6.arpa" { type master; file "/var/cache/bind/master-rev/2804.f123.rev"; zone-statistics yes; };
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:
- RR Servico Bind9 ==> Irá verificar se os serviço esta UP - RR Servico Bind9 - Estatisticas ==> Diversas informações - RR Servico Bind9 - Valida arquivos - Deb11 ==> Notificará sempre que um arquivo named.conf* for modificado
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/
# cd /etc/zabbix/zabbix_agentd.d/ # wget https://raw.githubusercontent.com/remontti/zabbix-fail2ban-discovery/master/userparameter_fail2ban.conf
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:
# addgroup --group fail2ban
Adicionar o usuário zabbix existente ao grupo fail2ban:
# usermod -a -G fail2ban zabbix
Em seguida, devemos alterar o proprietário do grupo do soquete de root para fail2ban:
# chown root:fail2ban /var/run/fail2ban/fail2ban.sock
Por fim, ajuste as permissões no soquete para que os membros do grupo possam acessá-lo:
# chmod g+rwx /var/run/fail2ban/fail2ban.sock
Agora podemos testar que o agente Zabbix pode chamar Fail2ban:
# su - zabbix --shell=/bin/bash -c 'fail2ban-client status sshd'
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
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
# systemctl edit fail2ban
Adicione:
[Service] ExecStartPost=/bin/sh -c "while ! [ -S /run/fail2ban/fail2ban.sock ]; do sleep 1; done" ExecStartPost=/bin/chgrp fail2ban /run/fail2ban/fail2ban.sock ExecStartPost=/bin/chmod g+w /run/fail2ban/fail2ban.sock Restart Zabbix Agent
Reinicie os serviços
# systemctl daemon-reload # systemctl restart zabbix-agent fail2ban
Consulte se o grupo é o fail2ban
# ls -lh /var/run/fail2ban/fail2ban.sock
srwxrwx--- 1 root fail2ban 0 jun 18 11:47 /var/run/fail2ban/fail2ban.sock
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/
Posso ter o Recursivo e o Reverso local e manter meu autoritativo no Registro.br?
Boa tarde! Excelente conteúdo como sempre!
Uma dúvida, quando dou o comando dig -x ipv6 @localhost +short não retorna nada. Onde checo isso pro reverso ip funcionar?
No Fail2Ban, a configuração definida para IPv6 ‘allowipv6’ não foi definida no arquivo, está em auto ou com comentada, para alterar, vá:
vim /etc/fail2ban/fail2ban.conf
allowipv6 = yes
prefregex = ^%(__line_prefix)s(?: error:)?\s*client(?: @\S*)? #\S+(?: \([\S.]+\))?: .+\s(?:denied|\(NOTAUTH\)|\(allow-query-cache did not match\))\s*$
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
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?
Boa tarde, nomes no qual o ip está hospedado internamente não abrem. Teria algum ajuste a ser feito ?
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
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?
bash: dnssec-keygen: comando não encontrado
pra mim está dando erro.
Conseguio resolver?
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.
Provável que não seja o DNS e sim problemas com rotas (operadora)
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???
Conteúdo muito rico. Parabéns pela riqueza de detalhes.
Estou com o DNS reverso funcionando, mas não esta propagando as informaçõs oque pode ser ?
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 ?
Já está lá nas conf do /etc/bind/named.conf.options (minimal-responses yes;)
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
tudo isso feito em um server só? que top
Sim é possível, no tutorial tem um “all in one” para vc aplicar dependendo de suas necessidades.
O material desde blog possue uma extrema qualidade!
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.
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!
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 ?
voces conseguiram alguma solucao para o mesmo ? estou com o mesmo problema.
Conteúdo muito TOP!!
Parabéns!!!
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 ?
Não, desde que vc informe auto-dnssec maintain na zona.
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.
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
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.
Sim, sem problemas.
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
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!
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?
Tráfego de 4mb deve ter pelo menos uns 7mil clientes consultando. Se vc não tem isso é possível que algum cliente seu esteja fazendo um “proxy” do seu DNS para o mundo. Teria q investigar…
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
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 ?
Tente usar o comando dig +trace para ver onde vai parar…
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.
Como fariamos para gerar dnssec para o /22 e /32 para cadastrar no registro.br ? Obrigado pelos tutoriais, são muito bons mesmo.
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
Quando terá curso de DNS novamente?
Acredito q inicio de 2022
TOP, me comunica por gentileza quando ocorrer novamente
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!
Obrigado!
Certifique-se que o prefixo do seu zabbix esteja na acl autorizados {…} e você pode incluir em /etc/fail2ban/jail.conf ignoreip o ip ou prefixo dos seus servidores.
Excelente artigo, Remontti. Muito obrigado por mais uma maravilhosa contribuição.
Obrigado!!