Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster [Descontinuado]

Este tutorial foi atualizado:

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

Não utilize este tutorial! Não apaguei o mesmo para deixa-lo para fins de estudos em cima do Debian 10.


(Descontinuado)


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:

Requesitos:
Debian 10 Stretch – Instalação Limpa

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

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

DNS REVERSO
DNS atua resolvendo o nome do domínio/subdomínio para um endereço IP correspondente. Já o DNS Reverso ele resolve o endereço IP buscando 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 (pois isso que ele é importante para servidores de e-mail).

DICAS
– Para que o DNS Reverso funcione no registro.br é importante que você já tenha configurado o DNS autoritativo, e aguarde sua publicação antes de fazer a designação. (Normalmente demoram 4 horas)
– Se você é um provedor, o correto seria você ter dois servidores DNS em sua rede, uma Master e outro Slave. Neste tutoria foi explicar como criar os dois!

PERGUNTAS FREQUENTES:
Preciso montar dois servidores?
Sim/Não, para a configuração do DNS autoritativo/reverso são necessários apontar dois endereços, no entanto nada impede de configurar dois IPs no mesmo servidor. Em alguns caso vejo as pessoas virtualizar 2 servidores (apenas DNS) na mesma maquina de virtualização, se pensarmos que se o servidor de virtualização para nada adianta ter 2 servidores, neste caso quem sabe seria mais interessante ter alguma outra aplicação rodando com o servido slave (pensando pelo lado aproveitamento de hardware). Então vai da sua realidade.

Preciso separar o recusivo do autoritativo/reverso?
Não! Ao não ser que você seja um grande data center com centenas de domínios autoritativos não vejo o motivo para separa-los. Na maioria das vezes que vi isso acontecer quem fez isso é porque não sabe como fechar as consultas recursivas para o mundo. E é ai que neste tutorial entra o fail2ban como a cereja do bolo.

Vamos iniciar com a instalação do servidor Master, lembrando que para isso estou usando a Distribuição linux Debian 10, com uma instalação que eu chamo de limpa.

Ex.: ASN – CIDR/22

Nesse exemplo vou usar um bloco /22, porém mais a baixo vou deixar um exemplo também para você que é dono destes “/22” e vai delegar um bloco menor que /24 para outra empresa que queira ter seu próprio servidor DNS resolvendo o reverso desse bloco delegado.

Bloco recebido: IPv4 – 45.80.48.0/22 IPv6 – 2804:f123::/32
Domínio autoritativo:: remontti.net.br

Antes de mais nada o mínimo de conhecimento é saber realizar cálculos de sub-redes.

:: ipcalc ::

root@remontti:~#  apt install ipcalc
root@remontti:~# ipcalc 45.80.48.0/22
Address:   45.80.48.0           00101101.01010000.001100 00.00000000
Netmask:   255.255.252.0 = 22   11111111.11111111.111111 00.00000000
Wildcard:  0.0.3.255            00000000.00000000.000000 11.11111111
=>
Network:   45.80.48.0/22        00101101.01010000.001100 00.00000000
HostMin:   45.80.48.1           00101101.01010000.001100 00.00000001
HostMax:   45.80.51.254         00101101.01010000.001100 11.11111110
Broadcast: 45.80.51.255         00101101.01010000.001100 11.11111111
Hosts/Net: 1022                  Class A

:: ip6calc ::

root@remontti:~# apt install python-ipaddr wget
root@remontti:~# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin/ip6calc
root@remontti:~# chmod +x /bin/ip6calc
root@remontti:~# ip6calc 2804:f123::/32
Address:
  (Compressed)  2804:f123::/32
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0000/32
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000/32
                ↑          ↑                 ↑  ↑                ↑        ↑       ↑                                                  ↑                ↑
                /1         /12              /29 /32              /48      /56     /64                                                /112             /128
Address type is: global unicast

Netmask:
  (Compressed)  ffff:ffff::
    (Exploded)  ffff:ffff:0000:0000:0000:0000:0000:0000
      (Binary)  1111111111111111:1111111111111111:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000
First address assignable:
  (Compressed)  2804:f123::
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0000
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000
Last address assignable:
  (Compressed)  2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
    (Exploded)  2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
      (Binary)  0010100000000100:1111000100100011:1111111111111111:1111111111111111:1111111111111111:1111111111111111:1111111111111111:1111111111111111

Total number of addresses: 79228162514264337593543950336 (2^96 or 7.9e+28)

First address assignable (excluding "subnet-router anycast" of RFC 2526):
  (Compressed)  2804:f123::1
    (Exploded)  2804:f123:0000:0000:0000:0000:0000:0001
      (Binary)  0010100000000100:1111000100100011:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000001
Total number of addresses (Excluding "reserved" addresses): 79228162514264337593543950335 (7.9e+28)

This prefix can contain one of the following:
   * 4294967296 (2^32 or 4.3e+09) subnets /64
   * 16777216 (2^24 or 1.7e+07) subnets /56
   * 65536 (2^16 or 6.6e+04) subnets /48

Para ilustrar “nossa rede” conto com os seguintes servidore:

45.80.48.0/22 IPv6 – 2804:f123::/32

ROUTER GW -> 45.80.48.1 / 2804:f123:bebe:cafe::1 (cpd)
SERV DNS MASTER -> 45.80.48.2 / 2804:f123:bebe:cafe::2 (ns1)
SERV DNS SLAVE -> 45.80.48.3 / 2804:f123:bebe:cafe::3 (ns2)
SERV WEB + FTP -> 45.80.48.4 / 2804:f123:bebe:cafe::4 (www,ftp)
SERV ZABBIX + phpIPam -> 45.80.48.5 / 2804:f123:bebe:cafe::5 (zabbix,phpipam)
SERV E-MAILS -> 45.80.48.6 / 2804:f123:bebe:cafe::6 (mail,imap,pop,smtp,mx,dkim)

Dentro da rede ainda conto com alguns blocos de IPs inválidos 192.168.0.0/16, 172.16.0.0/12, 100.64.0.0/10 e 10.0.0.0/8 utilizando NAT que por ventura também preciso autoriza-los a fazer consultas recursivas no servidores.

Tenha sua interface de rede configurada corretamente.

# vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s3
iface enp0s3 inet static
        address 45.80.48.2/28
        gateway 45.80.48.1
        dns-nameservers 127.0.0.1
        dns-search localhost

iface enp0s3 inet6 static
        pre-up modprobe ipv6
        address 2804:f123:bebe:cafe::2
        netmask 64
        gateway 2804:f123:bebe:cafe::1

MASTER (NS1)

 # su -
# apt install bind9 dnsutils

Pronto! O servidor recursivo já está funcionando, porém ele está aberto, e isso não é nada legal!
Você não vai querer “qualquer um” utilizando seu servidor para resolver nomes. Resolveremos isso mais a frente no arquivo named.conf.options.

Alteramos o DNS do servidor fazendo com que ele consulte em si próprio. Essa alteração deve ser feita no arquivo /etc/resolv.conf.

# echo "nameserver 127.0.0.1" > /etc/resolv.conf 

Para descobrir se seu servidor esta resolvendo nomes use o comando dig.

# dig google.com @localhost

Retornará algo como:

[...]

;; ANSWER SECTION:
google.com.             300     IN      A       172.217.162.110

[...]

Os arquivos de configuração do bind ficam no diretório /etc/bind/ e agora no Debian 10 Buster também separando os root servers em /usr/share/dns/

# cd /etc/bind

Iremos alterar o named.conf.options, o próprio nome já se auto descreve o que vamos encontrar nele.
Sempre gosto de preservar o arquivo original, então fizemos um backup antes de modifica-lo.

# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp
# echo > named.conf.options

Aqui vai uma dica para que usa Windows + Putty, tome cuidado ao colar, principalmente quem usa Windows 10 “ele copia caracteres imaginários que você não vê!”.
Recomento usar o Bitvise SSH Client que é muito superior

Explicação comentada no arquivo.

