Você está na página 1de 34

22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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.

https://blog.remontti.com.br/3086 1/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

– 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 ::
1 root@remontti:~# apt install ipcalc
2 root@remontti:~# ipcalc 45.80.48.0/22
3 Address: 45.80.48.0 00101101.01010000.001100 00.00000000
4 Netmask: 255.255.252.0 = 22 11111111.11111111.111111 00.00000000
5 Wildcard: 0.0.3.255 00000000.00000000.000000 11.11111111
6 =>
7 Network: 45.80.48.0/22 00101101.01010000.001100 00.00000000
8 HostMin: 45.80.48.1 00101101.01010000.001100 00.00000001
9 HostMax: 45.80.51.254 00101101.01010000.001100 11.11111110
10 Broadcast: 45.80.51.255 00101101.01010000.001100 11.11111111
11 Hosts/Net: 1022 Class A

:: ip6calc ::
1 root@remontti:~# apt install python-ipaddr wget
2 root@remontti:~# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin
3 root@remontti:~# chmod +x /bin/ip6calc
4 root@remontti:~# ip6calc 2804:f123::/32
5 Address:
6 (Compressed) 2804:f123::/32
7 (Exploded) 2804:f123:0000:0000:0000:0000:0000:0000/32
8 (Binary) 0010100000000100:1111000100100011:0000000000000000:0000000000000
9 ↑ ↑ ↑ ↑ ↑ ↑
https://blog.remontti.com.br/3086 2/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
10 /1 /12 /29 /32 /48 /56
11 Address type is: global unicast
12
13 Netmask:
14 (Compressed) ffff:ffff::
15 (Exploded) ffff:ffff:0000:0000:0000:0000:0000:0000
16 (Binary) 1111111111111111:1111111111111111:0000000000000000:0000000000000
17 First address assignable:
18 (Compressed) 2804:f123::
19 (Exploded) 2804:f123:0000:0000:0000:0000:0000:0000
20 (Binary) 0010100000000100:1111000100100011:0000000000000000:0000000000000
21 Last address assignable:
22 (Compressed) 2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
23 (Exploded) 2804:f123:ffff:ffff:ffff:ffff:ffff:ffff
24 (Binary) 0010100000000100:1111000100100011:1111111111111111:1111111111111
25
26 Total number of addresses: 79228162514264337593543950336 (2^96 or 7.9e+28)
27
28 First address assignable (excluding "subnet-router anycast" of RFC 2526):
29 (Compressed) 2804:f123::1
30 (Exploded) 2804:f123:0000:0000:0000:0000:0000:0001
31 (Binary) 0010100000000100:1111000100100011:0000000000000000:0000000000000
32 Total number of addresses (Excluding "reserved" addresses): 79228162514264337593
33
34 This prefix can contain one of the following:
35 * 4294967296 (2^32 or 4.3e+09) subnets /64
36 * 16777216 (2^24 or 1.7e+07) subnets /56
37 * 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.

https://blog.remontti.com.br/3086 3/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
1 # vim /etc/network/interfaces

1 # This file describes the network interfaces available on your system


