Como instalar e configurar servidor DNS Recursivo com Bind 9 e seguro com Debian

Servidor DNS Recursivo com Bind 9 e seguro com Debian

Servidor DNS Recursivo com Bind 9 e seguro com Debian

Este artigo contempla a instalação e configuração de um servidor DNS Recursivo utilizando o Bind de modo seguro com Debian 8/9, protegido contra ataques através da ferramenta fail2ban.

O que é DNS RECURSIVO?

O DNS recursivo é responsável por procurar os endereços IPs de servidor que você solicitou acesso. Exemplo o DNS que esta configurado na sua máquina.

Vamos iniciar com a instalação do nosso servidor DNS Recursivo, lembrando que para isso estou usando a Distribuição Linux Debian 8/9, com processo de instalação do sistema básico.

Instalação servidor DNS Bind no Debian

# apt install bind9 dnsutils
Depois dos comando acima, o nosso servidor recursivo já está funcionando, porém ele está aberto, isto é, ele está neste momento configurado como um DNS PÚBLICO, assim como por exemplo os servidores de DNS do Googe (8.8.8.8 ou 8.8.4.4.). Você não vai querer qualquer um utilizando seu servidor para resolver nomes. Vamos resolver isso de forma bem simples.

Antes de mais nada vamos alterar o DNS do nosso servidor fazendo com que ele consulte em si próprio. Essa alteração deve ser feita no arquivo /etc/resolv.conf, eu irei utilizar o editor vim, mas fique a vontade de usar o seu preferido.

vim  /etc/resolv.conf
Altere para:

nameserver 127.0.0.1
search localhost

Feito isso você, como forma de testar a alteração, faça um ping para um domínio e verifique se ele resolveu o host.

Configuração DNS BIND no DEBIAN

Vamos começar acessando nosso diretório de instalação do Bind que fica em /etc/bind/

cd /etc/bind
As configurações principal é armazenado nos seguintes arquivos:
named.conf
named.conf.local
named.conf.options

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 vamos fazer um backup antes de modifica-lo.

cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bkp

Agora vamos as alterações, vou deixar explicado como comentários dentro no nosso arquivo.

vim /etc/bind/named.conf.options

// ACL “permite-recursiva” vão ficar os hosts estão autorizados a fazer
// consultas recursivas através deste servidor.
acl permite-recursiva {
127.0.0.1;
::1;
192.168.0.0/16;
172.16.0.0/12;
10.0.0.0/8;
};

options {
// O diretório de trabalho do servidor
// Quaisquer caminho não informado será tomado como  padrão este directó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 (DNS RRL)
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 {
permite-recursiva;
};

// 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 {
permite-recursiva;
};

// Especifica quais hosts estão autorizados a fazer perguntas DNS comuns.
allow-query { any; };

// Esta opção faz com que o servidor slave ao fazer a transferência de zonas
// master 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 vaze a versão do Bind, definimos um nome
version “RR DNS Server”;
};

Pronto nosso servidor Recursivo já está funcionando! Caso você não queria seu servidor sendo recursivo apenas altere allow-recursion e allow-query-cache para apenas localhost.

Agora precisamos apenas dar um restart no bind para que as opções tenham efeito.

/etc/init.d/bind9 restart

Camada de Segurança no DNS BIND

As consultas recursivas são fechada para outros IPs que não esteja na sua ACL permitidos, porém esses IPs tem resposta com negação. Para visualizar esses logs faça o seguinte:

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;
};
category security {
security_file;
};
};

include “/etc/bind/named.conf.options”;
include “/etc/bind/named.conf.local”;

Agora crie o diretório que ficarão os logs e de permissão:

mkdir /var/log/named/
chown bind. /var/log/named/
/etc/init.d/bind9 restart

Agora quando alguém não autorizado tentar usar seu DNS será gerado um log.

Agora vamos a instalação do fail2ban para coloca ordem na casa.

apt install fail2ban

Vamos habilitar o modulo para começar a proteção, vale lembrar que o modulo SSH já vem ativo por padrão.

Debian 9

vim /etc/fail2ban/jail.d/defaults-debian.conf
[sshd]
enabled = true

[named-refused]
enabled = true

Debian 8 altere as linhas no arquivo /etc/fail2ban/jail.conf.

Caso receba um ataque massivo, sugiro que altere o padrão para DROP.

vim /etc/fail2ban/action.d/iptables-multiport.conf

Procure:

actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
# Altere para:
actionban = iptables -A INPUT -s <ip> -j DROP

actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>
# Altere para:
actionunban = iptables -D INPUT -s <ip> -j DROP

Agora reinicie o serviço

/etc/init.d/fail2ban restart

Os IPs que tiverem tentando usar seu DNS serão avisado 5x depois serão bloqueados pelo DROP.

Para ver as regras do iptables use:

iptables -nL

Dica ROOT servers e keys atualizado

Atualize os root servers ele é a alma do seu servidor.

mv /etc/bind/db.root /etc/bind/db.root.`date +%Y%m%d`
wget https://www.internic.net/domain/named.root -O /etc/bind/db.root –no-check-certificate
mv /etc/bind/bind.keys /etc/bind/bind.keys.`date +%Y%m%d`
wget https://ftp.isc.org/isc/bind9/keys/9.11/bind.keys.v9_11 -O /etc/bind/bind.keys –no-check-certificate

/etc/init.d/bind9 restart

Dica de leitura:
https://pt.wikipedia.org/wiki/Servidor-raiz

 

Não tem IPv6 configurado?

Se seu servidor não tiver IPv6 configurado recomendo que desative o ipv6 no bind (o que é triste) mas se não tem…

vim /etc/default/bind9

em OPTIONS=”-u bind” adicione um -4 OPTIONS=”-4 -u bind”

vim /etc/bind/named.conf.options

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

Pronto!!! Agora foi implantado um servidor de DNS de forma segura em sua rede.

Os links abaixo irão ampliar seu conhecimento sobre este assunto, sendo uma fonte excelente de conhecimento.

Lista dos servidores DNS para 2019

Quais as chances de sua empresa estar vulnerável a um ataque de DNS?

Sair da versão mobile