# vim /etc/bind/named.conf.options
// ACL "autorizados" vão ficar 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 IPs privados
acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.0/22;
        2804:f123::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
};

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-enable yes;
    dnssec-validation auto;

    // Conforme RFC1035
    // https://www.ietf.org/rfc/rfc1035.txt
    auth-nxdomain no;

    // Respondendo para IPv4 e IPv6
    // Porta 53 estará aberta para ambos v4 e v6
    listen-on { any; };
    listen-on-v6 { any; };

    // Limitação da taxa de resposta no sistema de nomes de domínio (https://kb.isc.org/docs/aa-00994)
    // Se você esta montando um servido apenas para autoritativo descomente as linhas a baixo.
    //rate-limit {
    //    responses-per-second 15;
    //    window 5;
    //};

    // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
    // O padrão BIND é (no) não.
    minimal-responses yes;

    // 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 DNS comuns.
    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 não compile o arquivo, assim no outro servidor o arquivo
    // da zona terá um texto "puro"
    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";
};

Legal agora o servidor Recursivo já está funcionando e limitando os IPs que poderão realizar consultas ao mesmo.
Caso você não queria seu servidor sendo recursivo altere na ACL autorizados deixando apenas 127.0.0.1 e ::1.

Se seu servidor não tiver IPv6? (Que triste rsrsrs) Recomendo que desative o ipv6 no bind.

# vim /etc/default/bind9

Adicione um -4 em OPTIONS.

OPTIONS="-u bind"
#para
OPTIONS="-4 -u bind"
# vim /etc/bind/named.conf.options

Altere listen-on-v6 para none.

listen-on-v6 { any; };
#para:
listen-on-v6 { none; };

Toda alteração feita no bind para ter efeito é necessário restartar o serviço.

# systemctl restart bind9

Se desejar remover os comentários do named.conf.options execute:

# cat /etc/bind/named.conf.options |grep -v "//" > /tmp/named.conf.options ; mv /tmp/named.conf.options /etc/bind/

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

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

Se nada retornar é porque não tem nenhum erro.
Vou deixar proposital mente faltando um “;” depois do 45.80.48.0/22. Veja o que retornou um altera dizendo que falta ponto virgula antes do IPv6, ou seja onde esta o IPv4/22.

/etc/bind/named.conf.options:5: missing ';' before '2804:f123::'

Verifique também o status do bind para ver se o mesmo era rodando.

# systemctl restart bind9
# systemctl status bind9

Verifique se está: “active (running)”

● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-07-19 14:17:09 -03; 4s ago
     Docs: man:named(8)
  Process: 706 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 707 (named)
    Tasks: 4 (limit: 2359)
   Memory: 11.9M
   CGroup: /system.slice/bind9.service
           └─707 /usr/sbin/named -u bind

Antes configurar o Autoritativo e Reverso precisamos pensar na segurança do Recursivo.
Para isso utilizaremos o Fail2Ban e fazer algumas alterações para deixa-lo bem “nervoso”!

Fail2Ban + nftables

Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta, que opera monitorando arquivos de logs. Sendo o mais comum usado para bloquear endereços IPs selecionados que podem pertencer a hosts que estão tentando violar a segurança.

# apt install nftables fail2ban

Como o iptables está sendo substituído por nftables começando com o Debian Buster, vamos configurar o Fail2Ban para usar o nftables como padrão.
Mas vou ir além em vez de usar o filtro multiport vou setar allports e modifica-lo para que quando uma tentativa de violação acontecer o Fail2Ban crie uma regra de firewall que dropa definitivamente o IP e não apenas fechando a porta do serviço para “invasor”.

# vim /etc/fail2ban/jail.conf

Procure por “banaction = iptables-multiport” e “banaction_allports = iptables-allports” e altere seu valor para “nftables-allports”:

#banaction = iptables-multiport
#banaction_allports = iptables-allports
banaction = nftables-allports
banaction_allports = nftables-allports

Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um “drop all”.

# vim /etc/fail2ban/action.d/nftables-allports.conf

Procure por nftables_mode = meta l4proto e altere deixando seu valor vazio:

#nftables_mode = meta l4proto <protocol>
nftables_mode =

Em nftables-common.conf alteraremos o padrão de reject para drop

# vim /etc/fail2ban/action.d/nftables-common.conf

Procure por “blocktype = reject” e altere seu valor para “drop”.

#blocktype = reject
blocktype = drop

Melhorias feitas, precisamos ativar o filtro para ler os logs do bind, porém ao ativar o filtro named-refused me deparei com seu não funcionamento, e quebrando a cabeça descobri que os logs do bind estão diferente e a expressão regular do filtro está errada. Os desenvolvedores do fail2ban já fizeram a correção, mas acredito que irá levar um tempo para o pessoal do Debian fazer um novo empacotamento.
A correção pode ser feita editando o arquivo /etc/fail2ban/filter.d/named-refused.conf

- prefregex = ^%(__line_prefix)s( error:)?\s*client <HOST>#\S+( \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>$
+ prefregex = ^%(__line_prefix)s( error:)?\s*client( @[0-9a-z]+)? <HOST>#\S+( \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>$

Porém como eu vou ser mais “bruto” no filtro. Vou criar nosso próprio filtro bind9, vamos lá!

# vim /etc/fail2ban/filter.d/bind9.conf

Adicone no arquivo:

# Fail2Ban filter file for named (bind9.11).
#