2 # and how to activate them. For more information, see interfaces(5).
3
4 source /etc/network/interfaces.d/*
5
6 # The loopback network interface
7 auto lo
8 iface lo inet loopback
9
10 # The primary network interface
11 allow-hotplug enp0s3
12 iface enp0s3 inet static
13 address 45.80.48.2/28
14 gateway 45.80.48.1
15 dns-nameservers 127.0.0.1
16 dns-search localhost
17
18 iface enp0s3 inet6 static
19 pre-up modprobe ipv6
20 address 2804:f123:bebe:cafe::2
21 netmask 64
22 gateway 2804:f123:bebe:cafe::1

MASTER (NS1)
1 # su -
2 # 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.
1 # echo "nameserver 127.0.0.1" > /etc/resolv.conf

Para descobrir se seu servidor esta resolvendo nomes use o comando dig.
1 # dig google.com @localhost

Retornará algo como:


1 [...]

https://blog.remontti.com.br/3086 4/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
2
3 ;; ANSWER SECTION:
4 google.com. 300 IN A 172.217.162.110
5
6 [...]

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/
1 # 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.
1 # cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp
2 # 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.


1 # vim /etc/bind/named.conf.options

1 // ACL "autorizados" vão ficar os ips que são autorizados a fazer


2 // consultas recursivas neste servidor.
3 // Neste caso vou incluir os ips que foram nos delegados bem como de localhost e
4 acl autorizados {
5 127.0.0.1;
6 ::1;
7 45.80.48.0/22;
8 2804:f123::/32;
9 192.168.0.0/16;
10 172.16.0.0/12;
11 100.64.0.0/10;
12 10.0.0.0/8;
13 };
14
15 options {
16 // O diretório de trabalho do servidor
17 // Quaisquer caminho não informado será tomado como padrão este diretório
18 directory "/var/cache/bind";
19
20 //Suporte a DNSSEC
21 dnssec-enable yes;

https://blog.remontti.com.br/3086 5/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
22 dnssec-validation auto;
23
24 // Conforme RFC1035
25 // https://www.ietf.org/rfc/rfc1035.txt
26 auth-nxdomain no;
27
28 // Respondendo para IPv4 e IPv6
29 // Porta 53 estará aberta para ambos v4 e v6
30 listen-on { any; };
31 listen-on-v6 { any; };
32
33 // Limitação da taxa de resposta no sistema de nomes de domínio (https://kb.
34 // Se você esta montando um servido apenas para autoritativo descomente as l
35 //rate-limit {
36 // responses-per-second 15;
37 // window 5;
38 //};
39
40 // Melhora o desempenho do servidor, reduzindo os volumes de dados de saída.
41 // O padrão BIND é (no) não.
42 minimal-responses yes;
43
44 // Especifica quais hosts estão autorizados a fazer consultas
45 // recursivas através deste servidor.
46 // Aqui que você vai informar os IPs da sua rede que você irá permitir consu
47 allow-recursion {
48 autorizados;
49 };
50
51 // Endereço estão autorizados a emitir consultas ao cache local,
52 // sem acesso ao cache local as consultas recursivas são inúteis.
53 allow-query-cache {
54 autorizados;
55 };
56
57 // Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
58 allow-query { any; };
59
60 // Especifica quais hosts estão autorizados a receber transferências de zona
61 // Seu servidor Secundário, no nosso ex vou deixar então o ips dos dois serv
62 allow-transfer {
63 45.80.48.3;
64 2804:f123:bebe:cafe::3;
65 };
66 also-notify {
67 45.80.48.3;
68 2804:f123:bebe:cafe::3;

https://blog.remontti.com.br/3086 6/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
69 };
70
71 // Esta opção faz com que o servidor slave ao fazer a transferência de zonas
72 // mastes deste servidor não compile o arquivo, assim no outro servidor o ar
73 // da zona terá um texto "puro"
74 masterfile-format text;
75
76 // Para evitar que vase a versao do Bind, definimos um nome
77 // Reza a lenda que deixar RR DNS Server seu servidor nunca sofrerá ataques.
78 version "RR DNS Server";
79 };

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.
1 # vim /etc/default/bind9

Adicione um -4 em OPTIONS.
1 OPTIONS="-u bind"
2 #para
3 OPTIONS="-4 -u bind"

1 # vim /etc/bind/named.conf.options

Altere listen-on-v6 para none.


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

Toda alteração feita no bind para ter efeito é necessário restartar o serviço.
1 # systemctl restart bind9

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


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

Para verificar se seu arquivo tem algum erro use o comando named-checkconf
1 # named-checkconf /etc/bind/named.conf.options

https://blog.remontti.com.br/3086 7/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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.
1 /etc/bind/named.conf.options:5: missing ';' before '2804:f123::'

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


1 # systemctl restart bind9
2 # systemctl status bind9

Verifique se está: “active (running)”


1 ● bind9.service - BIND Domain Name Server
2 Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en
3 Active: active (running) since Fri 2019-07-19 14:17:09 -03; 4s ago
4 Docs: man:named(8)
5 Process: 706 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=0/SUCCESS
6 Main PID: 707 (named)
7 Tasks: 4 (limit: 2359)
8 Memory: 11.9M
9 CGroup: /system.slice/bind9.service
10 └─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.
1 # 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”.
1 # vim /etc/fail2ban/jail.conf

Procure por “banaction = iptables-multiport” e “banaction_allports = iptables-allports” e altere seu valor para “nftables-allports”:
https://blog.remontti.com.br/3086 8/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
1 #banaction = iptables-multiport
2 #banaction_allports = iptables-allports
3 banaction = nftables-allports
4 banaction_allports = nftables-allports

Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um “drop all”.
1 # vim /etc/fail2ban/action.d/nftables-allports.conf

Procure por nftables_mode = meta l4proto e altere deixando seu valor vazio:
1 #nftables_mode = meta l4proto <protocol>
2 nftables_mode =

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


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

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


1 #blocktype = reject
2 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
1 - prefregex = ^%(__line_prefix)s( error:)?\s*client <HOST>#\S+( \([\S.]+\))?: <F-
2 + prefregex = ^%(__line_prefix)s( error:)?\s*client( @[0-9a-z]+)? <HOST>#\S+( \([

Porém como eu vou ser mais “bruto” no filtro. Vou criar nosso próprio filtro bind9, vamos lá!
1 # vim /etc/fail2ban/filter.d/bind9.conf

Adicone no arquivo:
1 # Fail2Ban filter file for named (bind9.11).
2 #
3
4 [Definition]
5
6 # Daemon name
7 _daemon=named

https://blog.remontti.com.br/3086 9/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
8
9 # Shortcuts for easier comprehension of the failregex
10
11 __pid_re=(?:\[\d+\])
12 __daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:?
13 __daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)
14
15 # hostname daemon_id spaces
16 # this can be optional (for instance if we match named native log files)
17 __line_prefix=(?:\s\S+ %(__daemon_combs_re)s\s+)?
18
19 prefregex = ^%(__line_prefix)s( error:)?\s*client( @[0-9a-z]+)? <HOST>#\S+( \([\
20
21 failregex = ^(view (internal|external): )?query(?: \(cache\))? '.*' denied\s*$
22 ^zone transfer '\S+/AXFR/\w+' denied\s*$
23 ^bad zone transfer request: '\S+/IN': non-authoritative zone \(NOTAU
24
25 ignoreregex =
26
27 # DEV Notes:
28 # 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.
1 # vim /etc/fail2ban/jail.d/bind9.conf

Adicione no arquivo:
1 [bind9]
2 enabled = true
3 port = domain,953
4 protocol = tcp
5 logpath = /var/log/named/security.log
6 bantime = 24h
7 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.
1 # vim /etc/bind/named.conf

1 // This is the primary configuration file for the BIND DNS server named.
2 //
3 // Please read /usr/share/doc/bind9/README.Debian.gz for information on the
https://blog.remontti.com.br/3086 10/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
4 // structure of BIND configuration files in Debian, *BEFORE* you customize
5 // this configuration file.
6 //
7 // If you are just adding zones, please do that in /etc/bind/named.conf.local
8
9 logging {
10
11 channel security_file {
12 file "/var/log/named/security.log" versions 3 size 30m;
13 severity dynamic;
14 print-time yes;
15 };
16
17 channel file_log {
18 file "/var/log/named/named.log" versions 2 size 50k;
19 severity info;
20 print-time yes;
21 print-severity yes;
22 print-category yes;
23 };
24
25 channel errors_syslog {
26 syslog daemon;
27 severity warning;
28 };
29
30 category security { security_file; };
31 category dnssec { errors_syslog; };
32 category default { file_log; };
33 category lame-servers { null; };
34 category edns-disabled { null; };
35 category resolver { null; };
36 category unmatched { null; };
37
38 };
39
40 include "/etc/bind/named.conf.options";
41 include "/etc/bind/named.conf.local";
42 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.
1 # mkdir /var/log/named/
2 # chown bind. /var/log/named/

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

https://blog.remontti.com.br/3086 11/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
1 # systemctl enable nftables
2 # systemctl restart bind9
3 # systemctl restart nftables
4 # systemctl restart fail2ban

Para visualizar seu firewall use o comando:


1 # nft list ruleset

Note que ja temos alguns IPs sendo dropado por tentativas de consulta no DNS e SSH.
1 table inet filter {
2 set f2b-sshd {
3 type ipv4_addr
4 elements = { 92.63.194.90, 142.44.130.186,
5 191.54.227.13 }
6 }
7
8 set f2b-bind9 {
9 type ipv4_addr
10 elements = { 71.6.199.23, 185.94.111.1 }
11 }
12
13 chain input {
14 type filter hook input priority 0; policy accept;
15 ip saddr @f2b-bind9 drop
16 ip saddr @f2b-sshd drop
17 }
18
19 chain forward {
20 type filter hook forward priority 0; policy accept;
21 }
22
23 chain output {
24 type filter hook output priority 0; policy accept;
25 }
26 }

Alguns comandos legais do fail2ban


1 # fail2ban-client status

Veja quais filtros estão ativos


1 Status
2 |- Number of jail: 2
https://blog.remontti.com.br/3086 12/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
3 `- Jail list: bind9, sshd

1 fail2ban-client status NOME_FILTRO

Ex:
1 # fail2ban-client status bind9
2 Status for the jail: bind9
3 |- Filter
4 | |- Currently failed: 0
5 | |- Total failed: 2
6 | `- File list: /var/log/named/security.log
7 `- Actions
8 |- Currently banned: 2
9 |- Total banned: 2
10 `- Banned IP list: 71.6.199.23 185.94.111.1
11
12 # fail2ban-client status sshd
13 Status for the jail: sshd
14 |- Filter
15 | |- Currently failed: 0
16 | |- Total failed: 0
17 | `- File list: /var/log/auth.log
18 `- Actions
19 |- Currently banned: 3
20 |- Total banned: 3
21 `- Banned IP list: 142.44.130.186 191.54.227.13 92.63.194.90

Para remover um IP que foi bloqueado basta:


1 # 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.
1 No meu exemplo vai ficar assim:
2 - 45.80.48.0/27 - Servidores
3 - 45.80.48.32/27 - Roteamento
4 - 45.80.48.64/26 - Clientes com IP Fixo
5 - 45.80.48.128/25 - CGNAT
6 - 45.80.49.0/26 - NOC (Gerência)

https://blog.remontti.com.br/3086 13/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
7 - 45.80.49.64/26 - Clientes Delegação
8 - 45.80.49.128/25 - Clientes dinâmico
9 - 45.80.50.0/24 - Clientes dinâmico
10 - 45.80.51.0/24 - Clientes dinâmico
11
12 # Quebrei meu ex de forma q não fique simples para que possamos dar nomes sugest

Para ficar organizado vou criar a pasta master-aut onde ficará os arquivos de hosts dos domínios autoritativos.
1 # 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.
1 # vim /var/cache/bind/master-aut/remontti.net.br.hosts

1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 remontti.net.br IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br.
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10
11 NS ns1.remontti.net.br.
12 NS ns2.remontti.net.br.
13
14 A 45.80.48.4
15 AAAA 2804:f123:bebe:cafe::4
16 MX 10 mail.remontti.net.br.
17 TXT "v=spf1 a mx -all"
18 SPF "v=spf1 a mx -all"
19 $ORIGIN remontti.net.br.
20 $TTL 10800 ; 3 hours
21
22 45-80-48-0 A 45.80.48.0
23 45-80-48-1 A 45.80.48.1
24 AAAA 2804:f123:bebe:cafe::1
25
26 ns1 A 45.80.48.2
27 AAAA 2804:f123:bebe:cafe::2
28 hostmaster A 45.80.48.2
29 AAAA 2804:f123:bebe:cafe::2
30 ns2 A 45.80.48.3
31 AAAA 2804:f123:bebe:cafe::3

https://blog.remontti.com.br/3086 14/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
32
33 www A 45.80.48.4
34 AAAA 2804:f123:bebe:cafe::4
35 ftp A 45.80.48.4
36 AAAA 2804:f123:bebe:cafe::4
37
38 zabbix A 45.80.48.5
39 AAAA 2804:f123:bebe:cafe::5
40 phpipam A 45.80.48.5
41 AAAA 2804:f123:bebe:cafe::5
42
43 mail A 45.80.48.6
44 AAAA 2804:f123:bebe:cafe::6
45 imap A 45.80.48.6
46 AAAA 2804:f123:bebe:cafe::6
47 pop A 45.80.48.6
48 AAAA 2804:f123:bebe:cafe::6
49 smtp A 45.80.48.6
50 AAAA 2804:f123:bebe:cafe::6
51
52 $ORIGIN remontti.net.br.
53 $GENERATE 7-31 ns-$ A 45.80.48.$
54
55 $ORIGIN remontti.net.br.
56 $GENERATE 32-255 45-80-48-$ A 45.80.48.$
57
58 $ORIGIN remontti.net.br.
59 $GENERATE 0-255 45-80-49-$ A 45.80.49.$
60
61 $ORIGIN remontti.net.br.
62 $GENERATE 0-255 45-80-50-$ A 45.80.50.$
63
64 $ORIGIN remontti.net.br.
65 $GENERATE 0-255 45-80-51-$ A 45.80.51.$

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


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

Adicione ao final do arquivo:


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

https://blog.remontti.com.br/3086 15/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

De permissões ao diretório/arquivo criados


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

Restart o serviço.
1 # systemctl restart bind9

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


1 # dig ANY remontti.net.br @localhost

1 ; <<>> DiG 9.11.5-P4-5.1-Debian <<>> ANY remontti.net.br @localhost


2 ;; global options: +cmd
3 ;; Got answer:
4 ;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 52255
5 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1
6
7 ;; OPT PSEUDOSECTION:
8 ; EDNS: version: 0, flags:; udp: 4096
9 ; COOKIE: 3148faada350a11c7aeaf3835d32238e495995289566b021 (good)
10 ;; QUESTION SECTION:
11 ;remontti.net.br. IN ANY
12
13 ;; ANSWER SECTION:
14 remontti.net.br. 86400 IN SOA ns1.remontti.net.br. hostmaster.
15 remontti.net.br. 86400 IN NS ns2.remontti.net.br.
16 remontti.net.br. 86400 IN NS ns1.remontti.net.br.
17 remontti.net.br. 86400 IN A 45.80.48.4
18 remontti.net.br. 86400 IN AAAA 2804:f123:bebe:cafe::4
19 remontti.net.br. 86400 IN MX 10 mail.remontti.net.br.
20 remontti.net.br. 86400 IN TXT "v=spf1 a mx -all"
21
22 ;; Query time: 0 msec
23 ;; SERVER: ::1#53(::1)
24 ;; WHEN: sex jul 19 17:09:50 -03 2019
25 ;; MSG SIZE rcvd: 263

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

https://blog.remontti.com.br/3086 16/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
6 # host ns1.remontti.net.br
7 ns1.remontti.net.br has address 45.80.48.2
8 ns1.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::2
9
10 # host ns2.remontti.net.br
11 ns2.remontti.net.br has address 45.80.48.3
12 ns2.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::3
13
14 # host mail.remontti.net.br
15 mail.remontti.net.br has address 45.80.48.6
16 mail.remontti.net.br has IPv6 address 2804:f123:bebe:cafe::6
17
18 # host zabbix.remontti.net.br
19 zabbix.remontti.net.br has address 45.80.48.5
20 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:
1 # 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)
1 # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
2 # will not ban a host which matches an address in this list. Several addresses
3 # can be defined using space (and/or comma) separator.
4 ignoreip = 127.0.0.1/8 ::1 200.160.0.0/20 2001:12ff::/32 45.80.48.3 2804:f123:be

Reinicie o fail2ban
1 # systemctl restart fail2ban

Acessando: Ferramentas Registro BR

https://blog.remontti.com.br/3086 17/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

https://blog.remontti.com.br/3086 18/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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.
1 # 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


1 # 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.
1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 48.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13 $ORIGIN 48.80.45.in-addr.arpa.
14 0 PTR 45.80.48.0.remontti.net.br.
15 1 PTR cpd.remontti.net.br.
16 2 PTR ns1.remontti.net.br.
17 3 PTR ns2.remontti.net.br.
18 4 PTR www.remontti.net.br.
19 5 PTR zabbix.remontti.net.br.
20 6 PTR mail.remontti.net.br.
21

https://blog.remontti.com.br/3086 19/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
22 ; Servidores não utilizados
23 $ORIGIN 48.80.45.in-addr.arpa.
24 $GENERATE 7-31 $ PTR ns-$.remontti.net.br.
25
26 $ORIGIN 48.80.45.in-addr.arpa.
27 $GENERATE 32-255 $ PTR 45-80-48-$.remontti.net.br.

1 # vim /var/cache/bind/master-rev/45.80.49.rev

1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13 $ORIGIN 49.80.45.in-addr.arpa.
14 $GENERATE 0-255 $ PTR 45-80-49-$.remontti.net.br.

1 # vim /var/cache/bind/master-rev/45.80.50.rev

1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13 ; Clientes dinâmicos
14 $ORIGIN 50.80.45.in-addr.arpa.
15 $GENERATE 0-255 $ PTR 45-80-50-$.remontti.net.br.

1 # vim /var/cache/bind/master-rev/45.80.51.rev

1 $ORIGIN .
2 $TTL 86400 ; 1 day

https://blog.remontti.com.br/3086 20/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
3 51.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13 ; Clientes dinâmicos
14 $ORIGIN 51.80.45.in-addr.arpa.
15 $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.
1 # vim /var/cache/bind/master-rev/2000.f123.rev

1 $ORIGIN .
2 $TTL 3600 ; 1 hour
3 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. ho
4 2020062300 ; serial
5 3600 ; refresh (1 hour)
6 900 ; retry (15 minutes)
7 604800 ; expire (1 week)
8 3600 ; minimum (1 hour)
9 )
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13
14 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
15 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
16 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
17 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
18 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
19 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

Este site http://rdns6.com/hostRecord pode ser bem útil para gerar seus PTRs.
Para finalizar acertando as permissões.
1 # chown bind. /var/cache/bind/master-rev -R

https://blog.remontti.com.br/3086 21/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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
1 # vim /etc/bind/named.conf.local

Adicione ao final do arquivo:


1 // Reverso IPv4
2
3 zone "48.80.45.in-addr.arpa" {
4 type master;
5 file "/var/cache/bind/master-rev/45.80.48.rev";
6 };
7
8 zone "49.80.45.in-addr.arpa" {
9 type master;
10 file "/var/cache/bind/master-rev/45.80.49.rev";
11 };
12
13 zone "50.80.45.in-addr.arpa" {
14 type master;
15 file "/var/cache/bind/master-rev/45.80.50.rev";
16 };
17
18 zone "51.80.45.in-addr.arpa" {
19 type master;
20 file "/var/cache/bind/master-rev/45.80.51.rev";
21 };
22
23 // Reverso IPv6
24
25 zone "3.2.1.f.4.0.8.2.ip6.arpa" {
26 type master;
27 file "/var/cache/bind/master-rev/2804.f123.rev";
28 };

Para ficar fácil acesso criamos uma atalhos das nossas pastas master-* dentro de /etc/bind
1 # ln -s /var/cache/bind/master-aut /etc/bind/master-aut
2 # ln -s /var/cache/bind/master-rev /etc/bind/master-rev

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


1 # systemctl restart bind9
2 # systemctl status bind9

https://blog.remontti.com.br/3086 22/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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


1 # dig -x 45.80.48.2 @localhost
2 ; <<>> DiG 9.11.5-P4-5.1-Debian <<>> -x 45.80.48.2 @localhost
3 ;; global options: +cmd
4 ;; Got answer:
5 ;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 59398
6 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
7
8 ;; OPT PSEUDOSECTION:
9 ; EDNS: version: 0, flags:; udp: 4096
10 ; COOKIE: cc1f5b76ca8135b2f442ab295d35a916dcb3bf8066886af9 (good)
11 ;; QUESTION SECTION:
12 ;2.48.80.45.in-addr.arpa. IN PTR
13
14 ;; ANSWER SECTION:
15 2.48.80.45.in-addr.arpa. 86400 IN PTR ns1.remontti.net.br.
16
17 ;; Query time: 0 msec
18 ;; SERVER: ::1#53(::1)
19 ;; WHEN: seg jul 22 09:16:22 -03 2019
20 ;; MSG SIZE rcvd: 113
21
22 # dig -x 2804:f123:bebe:cafe::2 @localhost
23 <<>> DiG 9.11.5-P4-5.1-Debian <<>> -x 2804:f123:bebe:cafe::2 @localhost
24 ;; global options: +cmd
25 ;; Got answer:
26 ;; ->HEADER<- opcode: QUERY, status: NOERROR, id: 5580
27 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
28
29 ;; OPT PSEUDOSECTION:
30 ; EDNS: version: 0, flags:; udp: 4096
31 ; COOKIE: ec8e4c0bfbec98025b39d4965d35a90be152e9b837af0575 (good)
32 ;; QUESTION SECTION:
33 ;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 PT
34
35 ;; ANSWER SECTION:
36 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 I
37
38 ;; Query time: 0 msec
39 ;; SERVER: ::1#53(::1)
40 ;; WHEN: seg jul 22 09:16:11 -03 2019
41 ;; MSG SIZE rcvd: 162
42
43 # host 45.80.48.2
44 2.48.80.45.in-addr.arpa domain name pointer ns1.remontti.net.br.
45

https://blog.remontti.com.br/3086 23/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
46 # host 2804:f123:bebe:cafe::2
47 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
48
49 # host 2804:f123:bebe:cafe::1
50 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
51
52 # host 45.80.48.3
53 3.48.80.45.in-addr.arpa domain name pointer ns2.remontti.net.br.
54
55 # host 45.80.48.10
56 10.48.80.45.in-addr.arpa domain name pointer serv-10.remontti.net.br.
57
58 # host 45.80.48.100
59 100.48.80.45.in-addr.arpa domain name pointer fixo-100.remontti.net.br.
60
61 # host 45.80.48.200
62 200.48.80.45.in-addr.arpa domain name pointer cgnat-200.remontti.net.br.
63
64 # host 45.80.49.0
65 0.49.80.45.in-addr.arpa domain name pointer noc-0.remontti.net.br.
66
67 # host 45.80.49.2
68 2.49.80.45.in-addr.arpa domain name pointer noc-2.remontti.net.br.
69
70 # host 45.80.49.20
71 20.49.80.45.in-addr.arpa domain name pointer noc-20.remontti.net.br.
72
73 # host 45.80.49.64
74 64.49.80.45.in-addr.arpa domain name pointer dd-64.remontti.net.br.
75
76 # host 45.80.49.128
77 128.49.80.45.in-addr.arpa domain name pointer 45-80-49-128.remontti.net.br.
78
79 # host 45.80.49.129
80 129.49.80.45.in-addr.arpa domain name pointer 45-80-49-129.remontti.net.br.
81
82 # host 45.80.50.50
83 50.50.80.45.in-addr.arpa domain name pointer 45-80-50-50.remontti.net.br.
84
85 # host 45.80.51.50
86 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!

https://blog.remontti.com.br/3086 24/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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.
1 mv /usr/share/dns/root.hints /usr/share/dns/root.hints.`date +%Y%m%d`
2 wget https://www.internic.net/domain/named.root -O /usr/share/dns/root.hints --no

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.
1 systemctl restart bind9
2 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)
1 # apt install bind9 dnsutils

Alterar o DNS do servidor:


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

1 # 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.
1 # vim /etc/bind/named.conf.options

1 acl autorizados {
2 127.0.0.1;
3 ::1;
4 45.80.48.0/23;
https://blog.remontti.com.br/3086 25/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
5 2804:f123::/32;
6 192.168.0.0/16;
7 172.16.0.0/12;
8 100.64.0.0/10;
9 10.0.0.0/8;
10 };
11
12 options {
13 directory "/var/cache/bind";
14
15 dnssec-enable yes;
16 dnssec-validation auto;
17
18 auth-nxdomain no;
19
20 listen-on { any; };
21 listen-on-v6 { any; };
22
23 minimal-responses yes;
24
25 allow-recursion {
26 autorizados;
27 };
28
29 allow-query-cache {
30 autorizados;
31 };
32
33 allow-query { any; };
34
35 allow-transfer { none; };
36
37 masterfile-format text;
38
39 version "RR DNS Server";
40 };

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.
1 # mkdir /var/cache/bind/slave-aut
2 # mkdir /var/cache/bind/slave-rev
3 # 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
https://blog.remontti.com.br/3086 26/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

transferência do master.
1 # vim /etc/bind/named.conf.local

1 // Reverso IPv4
2
3 zone "48.80.45.in-addr.arpa" {
4 type slave;
5 file "/var/cache/bind/slave-rev/45.80.48.rev";
6 masters { 45.80.48.2; };
7 allow-notify { 45.80.48.2; };
8 };
9
10 zone "49.80.45.in-addr.arpa" {
11 type slave;
12 file "/var/cache/bind/slave-rev/45.80.49.rev";
13 masters { 45.80.48.2; };
14 allow-notify { 45.80.48.2; };
15 };
16
17 zone "50.80.45.in-addr.arpa" {
18 type slave;
19 file "/var/cache/bind/slave-rev/45.80.50.rev";
20 masters { 45.80.48.2; };
21 allow-notify { 45.80.48.2; };
22 };
23
24 zone "51.80.45.in-addr.arpa" {
25 type slave;
26 file "/var/cache/bind/slave-rev/45.80.51.rev";
27 masters { 45.80.48.2; };
28 allow-notify { 45.80.48.2; };
29 };
30
31 // Reverso IPv6
32
33 zone "3.2.1.f.4.0.8.2.ip6.arpa" {
34 type slave;
35 file "/var/cache/bind/slave-rev/2804.f123.rev";
36 masters { 45.80.48.2; };
37 allow-notify { 45.80.48.2; };
38 };
39
40 // Zonas Slave
41
42 zone "remontti.net.br" IN {

https://blog.remontti.com.br/3086 27/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
43 type slave;
44 file "/var/cache/bind/slave-aut/remontti.net.br.hosts";
45 masters { 45.80.48.2; };
46 allow-notify { 45.80.48.2; };
47 };

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.
1 # systemctl restart bind9
2 # systemctl status bind9
3 # ls -lh /var/cache/bind/slave-*

Para ficar fácil acesso criamos uma atalhos das nossas pastas slave-* dentro de /etc/bind
1 # ln -s /var/cache/bind/slave-aut /etc/bind/slave-aut
2 # 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.

https://blog.remontti.com.br/3086 28/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

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é”.
1 $ ipcalc 45.80.49.64/28
2 Address: 45.80.49.64 00101101.01010000.00110011.0100 0000
3 Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
4 Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111
5 =>
6 Network: 45.80.49.64/28 00101101.01010000.00110011.0100 0000
7 HostMin: 45.80.49.65 00101101.01010000.00110011.0100 0001
8 HostMax: 45.80.49.78 00101101.01010000.00110011.0100 1110
9 Broadcast: 45.80.49.79 00101101.01010000.00110011.0100 1111
10 Hosts/Net: 14 Class A

1 vim /var/cache/bind/master-rev/45.80.49.rev

1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 49.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. (
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
https://blog.remontti.com.br/3086 29/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
10 NS ns1.remontti.net.br.
11 NS ns2.remontti.net.br.
12
13 ; NOC (Gerência)
14 $ORIGIN 49.80.45.in-addr.arpa.
15 $GENERATE 0-63 $ PTR noc-$.remontti.net.br.
16
17 ; Clientes delegação
18
19 ; <<64-79>> /28
20 ; Aponte para os DNS do Servidor
21 64/28 NS ns1.provedordojose.com.br
22 64/28 NS ns2.provedordojose.com.br
23 ;
24 64 CNAME 64.45/28.49.80.45.in-addr.arpa.
25 65 CNAME 65.45/28.49.80.45.in-addr.arpa.
26 66 CNAME 66.45/28.49.80.45.in-addr.arpa.
27 67 CNAME 67.45/28.49.80.45.in-addr.arpa.
28 68 CNAME 68.45/28.49.80.45.in-addr.arpa.
29 69 CNAME 69.45/28.49.80.45.in-addr.arpa.
30 70 CNAME 70.45/28.49.80.45.in-addr.arpa.
31 71 CNAME 71.45/28.49.80.45.in-addr.arpa.
32 72 CNAME 72.45/28.49.80.45.in-addr.arpa.
33 73 CNAME 73.45/28.49.80.45.in-addr.arpa.
34 74 CNAME 74.45/28.49.80.45.in-addr.arpa.
35 75 CNAME 75.45/28.49.80.45.in-addr.arpa.
36 76 CNAME 76.45/28.49.80.45.in-addr.arpa.
37 77 CNAME 77.45/28.49.80.45.in-addr.arpa.
38 78 CNAME 78.45/28.49.80.45.in-addr.arpa.
39 79 CNAME 79.45/28.49.80.45.in-addr.arpa.
40
41 ; Clientes delegação (reservado)
42 $ORIGIN 49.80.45.in-addr.arpa.
43 $GENERATE 80-127 $ PTR dd-$.remontti.net.br.
44
45 ; Clientes dinâmicos
46 $ORIGIN 49.80.45.in-addr.arpa.
47 $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.
1 # mkdir /var/cache/bind/master-aut
2 # mkdir /var/cache/bind/master-rev

https://blog.remontti.com.br/3086 30/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti

:: Autoritativo ::
1 vim /var/cache/bind/master-aut/provedordojose.com.br.hosts

1 $ORIGIN .
2 $TTL 86400 ; 1 day
3 provedordojose.com.br IN SOA ns1.provedordojose.com.br. root.provedordoj
4 2020062300 ; serial
5 10800 ; refresh (3 hours)
6 3600 ; retry (1 hour)
7 2419200 ; expire (4 weeks)
8 300 ; minimum (5 minutes)
9 )
10
11 NS ns1.provedordojose.com.br.
12 NS ns2.provedordojose.com.br.
13
14 A 45.80.49.68
15 MX 10 mail.provedordojose.com.br.
16 TXT "v=spf1 a mx ip4:45.80.49.68?all"
17
18 $ORIGIN provedordojose.com.br.
19 $TTL 10800 ; 3 hours
20
21 45-80-49-64 A 45.80.49.64
22 cpd A 45.80.49.65
23 ns1 A 45.80.49.66
24 ns2 A 45.80.49.67
25 mail A 45.80.49.68
26 zabbix A 45.80.49.69
27 45-80-49-70 A 45.80.49.70
28 45-80-49-71 A 45.80.49.71
29 45-80-49-72 A 45.80.49.72
30 45-80-49-73 A 45.80.49.73
31 45-80-49-74 A 45.80.49.74
32 45-80-49-75 A 45.80.49.75
33 45-80-49-76 A 45.80.49.76
34 45-80-49-77 A 45.80.49.77
35 45-80-49-78 A 45.80.49.78
36 45-80-49-79 A 45.80.49.79

:: Reverso ::
1 vim /var/cache/bind/master-rev/45.80.49.64-79.rev

https://blog.remontti.com.br/3086 31/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
1 ; 45.80.49.64/28
2 $TTL 1h
3 @ IN SOA ns1.provedordojose.com.br. root.provedordojose.c
4 2020062300 ; serial
5 2h ; refresh
6 15m ; update retry
7 2w ; expiry
8 3h ; nx = nxdomain ttl
9 )
10
11 IN NS ns1.provedordojose.com.br.
12 IN NS ns2.provedordojose.com.br.
13
14 $ORIGIN 64/28.49.80.45.in-addr.arpa.
15 64 IN PTR 45-80-49-64.provedordojose.com.br.
16 65 IN PTR cpd.provedordojose.com.br.
17 66 IN PTR ns1.provedordojose.com.br.
18 67 IN PTR ns2.provedordojose.com.br.
19 68 IN PTR mail.provedordojose.com.br.
20 69 IN PTR zabbix.provedordojose.com.br.
21 70 IN PTR 45-80-49-70.provedordojose.com.br.
22 71 IN PTR 45-80-49-71.provedordojose.com.br.
23 72 IN PTR 45-80-49-72.provedordojose.com.br.
24 73 IN PTR 45-80-49-73.provedordojose.com.br.
25 74 IN PTR 45-80-49-74.provedordojose.com.br.
26 75 IN PTR 45-80-49-75.provedordojose.com.br.
27 76 IN PTR 45-80-49-76.provedordojose.com.br.
28 77 IN PTR 45-80-49-77.provedordojose.com.br.
29 78 IN PTR 45-80-49-78.provedordojose.com.br.
30 79 IN PTR 45-80-49-79.provedordojose.com.br.

:: Zonas ::
1 # vim /etc/bind/named.conf.local

1 zone "provedordojose.com.br" {
2 type master;
3 file "/var/cache/bind/master-aut/provedordojose.com.br.hosts";
4 };
5
6 zone "64/28.49.80.45.in-addr.arpa" {
7 type master;
8 file "/var/cache/bind/master-rev/45.80.49.64-79.rev";
9 };

1 # systemctl restart bind9


https://blog.remontti.com.br/3086 32/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
2 # 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?
1 # vim /etc/bind/named.conf.options

1 acl autorizados {
2 127.0.0.1;
3 ::1;
4 45.80.48.0/23;
5 2804:f123::/32;
6 192.168.0.0/16;
7 172.16.0.0/12;
8 100.64.0.0/10;
9 10.0.0.0/8;
10 };
11
12 options {
13 directory "/var/cache/bind";
14
15 dnssec-enable yes;
16 dnssec-validation auto;
17
18 auth-nxdomain no;
19
20 listen-on { any; };
21 listen-on-v6 { any; };
22
23 // DNS PROXY
24 // Em vez de ir pedir aos roots servers irá buscar de outros DNS.
25 recursion yes;
forwarders {
26
8.8.8.8;
27
1.1.1.1;
28 1.0.0.1;
29 8.8.4.4;
30 };
31 forward only;
32
33 minimal-responses yes;
34
allow-recursion {
https://blog.remontti.com.br/3086 33/34
22/03/2021 Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster - Remontti
35 autorizados;
36 };
37
38 allow-query-cache {
39 autorizados;
40 };
41
42 allow-query { any; };
43
44 allow-transfer { none; };
45
46 masterfile-format text;
47
48 version "RR DNS Server";
49 };
50
51

https://blog.remontti.com.br/3086 34/34

Você também pode gostar