DNS – Melhorando a Segurança com o Bind


Continuando nossa saga do DNS perfeito ;-), vamos melhorar um pouco a segurança do Servidor Bind com alterações na seção de Options e fazendo o serviço ser executado enjaulado.

Temos agora um servidor funcional com separação por views, mas o serviço ainda pode ficar melhor, primeiro vamos editar o arquivo named correspondente( /etc/named.conf no Red Hat ou /etc/bind/named.conf.options no Debian) e dentro da seção options acrescentar as seguintes opções:
version “Não te interessa” ;
datasize 256M;

Assim esconderemos a versão do Bind, isso evita que descubram a versão do nosso servidor o utilizem algum exploit que explore alguma vulnerabilidade do Bind, e limita o uso de memória RAM para 256 MB para que o DNS quando em muito uso não esgote os recursos da máquina.
Vamos incrementar a segurança fazendo nosso DNS rodar em uma jaula. O concento de chroot, ou ser executado em jaula, é de que o programa ao ser executado entenda que o diretório onde ele está sendo executado é o raiz do sistema (/), assim ele “esquece” qualquer coisa que seja fora de seu diretório de funcionamento. No Red Hat podemos na instalação já colocar o Bind em chroot.
Ao configurar o Bind para funcionar em chroot no diretório /var/named:

O Bind entende que apenas do diretório /var/bind para frente é que “existe” o sistema, como ele desconsidera o resto, ainda que um atacante conseguisse derrubar o Bind e ganhasse acesso à área de memória não teria acesso ao Sistema real, apenas ao que o Bind “acreditar” ser o sistema, ou seja, apenas do /var/bind para frente.
Vamos à criação da jaula:
Primeiro vamos parar o serviço:
root # /etc/init.d/bind9 stop
Depois edite o arquivo de opções do script de inicialização, e altere a variável OPTIONS de:
OPTIONS=”-u bind”
Para:
OPTIONS=”-u bind -t /var/bind”
Agora vamos criar os diretórios que o Bind vai precisa para funcionar dentro da jaula:
root# mkdir -p /var/bind/{dev,etc,var/{cache,run/bind/run}}
Criados os diretórios devemos mover as configurações que temos dentro do /etc e do /var/cache para o diretório da jaula:
root# mv /etc/bind /var/bind/etc
root# mv /var/cache/bind /var/bind/var/cache/

Para continuar a manter o DNS nos mesmos diretórios que usávamos antes, vamos criar links simbólicos para que os novos diretórios com os nomes dos diretórios antigos:
root# ln -s /var/bind/etc/bind /etc/bind
root# ln -s /var/bind/var/cache/bind /var/cache/bind

Agora vamos criar os dispositivos do dev para que o Bind possa descartar informações (/dev/null) e sobrescrever dados com caracteres aleatórios (/dev/random):
root# mknod /var/bind/dev/null c 1 3
root# mknod /var/bind/dev/random c 1 8

Agora vamos corrigir as permissões e as propriedades dos diretórios para o usuário e grupo bind:
chmod 666 /var/bind/dev/null /var/bind/dev/random
chown -R bind:bind /var/bind/var/*
chown -R bind:bind /var/bind/etc/bind

Basta agora que editemos o servidor de Log para que possa capturar os logs gerados pelo Bind, já que mudamos o diretório de funcionamento do serviço ele não usa mais o /dev/log, usa agora o /var/bind/dev/log. Edite o arquivo /etc/rsyslog.conf e coloque esta linha abaixo da linha $ModLoad imuxsock:
$imuxsock /var/bind/dev/log
Feito isso basta reiniciar os serviços:
root# /etc/init.d/rsyslog restart
root# /etc/init.d/bind9 restart

Pronto temos agora um servidor que roda isolado no sistema, assim ele vai ser mais seguro mesmo em caso de ataques ou invasões pelo serviço.
Continuem comentando e votando em nosso Portal.

    Comments

    1. Vagner, fiz o que vc informou e no log está aparecendo o seguinte:
      rsyslogd: the last error occured in /etc/rsyslog.conf, line 12:”$imuxsock /var/lib/named/dev/log”
      rsyslogd-2124: CONFIG ERROR: could not interpret master config file ‘/etc/rsyslog.conf’. [try http://www.rsyslog.com/e/2124 ]
      Já verifiquei 2x as configurações
      Obrigado
      Junior

    2. Vagner, ainda está com erro:
      rsyslogd: the last error occured in /etc/rsyslog.conf, line 12:”$imuxsock /var/bind/dev/log”
      Nov 14 11:04:43 ns1 rsyslogd-2124: CONFIG ERROR: could not interpret master config file ‘/etc/rsyslog.conf’. [try http://www.rsyslog.com/e/2124 ]

    Deixe uma resposta

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

    © 2019 All Rights Reserved. Cooperati. 

    Deseja uma consultoria especializada?