[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( @[0-9a-z]+)? <HOST>#\S+( \([\S.]+\))?: <F-CONTENT>.+</F-CONTENT>$

failregex = ^(view (internal|external): )?query(?: \(cache\))? '.*' denied\s*$
            ^zone transfer '\S+/AXFR/\w+' denied\s*$
            ^bad zone transfer request: '\S+/IN': non-authoritative zone \(NOTAUTH\)\s*$

ignoreregex =

# DEV Notes:
# Author: Rudimar Remontti

Ativamos o filtro que criamos, e definir um tempo de banimento por 24h você pode ajustar para mais se achar necessário. E “maxretry” que é a quantidade de tentativas para 1.

# vim /etc/fail2ban/jail.d/bind9.conf

Adicione no arquivo:

[bind9]
enabled  = true
port     = domain,953
protocol = tcp
logpath  = /var/log/named/security.log
bantime  = 24h
maxretry = 1

Vale lembrar que o filtro de SSH já vem ativo por padrão em “/etc/fail2ban/jail.d/defaults-debian.conf”.

Precisamos fazer o bind gerar os logs com tentativas de consultas negadas (denied), incluído logging {…} no arquivo named.conf.

# vim /etc/bind/named.conf
// 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/named.log" versions 2 size 50k;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };

    channel errors_syslog {
        syslog daemon;
        severity warning;
    };

    category security { security_file; };
    category dnssec { errors_syslog; };
    category default { file_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 de permissão para que possa gravar nesta pasta.

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

É importante ativar o nftables na inicialização e restartar os serviços para que nossas configurações sejam interpretadas.

# systemctl enable nftables
# systemctl restart bind9
# systemctl restart nftables
# systemctl restart fail2ban

Para visualizar seu firewall use o comando:

# nft list ruleset

Note que ja temos alguns IPs sendo dropado por tentativas de consulta no DNS e SSH.

table inet filter {
        set f2b-sshd {
                type ipv4_addr
                elements = { 92.63.194.90, 142.44.130.186,
                             191.54.227.13 }
        }

        set f2b-bind9 {
                type ipv4_addr
                elements = { 71.6.199.23, 185.94.111.1 }
        }

        chain input {
                type filter hook input priority 0; policy accept;
                ip saddr @f2b-bind9 drop
                ip saddr @f2b-sshd drop
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
        }

        chain output {
                type filter hook output priority 0; policy accept;
        }
}

Alguns comandos legais do fail2ban

# fail2ban-client status

Veja quais filtros estão ativos

Status
|- Number of jail:      2
`- Jail list:   bind9, sshd
fail2ban-client status NOME_FILTRO

Ex:

# fail2ban-client status bind9
Status for the jail: bind9
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     2
|  `- File list:        /var/log/named/security.log
`- Actions
   |- Currently banned: 2
   |- Total banned:     2
   `- Banned IP list:   71.6.199.23 185.94.111.1

# 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: 3
   |- Total banned:     3
   `- Banned IP list:   142.44.130.186 191.54.227.13 92.63.194.90

Para remover um IP que foi bloqueado basta:

# fail2ban-client set bind9 unbanip IPADDRESS

Pronto agora já temos um servidor DNS com um nível de segurança bem elevado!

Autoritativo (ns1)

Agora é aquela hora que precisamos ter planejado o que iríamos fazer com nosso IPs recebidos.

No meu exemplo vai ficar assim:
- 45.80.48.0/27   - Servidores
- 45.80.48.32/27  - Roteamento
- 45.80.48.64/26  - Clientes com IP Fixo
- 45.80.48.128/25 - CGNAT
- 45.80.49.0/26   - NOC (Gerência)
- 45.80.49.64/26  - Clientes Delegação
- 45.80.49.128/25 - Clientes dinâmico
- 45.80.50.0/24   - Clientes dinâmico
- 45.80.51.0/24   - Clientes dinâmico

# Quebrei meu ex de forma q não fique simples para que possamos dar nomes sugestivos aos IPs, adapte a sua realidade

Para ficar organizado vou criar a pasta master-aut onde ficará os arquivos de hosts dos domínios autoritativos.

# mkdir /var/cache/bind/master-aut

Crie o arquivo remontti.net.br.hosts na pasta master-rev. Ajuste remontti.net.br para seu domínio.

# vim /var/cache/bind/master-aut/remontti.net.br.hosts
$ORIGIN .
$TTL 86400      ; 1 day
remontti.net.br        IN SOA  ns1.remontti.net.br. hostmaster.remontti.net.br. (
                            2020062300 ; serial
                            10800      ; refresh (3 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
                        MX      10 mail.remontti.net.br.
                        TXT     "v=spf1 a mx -all"
                        SPF     "v=spf1 a mx -all"
$ORIGIN remontti.net.br.
$TTL 10800      ; 3 hours

45-80-48-0                      A       45.80.48.0
45-80-48-1                      A       45.80.48.1
                                AAAA    2804:f123:bebe:cafe::1

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

zabbix                          A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5
phpipam                         A       45.80.48.5
                                AAAA    2804:f123:bebe:cafe::5

mail                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
imap                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
pop                             A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6
smtp                            A       45.80.48.6
                                AAAA    2804:f123:bebe:cafe::6

$ORIGIN remontti.net.br.
$GENERATE 7-31   ns-$         A   45.80.48.$

$ORIGIN remontti.net.br.
$GENERATE 32-255 45-80-48-$   A   45.80.48.$

$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-49-$    A   45.80.49.$
 
$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-50-$    A   45.80.50.$
 
$ORIGIN remontti.net.br.
$GENERATE 0-255 45-80-51-$    A   45.80.51.$

Chamaremos a zone remontti.net.br em named.conf.local

# vim /etc/bind/named.conf.local

Adicione ao final do arquivo:

// Zonas Master
zone "remontti.net.br" {
        type master;
        file "/var/cache/bind/master-aut/remontti.net.br.hosts";
};

De permissões ao diretório/arquivo criados

# chown  bind. /var/cache/bind/master-aut -R

Restart o serviço.

# systemctl restart bind9

Testamos agora para ver se está resolvendo nosso domínio.

# dig ANY remontti.net.br @localhost
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> ANY remontti.net.br @localhost
;; global options: +cmd
;; Got answer:
;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 52255
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 3148faada350a11c7aeaf3835d32238e495995289566b021 (good)
;; QUESTION SECTION:
;remontti.net.br.               IN      ANY

;; ANSWER SECTION:
remontti.net.br.        86400   IN      SOA     ns1.remontti.net.br. hostmaster.remontti.net.br. 2020062300 10800 3600 2419200 300
remontti.net.br.        86400   IN      NS      ns2.remontti.net.br.
remontti.net.br.        86400   IN      NS      ns1.remontti.net.br.
remontti.net.br.        86400   IN      A       45.80.48.4
remontti.net.br.        86400   IN      AAAA    2804:f123:bebe:cafe::4
remontti.net.br.        86400   IN      MX      10 mail.remontti.net.br.
remontti.net.br.        86400   IN      TXT     "v=spf1 a mx -all"

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: sex jul 19 17:09:50 -03 2019
;; MSG SIZE  rcvd: 263

Testes:

# host remontti.net.br
remontti.net.br has address 45.80.48.4
remontti.net.br has IPv6 address 2804:f123:bebe:cafe::4
remontti.net.br mail is handled by 20 mail.remontti.net.br.

# 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

# host mail.remontti.net.br
mail.remontti.net.br has address 45.80.48.6
mail.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::6

# host zabbix.remontti.net.br
zabbix.remontti.net.br has address 45.80.48.5
zabbix.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::5

Seu autoritativo já está funcionado, você já é possível registrar seu domínio (claro ainda falta o slave).

Neste momento você pode verificar no registro.br se seu servidor já tem autoridade sobre o domínio que configurou.
Mas antes vamos ajustar o fail2ban para ignorar os ips do Registro.br pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam bloqueando o registro.br (Isso acontece porque quando você for validar se o seu DNS não estiver certo, ele vai achar que o registro.br esta tentando resolver o "dominio qualquer" que você não é autoritativo), para isso faça:

# vim /etc/fail2ban/jail.conf

Localize "ignoreip =" e adicione os blocos do registro.br (200.160.0.0/20 200.219.148.0/24 2001:12ff::/32 2001:12f8:6::/47) se desajar pode incluir seu bloco de ips dos servidores, principalmente o ip do servidor Slave para evitar que ele também seja bloqueado (no meu ex. os 45.80.48.3 e 2804:f123:bebe:cafe::3)

# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
# will not ban a host which matches an address in this list. Several addresses
# can be defined using space (and/or comma) separator.
ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 200.219.148.0/24 2001:12ff::/32 2001:12f8:6::/47 45.80.48.3 2804:f123:bebe:cafe::3

Reinicie o fail2ban

# systemctl restart fail2ban

Acessando: Ferramentas Registro BR

Se o STATUS for "Autoridade sobre o domínio" parabéns suas configurações estão respondendo corretamente.

Reverso (ns1)

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

# mkdir /var/cache/bind/master-rev

O bloco 45.80.48.0/22 será necessário quebrar em 4 blocos /24 tendo uma configuração para cada /24 Como já planejado no autoritativo vamos ter que dar nomes a todos os IPs. Vale lembrar que todos esses nomes de hosts é permitido apenas um nome por IP, e cada nome desses deve ser configurado no autoritativo.

Primeiro arquivo/24 45.80.48.rev

# 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.
Outra coisa importante é o serial (2020062300) ele esta 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.

$ORIGIN .
$TTL 86400      ; 1 day
48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
                    2020062300 ; serial
                    10800      ; refresh (3 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.
0         PTR     45.80.48.0.remontti.net.br.
1         PTR     cpd.remontti.net.br.
2         PTR     ns1.remontti.net.br.
3         PTR     ns2.remontti.net.br.
4         PTR     www.remontti.net.br.
5         PTR     zabbix.remontti.net.br.
6         PTR     mail.remontti.net.br.

; Servidores não utilizados
$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 7-31   $ PTR ns-$.remontti.net.br.

$ORIGIN 48.80.45.in-addr.arpa.
$GENERATE 32-255 $ PTR 45-80-48-$.remontti.net.br.
# 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. (
                    2020062300 ; serial
                    10800      ; refresh (3 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. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; Clientes dinâmicos
$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. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; Clientes dinâmicos
$ORIGIN 51.80.45.in-addr.arpa.
$GENERATE 0-255 $ PTR 45-80-51-$.remontti.net.br.

Não podemos esquecer nosso reverso do IPv6! Antes que alguém pergunte (novamente) posso configurar o reverso de todos os IPv6? Bom você precisa saber que precisa resolver 79.228.162.514.264.337.593.543.950.336 (2^96) endereços IPv6, e isso é algo quase impossível! Informaremos apenas os nomes a ipv6 fixos.

# vim /var/cache/bind/master-rev/2000.f123.rev
$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. (
                                2020062300 ; serial
                                3600       ; refresh (1 hour)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
                        NS      ns1.remontti.net.br.
                        NS      ns2.remontti.net.br.


1.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. IN PTR cpd.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. IN 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. IN PTR ns2.remontti.net.br.
4.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. IN PTR www.remontti.net.br.
5.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. IN PTR zabbix.remontti.net.br.
6.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. IN PTR mail.remontti.net.br.

Este site http://rdns6.com/hostRecord pode ser bem útil para gerar seus PTRs.
Para finalizar acertando as permissões.

# chown  bind. /var/cache/bind/master-rev  -R

Precisamos informar nossas zonas reversas no named.conf.local, como estamos configurando nosso servidor master essas zonas serão do tipo (type) master e para informar o arquivo onde está a configuração da zone usamos o parâmetro file /caminho-completo/arquivo

# vim /etc/bind/named.conf.local

Adicione ao final do arquivo:

// Reverso IPv4

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";
};

// Reverso IPv6

zone "3.2.1.f.4.0.8.2.ip6.arpa" {
        type master;
        file "/var/cache/bind/master-rev/2804.f123.rev";
};

Para ficar fácil acesso criamos uma atalhos das nossas pastas master-* dentro de /etc/bind

# ln -s /var/cache/bind/master-aut /etc/bind/master-aut
# ln -s /var/cache/bind/master-rev /etc/bind/master-rev

Restart o serviço e veja se esta rodando sem erros.

# systemctl restart bind9
# systemctl status bind9

Vamos ver se ele já está resolvendo nosso IP então?

# dig -x 45.80.48.2 @localhost
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> -x 45.80.48.2 @localhost
;; global options: +cmd
;; Got answer:
;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 59398
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: cc1f5b76ca8135b2f442ab295d35a916dcb3bf8066886af9 (good)
;; QUESTION SECTION:
;2.48.80.45.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
2.48.80.45.in-addr.arpa. 86400  IN      PTR     ns1.remontti.net.br.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: seg jul 22 09:16:22 -03 2019
;; MSG SIZE  rcvd: 113

# dig -x 2804:f123:bebe:cafe::2 @localhost
<<>> DiG 9.11.5-P4-5.1-Debian <<>> -x 2804:f123:bebe:cafe::2 @localhost
;; global options: +cmd
;; Got answer:
;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 5580
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ec8e4c0bfbec98025b39d4965d35a90be152e9b837af0575 (good)
;; QUESTION SECTION:
;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. IN PTR

;; ANSWER SECTION:
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. 3600 IN PTR ns1.remontti.net.br.

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: seg jul 22 09:16:11 -03 2019
;; MSG SIZE  rcvd: 162

# host 45.80.48.2
2.48.80.45.in-addr.arpa domain name pointer ns1.remontti.net.br.

# host 2804:f123:bebe:cafe::2
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 domain name pointer ns1.remontti.net.br.

# host 2804:f123:bebe:cafe::1
1.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 domain name pointer cpd.remontti.net.br.

# host 45.80.48.3
3.48.80.45.in-addr.arpa domain name pointer ns2.remontti.net.br.

# host 45.80.48.10
10.48.80.45.in-addr.arpa domain name pointer serv-10.remontti.net.br.

# host 45.80.48.100
100.48.80.45.in-addr.arpa domain name pointer fixo-100.remontti.net.br.

# host 45.80.48.200
200.48.80.45.in-addr.arpa domain name pointer cgnat-200.remontti.net.br.

# host 45.80.49.0
0.49.80.45.in-addr.arpa domain name pointer noc-0.remontti.net.br.

# host 45.80.49.2
2.49.80.45.in-addr.arpa domain name pointer noc-2.remontti.net.br.

# host 45.80.49.20
20.49.80.45.in-addr.arpa domain name pointer noc-20.remontti.net.br.

# host 45.80.49.64
64.49.80.45.in-addr.arpa domain name pointer dd-64.remontti.net.br.

# host 45.80.49.128
128.49.80.45.in-addr.arpa domain name pointer 45-80-49-128.remontti.net.br.

# host 45.80.49.129
129.49.80.45.in-addr.arpa domain name pointer 45-80-49-129.remontti.net.br.

# host 45.80.50.50
50.50.80.45.in-addr.arpa domain name pointer 45-80-50-50.remontti.net.br.

# host 45.80.51.50
50.51.80.45.in-addr.arpa domain name pointer 45-80-51-50.remontti.net.br.

Como pode ver todos os endereços estão resolvendo seus nomes.

Reverso pronto!

Atualizando ROOT SERVERS

Para finalizar o master vamos fazer uma atualização no root server que na versão do debian 10 buster passou a ser /usr/share/dns/root.hints. A vesão instalada é de 13/03/2019 "last update: March 13, 2019"

Para obter uma versão mais recente, iremos mover nosso arquivo root.hints e baixar um novo.

mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`
wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints --no-check-certificate

Pode editar o arquivo /usr/share/dns/root.hints e verificar qual é a ultima atualização, (hoje 19/07/2019) ele esta: "last update: July 03, 2019". Reinicie o serviço para ter efeito.

systemctl restart bind9
systemctl status bind9

Parabéns! Seu servidor master está pronto!

SLAVE (ns2)

Praticamente o processo se repete, com algumas alterações sendo necessário apenas configurar:
named.conf (Gerar log)
named.conf.local (Incluir as zonas)
named.conf.options (Setar nossas opções)

# apt install bind9 dnsutils

Alterar o DNS do servidor:

# # echo "nameserver 127.0.0.1" > /etc/resolv.conf 
# cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp

No named.conf.options unica coisa em relação ao master é que vai alterar allow-transfer para none e remover o also-notify.

# vim /etc/bind/named.conf.options
acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.0/23;
        2804:f123::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
};

options {
    directory "/var/cache/bind";

    dnssec-enable yes;
    dnssec-validation auto;

    auth-nxdomain no;

    listen-on { any; };
    listen-on-v6 { any; };

    minimal-responses yes;

    allow-recursion {
        autorizados;
    };

    allow-query-cache {
        autorizados;
    };

    allow-query { any; };

    allow-transfer { none; };

    masterfile-format text;

    version "RR DNS Server";
};

Para organizar criamos duas pastas slave-rev e slave-aut é importante dar permissões para o usuário bind, pois ele precisa importar as configurações do master e vai escrever nelas.

# mkdir /var/cache/bind/slave-aut
# mkdir /var/cache/bind/slave-rev
# chown  bind. -R /var/cache/bind/slave-*

Não é mais necessário criar os arquivos, esses serão transferidos do servidor master. Basta informarmos em nossas zonas do arquivo named.conf.local, que serão do tipo (slave) e apontaremos o IP do master para que nosso servidor slave faça a transferência do master.

# vim /etc/bind/named.conf.local
// Reverso IPv4

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; };
};

