Servidores de DNS: Boas práticas

Servidores de DNS são pontos importantes na rede pois realizam a conversão de nomes para IPs e vice versa. A má configuração ou apenas a utilização default dessa aplicação pode representar riscos ao serviço que ele oferece.

Servidores de DNS podem ser de dois tipos:

Autoritativo: que é responsável por manter os mapas referentes a uma zona local e responder a requisições vindas de máquinas de todo o mundo, que precisarem resolver nomes de domínio da zona sobre a qual este servidor tem autoridade;
Recursivo: que é responsável por receber as consultas DNS dos clientes locais e consultar os servidores externos, de modo a obter respostas às consultas efetuadas.

É importante que os servidores DNS estejam configurados afim de exercerem os papéis acima de forma correta. Um servidor recursivo, por exemplo, não deve receber consultas fora da sua rede local e um servidor autoritativo não deveria responder consultas sobre ips ao qual não possui autoridade.

Dois problemas comuns em servidores desse tipo são:

Permitir que IPs que não pertençam à rede do DNS realizem consultas recursivas, de forma que o servidor responda qualquer consulta a qualquer IP, inclusive aquelas que ele não deveria responder.
Permitir que o servidor de DNS resolva qualquer endereço para qualquer máquina na internet.

A existencia dessas más configurações podem facilitar a ação de usuários maliciosos, tais como envenenamento de cache (cache poisoning), que levam o servidor recursivo a armazenar informações forjadas. Ou seja, direcionar clientes do servidor para sites falsos e direcionar o servidor para desferir ataques de negação de serviço distribuídos (DDoS), enviando requisições falsas e direcionando as respostas do servidor de DNS para outros IPs.

Abaixo são apresentadas possibilidades de configuração para resolver esse tipo de problema em servidores de DNS.

Soluções para Linux

As soluções abaixo são para servidores que utilizam BIND.

Solução 1: Utilizando views.

Essa solução é utilizada em casos que o servidor de DNS em questão funciona como autoritativo (para responder requisições externas) e recursivo (para responder requisições internas) ao mesmo tempo.
Esse modelo tem por objetivo separar os IPs no próprio arquivo afim de que cada tipo tenha um determinado tratamento destinado pela aplicação.

No arquivo named.conf realize as seguintes alterações:

// lista de redes ou maquinas que podem fazer consultas recursivas
acl clientes {
localhost;
192.0.2.64/26;
192.0.2.192/28;
};

// definicao da view interna — deve vir antes da view externa
// esta view permite recursao para as redes da acl clientes
view “interna” {
match-clients { clientes; };
recursion yes;

// dentro desta view sao colocadas as zonas padrao:
// “.”, localhost, etc, e qualquer outra zona que
// seja somente interna para a rede em questao
};

// definicao da view externa — deve ser a ultima view definida
// esta view permite consultas de qualquer rede, mas nao permite
// consultas recursivas
view “externa” {
match-clients { any; };
recursion no;
additional-from-auth no;
additional-from-cache no;

// aqui sao colocadas as zonas master
//
// zone “exemplo.com.br” {
// type master;
// file “master/exemplo.com.br”;
// };

// aqui sao colocadas as zonas slave
//
// zone “exemplo.net.br” {
// type slave;
// file “slave/exemplo.net.br”;
// masters { 192.0.2.1; […;] };
// };
};
Solução 2: Diferentes máquinas.

Essa solução é indicada quando há duas máquinas para realizar o serviço de DNS, uma para o tipo autoritativo e outro para o tipo recursivo.

No arquivo named.conf do servidor que será Autoritativo, realize as seguintes alterações:

// adicionar as diretivas abaixo dentro da clausula options
// para desabilitar recursao no servidor autoritativo
options {
recursion no;
additional-from-auth no;
additional-from-cache no;
};
Para o servidor Recursivo, no arquivo named.conf realize as seguintes alterações:

// colocar a seguinte diretiva na clausula options
// permitindo recursao
// IMPORTANTE: Esta opcao deve ser usada em conjunto com
// regras de firewall
options {
recursion yes;
};

Ainda no servidor de DNS Recursivo, configure as regras do firewall, de forma que só as máquinas das redes autorizadas consigam realizar consultas no mesmo.

Soluções para Windows

Desabilitando a Recursão em servidores Autoritativos.

Caso o servidor DNS não necessite realizar consultas recursivas, é possível desabilitá-las com o seguinte comando:

dnscmd <ServerName> /Config /NoRecursion 1

Onde:

dnscmd: Especifica o nome da ferramenta de linha de comando que gerencia o servidor DNS
<ServerName>: Nome ou IP do servidor de DNS. Para especificar o servidor na própria máquina digite apenas um ponto (.)
/Config: Especifica o quê o comando configura
/NoRecursion: Desabilita a recursão
1: Parâmetro para desabilitar a recursão. Caso deseje habilitá-la novamente, redigite o comando e troque o 1 por 0.

Gerenciando o acesso em servidores Recursivos.

Para servidores recursivos a solulção é utilizar um firewall na mesma máquina onde se encontra o serviço ou em outra máquina que esteja entre a máquina de DNS e a rede externa, afim de limitar o tráfego até o serviço de DNS. Dessa forma, as regras que devem estar contidas no firewall são:

Permissão de consultas ao servidor recursivo somente para os clientes autorizados:
Tráfego vindo dos clientes autorizados, com destino às portas 53/UDP e 53/TCP do servidor recursivo, deve ser liberado;
Permissão para o servidor recursivo consultar servidores DNS externos e receber as respostas: Tráfego originado do servidor recursivo com destino às portas 53/UDP e 53/TCP de qualquer máquina, permitindo também o retorno das respostas. Nesse caso a melhor solução é a utilização de um firewall stateful.
Bloquear quaisquer outras conexões externas ao servidor DNS recursivo.

Verificando o Problema:

É possível verificar ser o servidor de DNS ao qual se é responsável possui esse problema, o site Open Resolver Projetc além de tirar dúvidas sobre o assunto, permite verificar se o IP pertencente ao servidor de DNS está aberto a consultas recursivas para a internet.

 

 

Por Beatriz Andrade