Segurança no DNS
O Domain Name System (DNS) é um sistema hierárquico para resolução de nomes na Internet ou em uma rede privada. Os servidores DNS traduzem nomes de domínio em endereços IP, dessa forma você só precisa se lembrar de nomes, como cristian.sh
ou google.com
, para acessar um host.
BIND
O BIND (Berkeley Internet Name Domain) é o servidor de DNS mais utilizado hodiernamente e considerado o padrão para sistemas Unix. Sua instalação pode ser realizada via yum
:
Arquivos e diretórios importantes:
/etc/named.conf: principal arquivo de configuração.
/var/named: diretório que contém as zonas de DNS.
/var/named/data/named.run: arquivo de logs.
Por padrão o BIND funciona em modo caching-only, realizando consultas e salvando os resultados em memória. Você pode testar o seu servidor com os seguintes comandos:
Configurações importantes
O arquivo named.conf
possui algumas configurações fundamentais, entre elas:
listen-on: indica a interface na qual o BIND aceitará consultas.
allow-query: indica quem pode realizar consultas.
allow-transfer: indica quais servidores (slaves) podem realizar transferências de zonas. Essa é uma configuração de segurança importante, visto que um atacante pode forçar uma transferência de zona para enumerar informações sobre o nosso domínio. Portanto, sempre indique servidores confiáveis nessa configuração.
Exemplo de configuração:
Note como estão configuradas as opções citadas anteriormente. Nelas especificamos apenas dispositivos autorizados. Além disso, estamos definindo uma zona chamada site1.com.br
, cujo arquivo de configuração deverá ser criado em /var/named/site1.com.br.zone
.
Você pode utilizar o comando named-checkconf
para verificar se a sua configuração está correta.
Exemplo de zona
A seguir está um exemplo para a zona site1.com.br
.
Reinicie o BIND:
É importante notar que alterações nesse arquivo requerem um incremento no serial.
Você pode utilizar o comando named-checkzone site1.com.br /var/named/site1.com.br.zone
para testar a sua configuração.
Testando a resolução de nomes
Você pode testar a resolução de nomes por meio dos comandos dig
, host
ou nslookup
. Uma prática interessante é adicionar o seu servidor no arquivo /etc/resolv.conf
para facilitar os testes (nameserver 10.10.10.237
).
DNSSEC
O DNSSEC (Domain Name System Security Extensions) torna o processo de resolução de nomes mais seguro, reduzindo o risco de manipulação de dados e domínios forjados.
Para habilitar o recurso de DNSSEC, primeiro precisamos gerar uma chave:
-a: especifica o algoritmo de criptografia a ser utilizado.
-b: especifica o tamanho da chave a ser gerada.
-r /dev/urandom: define a entropia utilizada para gerar as chaves. No caso, utilizaremos números aleatórios definidos pelo
/dev/urandom
.-n ZONE: indica que iremos gerar uma assinatura de zona.
O arquivo .key gerado deve ser inserido nas configurações da sua zona.
Após isso, utilize o comando dnssec-signzone
para assinar a zona com a chave privada. Em cenários reais, as informações do arquivo dsset deverão ser inseridas no seu registrar.
O resultado do comando será um arquivo com a extensão .signed
no diretório /var/named
. Você deverá alterar o seu named.conf
para o BIND utilize esse novo arquivo. Teste a configuração com o comando dig
:
Enjaulamento do servidor de DNS
Enjaular o servidor de DNS é uma boa prática, pois evita que um atacante tenha acesso ao sistema de arquivos real do Linux no caso da exploração de alguma vulnerabilidade. Para que isso seja feito no BIND, é necessário instalar o pacote bind-chroot
:
Agora precisamos desativar o BIND atual e ativar o processo named-chroot
:
Conclusão
Neste capítulo, exploramos importantes aspectos de segurança no servidor de DNS BIND, com foco em boas práticas de configuração, a implementação do DNSSEC e enjaulamento. Ao abordar esses tópicos, buscamos fortalecer a segurança da infraestrutura DNS, tornando-a mais resistente a ameaças e protegendo a integridade e autenticidade das informações transmitidas.
Last updated