// Reverso IPv6

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; };
};

// Zonas Slave

zone "remontti.net.br" IN {
        type slave;
        file "/var/cache/bind/slave-aut/remontti.net.br.hosts";
        masters { 45.80.48.2; };
        allow-notify { 45.80.48.2; };
};

Restart o serviço verifique se não teve nenhum erro e verifique dentro dos diretórios slave-aut/slave-rev se os arquivos foram criados.

# systemctl  restart bind9
# systemctl  status bind9
# ls -lh /var/cache/bind/slave-*

Para ficar fácil acesso criamos uma atalhos das nossas pastas slave-* dentro de /etc/bind

# ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut
# ln -s /var/cache/bind/slave-rev /etc/bind/slave-rev

Se os mesmo foram criados seu DNS já está praticamente pronto!

Volte o tutorial e refaça a parte:
- Fail2Ban + nftables
- Atualizando ROOT SERVERS
Isso é primordial para segurança do servidor!

Gostou?

Se você tiver interesse no Curso de DNS clique aqui, quem sabe você de sorte de ter uma turma aberta.

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.

Ahhh não terminei, ainda falta a configuração do nosso /28.

Reverso de blocos menores que /24 - Ex.: CIDR/28

Antes de mais nada você deve ler ao menos como foi configurado o /22, pois será necessários que você compreenda e faça também o procedimentos:
- Fail2Ban + nftables
- Atualizando ROOT SERVERS

Vamos supor que você recebeu um /28 e queira ter seu reverso respondendo sobre esses bloco.
A primeira coisa que você precisa saber que isso só será possivel se o dono do ASN fizer a configurações em seu servidor DNS (rfc2317), não basta ele simplismente ir la no registro.br e delegar esse /28 para você, e é claro que ele também precisa fazer isso!
Se ficar em dúvidas recomendo ver que assista: DNS e DNS Reverso (~20min fala sobre isso)

Então se você é o responsável pelo ASN você deve fazer o seguinte na configuração no seu arquivo reverso. No exemplo anterior deixamos já o 45.80.49.64/26 para esses casos, e no exemplo vamos delegar um /28 para o "Provedor do José".

$ ipcalc  45.80.49.64/28
Address:   45.80.49.64          00101101.01010000.00110011.0100 0000
Netmask:   255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard:  0.0.0.15             00000000.00000000.00000000.0000 1111
=>
Network:   45.80.49.64/28       00101101.01010000.00110011.0100 0000
HostMin:   45.80.49.65          00101101.01010000.00110011.0100 0001
HostMax:   45.80.49.78          00101101.01010000.00110011.0100 1110
Broadcast: 45.80.49.79          00101101.01010000.00110011.0100 1111
Hosts/Net: 14                    Class A
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. (
                    2020062300 ; serial
                    10800      ; refresh (3 hours)
                    3600       ; retry (1 hour)
                    2419200    ; expire (4 weeks)
                    300        ; minimum (5 minutes)
                    )
                NS      ns1.remontti.net.br.
                NS      ns2.remontti.net.br.

; NOC (Gerência)
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 0-63 $ PTR noc-$.remontti.net.br.

; Clientes delegação

;  <<64-79>> /28
; Aponte para os DNS do Servidor
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.

; Clientes delegação (reservado)
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 80-127 $ PTR dd-$.remontti.net.br.

; Clientes dinâmicos
$ORIGIN 49.80.45.in-addr.arpa.
$GENERATE 128-255 $ PTR 45-80-49-$.remontti.net.br.

Configuração feita pelo o dono do ASN, vamos as configurações do José que recebeu o bloco /28, e quer seus DNS respondendo por eles. Vamos supor que 45.80.49.66 e 45.80.49.67 sejam seu servidores DNS Master/Slave.

# mkdir /var/cache/bind/master-aut
# mkdir /var/cache/bind/master-rev

:: Autoritativo ::

vim /var/cache/bind/master-aut/provedordojose.com.br.hosts
$ORIGIN .
$TTL 86400      ; 1 day
provedordojose.com.br        IN SOA  ns1.provedordojose.com.br. root.provedordojose.com.br. (
                2020062300 ; serial
                10800      ; refresh (3 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.68
            MX      10 mail.provedordojose.com.br.
      TXT     "v=spf1 a mx ip4:45.80.49.68?all"

$ORIGIN provedordojose.com.br.
$TTL 10800      ; 3 hours

45-80-49-64     A       45.80.49.64
cpd         A       45.80.49.65
ns1         A       45.80.49.66
ns2         A       45.80.49.67
mail        A       45.80.49.68
zabbix        A       45.80.49.69
45-80-49-70     A       45.80.49.70
45-80-49-71     A       45.80.49.71
45-80-49-72     A       45.80.49.72
45-80-49-73     A       45.80.49.73
45-80-49-74     A       45.80.49.74
45-80-49-75     A       45.80.49.75
45-80-49-76     A       45.80.49.76
45-80-49-77     A       45.80.49.77
45-80-49-78     A       45.80.49.78
45-80-49-79     A       45.80.49.79

:: Reverso ::

vim /var/cache/bind/master-rev/45.80.49.64-79.rev
; 45.80.49.64/28
$TTL 1h
@               IN      SOA     ns1.provedordojose.com.br. root.provedordojose.com.br. (
                        2020062300 ; serial
                        2h         ; refresh
                        15m        ; update retry
                        2w         ; expiry
                        3h         ; nx = nxdomain ttl
                        )

        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     cpd.provedordojose.com.br.
66      IN      PTR     ns1.provedordojose.com.br.
67      IN      PTR     ns2.provedordojose.com.br.
68      IN      PTR     mail.provedordojose.com.br.
69      IN      PTR     zabbix.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.

:: Zonas ::

# vim /etc/bind/named.conf.local
zone "provedordojose.com.br" {
  type master;
  file "/var/cache/bind/master-aut/provedordojose.com.br.hosts";
};

zone "64/28.49.80.45.in-addr.arpa" {
        type master;
        file "/var/cache/bind/master-rev/45.80.49.64-79.rev";
};
# systemctl  restart bind9
# systemctl  status bind9

Dica extra - Ativando um proxy DNS

Vamos supor que você deseja fazer as consultar DNS em um DNS como o 8.8.8.8 entre outros em vezes de ir direto aos roots como seria?

# vim /etc/bind/named.conf.options
acl autorizados {
        127.0.0.1;
        ::1;
        45.80.48.0/23;
        2804:f123::/32;
        192.168.0.0/16;
        172.16.0.0/12;
        100.64.0.0/10;
        10.0.0.0/8;
};
 
options {
    directory "/var/cache/bind";
 
    dnssec-enable yes;
    dnssec-validation auto;
 
    auth-nxdomain no;
 
    listen-on { any; };
    listen-on-v6 { any; };
 
    // DNS PROXY
    // Em vez de ir pedir aos roots servers irá buscar de outros DNS.
    recursion yes;
    forwarders {
        8.8.8.8;
        1.1.1.1;
        1.0.0.1;
        8.8.4.4;
    };
    forward only;

    minimal-responses yes;
 
    allow-recursion {
        autorizados;
    };
 
    allow-query-cache {
        autorizados;
    };
 
    allow-query { any; };
 
    allow-transfer { none; };
 
    masterfile-format text;
 
    version "RR DNS Server";
};

Gostou?

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.

Abraço!

Rudimar Remontti

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

Você pode gostar...

102 Resultados

  1. Igor disse:

    Um dúvida, me perdoem a ignorância, comecei agora com linux e tenho um servidor parado em casa.
    Gostaria de usar como DNS seguindo esses passos.
    Eu preciso de um IP dedicado?
    Posso apenas usar meus IPV4 local?
    Ou devo usar o IPV4 do meu provedor?
    Meu provedor também tem um DNS caso seja possivel usar o deve posso vir a ter problemas?

  2. iManjate disse:

    Meus parabens pelo excelente material.

  3. Francisco César disse:

    Rudimar bom dia,
    Seu eu configurar o proxy DNS ele vai sempre encaminhar para os encaminhadores tipo 8.8.8.8 ou 1.1.1.1 ? Ou não ele tenta resolver com o que está em cache e nos root-servers e caso negativo ele manda para os encaminhadores.
    Obrigado desde já e parabéns.

  4. felipe disse:

    bom dia amigo! poderia min fala o porque das seguintes msg no comando (systemctl status bind9).

    jul 30 10:40:19 server named[16554]: REFUSED unexpected RCODE resolving ‘cl4.g.a
    aplimg.com/TYPE65/IN’: 208.67.222.222#53
    jul 30 10:42:28 server named[16554]: REFUSED unexpected RCODE resolving ‘p45-con
    tent.icloud.com/TYPE65/IN’: 208.67.220.220#53
    jul 30 10:42:29 server named[16554]: REFUSED unexpected RCODE resolving ‘content
    .fe.apple-dns.net/TYPE65/IN’: 208.67.220.220#53
    jul 30 10:42:29 server named[16554]: REFUSED unexpected RCODE resolving ‘pancake
    .cdn-apple.com.akadns.net/TYPE65/IN’: 208.67.220.220#53
    jul 30 10:42:29 server named[16554]: REFUSED unexpected RCODE resolving ‘pancake
    .g.aaplimg.com/TYPE65/IN’: 208.67.220.220#53
    jul 30 10:47:26 server named[16554]: validating service2.br.incognia.com/A: no v
    alid signature found
    jul 30 10:47:32 server named[16554]: REFUSED unexpected RCODE resolving ‘r5—sn
    -pmcg-bg0l.googlevideo.com.meuintelbras.local/A/IN’: 1.0.0.1#53
    jul 30 10:47:33 server named[16554]: REFUSED unexpected RCODE resolving ‘i.insta
    gram.com.meuintelbras.local/A/IN’: 1.0.0.1#53
    jul 30 10:47:35 server named[16554]: REFUSED unexpected RCODE resolving ‘www.mya
    ppswizard.com.br.meuintelbras.local/A/IN’: 1.0.0.1#53
    jul 30 10:50:18 server named[16554]: validating h8j6j53.x.incapdns.net/A: no val
    id signature found

    sao erros, ou seria normau isso?
    grato amigo, fica na paz.

  5. ppcarvalhof disse:

    Tutorial 100% “felomenal”!!! Parabéns!

    Estou com uma (única) dificuldade no meu DNS. Consigo respostas PTR para endereços de hosts em IPv6 normalmente (quando indico os 128 bits) mas, não consigo gerar uma entrada para responder PTR para um prefixo inteiro (por exemplo 2001:db0:cafe::/64). É possível? No v4 eu segui a sugestão do ‘$GENERATE’ e funciona a contento. No v6… rs

  6. 0penS0urc3 disse:

    Tópico show de bola so tem 1 problema que não foi mencionado

    mesmo usando o nftables e todo o aparato de seguranca o seu servidor recursivo ainda fica exposto a ataques de amplificacão de DNS vindo de fora da sua rede, com algum IP seu autorizado nas ACLs em spoof, ou algum IP seu autorizado efetuando ataque de DNS amplificado..

    O correto é usar 2 servidores distindos, um servidor Autoritário em máquina fisica ou virtual OS Separado onde você desabilita a funcão recursion.. setado como NO.

    e depois criar o dns recursivo separado com as ACls autorizando somente os seus IPs , e depois vai trabalhar com o modelo de VIEWS..
    VIEWS interna e externa.. o modeo externo em options configurar como recursion-allow { no };

    e nas view interna setar como recursion-allow { yes };

    no geral o restante está tudo correto.

    • Faz um tutorial e compartilha com a comunidade tchê! Abraço.

      • 0p3nS0urc3 disse:

        Buenas.. apenas fiz um adicional ao seu tópico que está completo..

        outra coisa que notei foi que os IPs internos privados não são filtrados no queries.logs e clients.logs.. pelos ips privados internos, mas sim pelo IP publico gateway então a partida não tem como filtrar allow-recursion { autorizados;} ; porque não funciona todos os outros IPs externos que chegam de fora da sua rede.. 44.xx.xx.xx 65.xx.x.x.xx eles entram como requisisão pelo 45.80.48.1 gateway…

        fiz os testes aqui montei o setup e segui os seus passos no tutorial umpor um só mudei os ips publicos por nossos ips do ASN.. o restante fiz igual.. e quando vejo nos logs as requesicões externas que não deveriam ter autorizacão das allow-recursion estava passando pelo IP do gateway… como o IP do gateway está habilitado na lista bloco autorizados e também no firewal nftables.. e fail2ban com o bloco autorizado pra comunicacão logo a partida todo o restante ficou inviabilizado.. sem contar que os ips internos locais sequer aparecem no log apenas o IP do gateway.. enquanto que todos os outros clientes com IPs publicos do bloco autorizado aparece a requesicão como IP publico separado.. e não o gateway.. como aparece nos ips externos e nos ips internos privados..

        Mas como falei show de bola o seu tutorial.. elucida muita coisa.

  7. jhonatan disse:

    Bom dia.
    O servidor Master esta ok ! mais não consigo subir o Slave.
    ja tentei de varias formas, me retorna esta mensagem na tela.

    /etc/bind/named.conf.local:208: writeable file ‘/var/cache/bind/slave-rev/131.0.187.rev’: already in use: /etc/bind/named.conf.local:140

  8. Arthur disse:

    Já refiz esse tutorial 10x, e nunca consegui autoridade no registro.br, é como se faltasse alguma coisa sempre. :/

    • Qual erro? Chaga lá no grupo do telegram e manda print q a galera ajuda.

    • 0p3ns0urc3 disse:

      Sim falta.. você tem que retirar os DNS servidores do registro.br.. lá no dominio em editar e apontar ele para os seus DNS servidores que terminou de configurar, aguardar umas horas e esperar até ser atualizado.. depois efetue os testes novamente que volta a funcionar.

      caso de outro tipo de resposta como desconhecido , verifique os passos 1 por 1..

  9. Isaac disse:

    Olá Rudimar, muito bom seu material, está de parabéns.

    Segui seu tutorial com o objetivo de anunciar os reversos no registro.br. Mas não funcionou.

    Quando vou registrar volta a seguinte mensagem:

    O Servidor 1 contém erros:
    1xx.x7.191.in-addr.arpa – DNS desconhecido

    Nos testes na maquina local:

    root@srv3:/var/cache/bind/master-rev# dig -x 191.x7.1xx @localhost

    ; <> DiG 9.11.5-P4-5.1+deb10u2-Debian <> -x 191.x7.1xx @localhost
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16379
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ; COOKIE: 5ff367704856f53c686bc738602e707e6fb5288ca1999f81 (good)
    ;; QUESTION SECTION:
    ;1xx.x7.191.in-addr.arpa. IN PTR

    ;; AUTHORITY SECTION:
    1xx.x7.191.in-addr.arpa. 300 IN SOA ns1.meudominio.com.br. hostmaster.meudominio.com.br. 2021021702 10800 3600 2419200 300

    ;; Query time: 20 msec
    ;; SERVER: ::1#53(::1)
    ;; WHEN: qui fev 18 10:49:50 -03 2021
    ;; MSG SIZE rcvd: 153

    Poderia ajudar com alguma dica do que pode estar acontecendo?

    Grato.

  10. MS Santos disse:

    Opa rudimar

    Estou lendo e estudando mais sobre o assunto, mais fiquei com uma dúvida o que exatamente essa instrução faz no arquivo remontti.net.br.host

    $ORIGIN remontti.net.br.
    $GENERATE 7-31 ns-$ A 45.80.48.$

    $ORIGIN remontti.net.br.
    $GENERATE 32-255 45-80-48-$ A 45.80.48.$

    $ORIGIN remontti.net.br.
    $GENERATE 0-255 45-80-49-$ A 45.80.49.$

    $ORIGIN remontti.net.br.
    $GENERATE 0-255 45-80-50-$ A 45.80.50.$

    $ORIGIN remontti.net.br.
    $GENERATE 0-255 45-80-51-$ A 45.80.51.$

  11. Alexandre de Moraes disse:

    ótimo tutorial
    muito obrigado
    só faltou o dnssec.

  12. Fabio disse:

    Boa tarde, quero lhe agradecer por disponibilizar um conteúdo de qualidade, seguindo seu tutorial, consegui implementar o servidor corretamente.

    Gostaria de saber se é possível configurar zonas reversas e hyperlocal ao mesmo tempo.

    • Fabio disse:

      Consegui configurar o hyperlocal alterando o para dentro do view no named.conf a configuração do reverso e comentando a linha # include “/etc/bind/named.conf.local”;

  13. Maycon disse:

    Quando executo o comando named-checkzone ele exibe a msg “bash: named-checkzone: comando não encontrado”
    Já reinstalei o Debian conforme o tutorial https://blog.remontti.com.br/2966 já reinstalei o bind9 e o dnsutils.

    Tentei o Debian 10.5 e o 10.6 e o meu repositório é o deb.debian.org.

  14. Bom dia! excelente tutorial, eu estou com um pequeno problema, o que acontece quando faço a pesquisa no registro.BR está dando erro de DNS. O que eu posso fazer para resolver ?
    Outro item eu uso uma hospedagem e o domínio do uolhost daria algum problema, tenho que fazer alguma modificação na minha linha de código ?

  15. Miguel disse:

    Parabéns pelo excelente post! estou com um problema no reverso, quando testo no site exemplo meuip nunca diz o meu reverso, pode ser o Fail2ban ou nftables?

  16. Fernando Hermann disse:

    Parabéns
    Ótimo material.

  17. Excelente material.
    Preciso adicionar um host no dns recursivo, pois este host só existe dentro da minha rede
    nao gostaria de adiciona-lo no autoritativo pois ele informa o mesmo para todos os raiz e é um ip privado e “secreto”.
    Tentei adicionar no /etc/hosts e nao deu.
    Onde seria o local mais correto e principalmente funcional ?

  18. Arthur Bernardes disse:

    Somente agradecer pelo seu blog que muito agrega em nossa comunidade e também pelo curso de DNS, participei dele e aprendi muita coisa nova! Parabéns!

  19. Olá Rudimar, tudo bom?

    Por favor, estou iniciando um Data Center para Hospedagem e Web Service. Para isso, preciso montar um DNS server.

    É tranquilo deixar os 3 serviços DNS rodando na mesma máquina?
    Se sim, tem ideia do hardware que preciso? O que é mais necessário, Processador e/ou Memória RAM?

    Desde já, agradeço a resposta.

  20. Danilo Favacho disse:

    Olá Rudimar, criei o arquivo de zona do dominio.com.br e fiz o apontamento no named.conf.local (master e slave), mas quando vou mudar os servidores de DNS no registro.br ele dá tempo esgotado no servidor Slave. Você sabe o que pode ser? Obrigado.

    • Verifica se o fail2ban não dropou o ip do registro.br por algum erro de digitação. (vou atualizar o tutorial incluindo os ips do registro para o fail2ban ignorar)

    • Atualização no tutorial:
      Para ignorar os ips do Registro.br pois muitas pessoas acabam configurando errado seu DNS e na hora de verificar acabam bloqueando o registro.br (Isso acontece porque quando você for validar se o seu DNS não estiver certo, ele vai achar que o registro.br esta tentando resolver o “dominio qualquer” que você não é autoritativo), para isso faça:

      # vim /etc/fail2ban/jail.conf

      Localize “ignoreip =” e adicione os blocos do registro.br (200.160.0.0/20 e 2001:12ff::/32) se desajar pode incluir seu bloco de ips dos servidores, principalmente o ip do servidor Slave para evitar que ele também seja bloqueado (no meu ex. os 45.80.48.3 e 2804:f123:bebe:cafe::3)

      # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
      # will not ban a host which matches an address in this list. Several addresses
      # can be defined using space (and/or comma) separator.
      ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 2001:12ff::/32  45.80.48.3 2804:f123:bebe:cafe::3

      Reinicie o fail2ban

      # systemctl restart fail2ban
  21. Danilo Favacho disse:

    Bom dia. Gostaria de agradecer pelo excelente tutorial e ótima didática. Fiz tudo e funcionou perfeitamente. Só estou em dúvida agora como faço para adicionar outros domínios nesse servidor DNS para que ele controle sobre os mesmos. Desde já agradeço o espaço.

  22. Leonardo disse:

    Como monitorar o bind9 com o zabbix?

  23. Pedro disse:

    Boa noite consigo rodar 2 instancias do bind9 na mesma máquina, meu poweredge é uma versão mais antiga que não suporta vm

    porém tenho 4 placas intel giga onde gostaria de adicionar o slave ns2, já tenho ns1 configurado e funcionando

  24. Analberto Rodrigues disse:

    Excelente, fiz praticamente um copy and paste, alterando só o ip, funcionou perfeito de primeira. Usei o debian 10.

  25. Ismael Melo disse:

    Boa tarde, muito bom conteúdo assim que poder estarei contribuindo.

  26. Rafael disse:

    Muito bom, parabéns.

  27. Excelente material Rudimar.
    Você possui algo relacionado a DNS Anycast?

  28. Lucas disse:

    olá, me chamo lucas e gosto muito do conteúdo no seu site, porém tiver problemas para configurar o dns server e não estou conseguindo identificar o que é, poderia me ajudar? eu até consegui delegar meu bloco ip no registro para os dois servidores porem não está resolvendo o reverso e parece que meu master deu algum problema quando subi o secundário. eu faço o teste pelo ipok.com.br meu domínio é connectt.net.br poderia me dar uma luz pra eu tentar resolver?

  29. wedson R. disse:

    Primeiro parabéns pelo excelente artigo irei seguir ao pé da letra. Minha pergunta é a seguinte: em um ambiente virtualizado quanto de memoria dedico ou não seria viavel usar uma vm ? pergunto isso pois temos um bom hardware parado e desejamos subir um vmware.

  30. Boa noite Rudimar! SImplesmente, me deixou confuso um ponto que não consigo discernir por conta.
    Sou recém formado em gestão de Redes de Computadores, mas o nosso maior foco foi ITIL e Governança. Peguei esse post para treinar.
    Primeira dúvida…. todos esses IPs que você relacionou…. são IPs públicos???
    Segunda dúvida… Caso os IPs sejam IPs internos, tirando a parte de desbloqueio de portas junto ao provedor, o que tenho em mãos é um domínio na GoDaddy. Dentro desse tutorial maravilhoso, onde eu ajusto para que as coisas funcionem???

  31. Madson disse:

    Muito bom, o que eu mais gostei é que não é só uma passo a passo explica muito bem!

  32. diego disse:

    não consigo prosseguir, esta dando esse erro quando reinicio o dns, eu removi a parte do IPv6 porque não uso;
    e pulei a parte do fail2ban + nftables

    zone xxx.xxx.45.in-addr.arpa/IN: loading from master file /var/cache/bind/master-rev/45.xx.xx.rev failed: unexpected end of input

  33. Junior disse:

    O fail2ban sempre fica bloqueando meu próprio bloco de ip, revo os bloqueados e retorna bloquear depois de algum tempo, teria como setar todo o bloco /22 para não ter esse bloqueio pelo fail2ban.
    No mais excelente tutorial, como todos os outros de seu Blog. Parabéns.

    • Sim, em /etc/fail2ban/jail.conf opção ignoreip, mas se ele ta bloqueando é pq vc não autorizou o bind a resolver para seu bloco, não vai solucionar o problema. certifique-se que na sua acl autorizados tenha todos seus prefixos.

      • Giorgio Lago disse:

        Revi o tutorial inteiro, estou com o mesmo problema só usando o ignoreip que parou de bloquear meu bloco, no mais ta muito perfeito o tutorial ! vc sabe o que pode ser ?

  34. Vinicius Cunha disse:

    Excelente o conteúdo.
    Estou encontrando um probleminha no meu Reverso. Em todos os sites que testo(IP-OK dentre outros) acusa que meu reverso está errado (Erro ao consultar reverso para o IP xx.xxx.xxx.xx Valor solicitado não existe. (NXDOMAIN)”
    Porém, todos os testes sugeridos( dig-x e host) logo acima responderam corretamente, inclusive no Slave.
    Os endereços já estão setados no registro.br e possuo autoridade no domínio. O que será que deixei passar?

  35. Ferreira disse:

    Hardware adequado para fazer esse servidor?

  36. Allan disse:

    Bom dia Rudimar,

    Desde já muito obrigado pelo excelente material.

    Me deparei com um problema e ainda não consegui resolver ao testar o dominio com “# dig ANY ns1.remontti.net.br @localhost” (alterei para o meu dominio) ele não conseguiu resolver, me retornou o erro abaixo:

    root@dns-1:/home/allan# dig ANY ns1.sejalev.com.br @localhost
    ;; Connection to ::1#53(::1) for ns1.sejalev.com.br failed: connection refused.

    ; <> DiG 9.11.5-P4-5.1-Debian <> ANY ns1.sejalev.com.br @localhost
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30770
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ; COOKIE: 7551395d84b22fa0a2a3a0ba5d988b00f73afb8f2059641b (good)
    ;; QUESTION SECTION:
    ;ns1.sejalev.com.br. IN ANY

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: sáb out 05 09:22:24 -03 2019
    ;; MSG SIZE rcvd: 75

    root@dns-1:/home/allan#

    Alguma luz?

  37. Jucimar Banowski disse:

    Parabéns pelo tutorial… Consigo deixar o autoritativo em um serviço de hospedagem por exemplo e o Reverso e Recursivo no meu servidor? Sendo que é um domínio apenas… (empresa.com.br);

  38. Daniel Gattai disse:

    Boa noite, Rudimar, muito bom material ficou otimo, te perguntar estou tentando colocar o DNSSEC, na serviço criado encima do tutorial mais quando vou rodar o dnssec-keygen, ele informa comando não encontrado, ja teve esse problama antes?

  39. Thiago Pinheiro disse:

    Parabéns pelo material !!….Amigo só duas duvidas, que tive lendo o conteúdo, que seria quando configurado DNS de forma Recursiva ele não procura primeiro nas Zonas (Autoritativo local) para só depois consultar os servidores Rais/ externo?….Eu consigo configurar (colocando o “*”) no CNAME para que todas as consultas recursivas apontem para um IP qualquer (A/ hostname) interno a rede /LAN ou IP na MAN/externo ?…muito obrigado e forte abraço!!…parabéns mais uma vez !!

    • Obrigado! De uma pesquisada sobre response-policy acredito que ele vai ser sua solução. Pensando aqui daria até um bom tutorial, aqui uso um dns onde “todos” os domínios (shallalist) impróprios são resolvidos por um servidor que mostra q conteúdo é inadequado.

      • Thiago Pinheiro disse:

        …muito obrigado Rudimar !!…irei olhar sim e uso facebook para salvar seu site 🙂 hehe …!!….Parabéns e perdão na demora na minha resposta , eu penso em fazer 2 Gateway na LAN e jogar todas consultas recursivas DNS interna e externa (engaiolado com OpenSUSE) a minha rede para um servidor CGI Proxy e, dele fazer as consultas nos servidores Rais….Muito obrigado mais uma vez , Rudimar !! irei acompanha-lo voce é Fera !!…

      • Por exemplo a Função desse “*” ?..ele é um coringa digamos assim para “www” ou “http” ou ainda “https://” ? ou qualquer coisa a frente dele ?……Ex: se coloco (sem aspas e parênteses) : o (“*.*.com.*” ) ,então, quer dizer que qualquer entrada que contiver pelo menos o (“.com” ) o bind resolve ?…..Grato, rudimar !!.. 🙂
        ______________________________________________________________
        $ TTL 2h; TTL padrão
        @ SOA nons.blocked.com. noemail.blocked.com. 2018031404 12h 15m 3w 2h
        @ NS nons.blocked.com

        CNAME badsite1.com.
        CNAME badsite2.com.
        * .badsite2.com CNAME.
        ______________________________________________________________
        https://cleanbrowsing.org/articles/rpz-response-policy-zones.php

        Trecho do material acima , achei na web …

        • http e https sao serviçoes (porta 80 e 443) nao tem nada haver. seria para qlqr subdomínos ex *.remontti.com.br

          • Thiago Pinheiro disse:

            Entendi, Rudimar….Acredita ser possivel uma configuração no Bind onde eu consiga apontar todas as entradas de solicitações de consultas no DNS recursivo ouvindo interno e externo a rede LAN, para resolução de nomes ? estou estudando Responde-Policy conforme me orientou , porém, eu precisaria que alguma coisa do tipo fosse configurável no Bind sem uso de ferramentas como DNSChef (ele alterar todas as entradas DNS na porta 53 apontando elas para um IP que voce quiser )……Muito obrigado, Rudimar !!..suas elucidações são de muita ajuda !!…..vou sempre acompanhar seu Blog !!…voce é Fera !!…Forte abraço !! 🙂

          • Que diabos vc ta tentando faze? É um hacker querendo direcionar tudo para algo seu? 😛

  40. JARDIEL disse:

    Tem como fazer reverso apenas com um maquina?

  41. Junior disse:

    Excelente material!!! Parabéns..
    Rudimar, na parte em que o slave tenta copiar as zonas do máster não vai.
    O fail2ban acaba bloqueando o ip do slave. Eu libero o slave no firewall, mas ele acaba voltando.
    Outro ponto é que a ferramenta do registro não confirma meu dns, esta dando tempo esgotado ou desconhecido.

  42. Excelente tutorial. Uma dúvida, você que o bind como recursivo tem desempenho melhor que o unbound.

  43. Wando Santos disse:

    Caro Rudimar Remontti, primeiramente quero parabeniza-lo pelo tutorial e pelo blog, pessoas como você que propaga conhecimento faz do mundo um lugar melhor. Também gostaria de saber qual o procedimento para que uma página web hospedada em servidores de terceiros funcione após a configuração dos servidores DNS como descrito neste tutorial. Pois, após configurar-lo e cadastrar no registro.br os ns, o site parou de funcionar.

  44. Paulo Jr Andrade disse:

    Bom dia Rudimar, primeiro parabéns pelo tutorial. Admiro muito seu trabalho e auxilio a nós pobres ignorantes rsrsrs
    Rudimar, para eu ter um autoritativo, vejo q vc setou um servidor de email… é necessário? Se sim você tem um tutorial para criar um básico, mas funcional.
    Pois já montei um autoritativo usando o metodo anterior que você postou, porem em alguns casos estou tendo retorno de erro

    ** server can’t find dns1.xxxx.com.br: NXDOMAIN

    seria falta de servidor de email ???

  45. Paulo Morais disse:

    Excelente material, muito didático parabéns pelo conteúdo, seu blog ajuda muito com tantos detalhes, espero que atualize todos os posts, gostei demais desse update para o Buster.

  1. 10 de dezembro de 2019

    […] – Saber que esse procedimento exige conhecimento 🙂 1 – Ter configurado DNS Autoritativo e Reverso sobre seus IPS. 2 – Debian 10 Buster instalação limpa 3 – Não ter seu endereço IP listado em […]

  2. 12 de março de 2020

    […] Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10… […]

  3. 8 de abril de 2020

    […] No exemplo vou configurar o apache para librespeed.remontti.com.br, logo é necessário configurar seu subdomínio “librespeed” (ou nome da sua escolha) em seu DNS Server. […]

  4. 30 de junho de 2020

    […] System SECurity extensions) em seus domínios autoritativos. Usarei um exemplo de configuração seguindo a topologia adotada já em tutoriais do bind9 publicados aqui no blog. Então neste exemplo usarei de modelo o domínios cursodns.com.br (Aproveitando fazer um […]

  5. 25 de julho de 2020

    […] Pressupõe que você tenha um servidor DNS em funcionamento (eu uso o bind9). […]

  6. 25 de agosto de 2020

    […] Instalação do servidor DNS será com base no tutorial: Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10… […]

  7. 25 de agosto de 2020

    […] WEB. logo nossos requezitos são: – Instalação Debian 10 Buster LIMPA Passo-a-passo – Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10… – Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 […]

  8. 11 de agosto de 2021

    […] Como ter diversos sub/domínios no mesmo servidor? Passo-a-passo como criar um servidor WEB Servidor DNS seguro com Bind9 Crie um subdomínio em exemplo toctoc em seu servidor DNS apontando para algum servidor web que […]

Deixe um comentário

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