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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | / ├── bin ├── boot ├── dev ├── etc ├── home ├── lib ├── lib32 ├── lib64 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── selinux ├── srv ├── sys ├── tmp ├── usr └── <strong>var ├── bind ├── dev ├── etc └── var ├── cache └── run └── bind └── run</strong> |
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.
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
Vagner, se não for pedir muito, teria como postar um zip com os arquivos de todas as aulas, tem alguns passos que eu estou tendo problemas e queria conferir com o seu.
Tem um erro no artigo nesse caminho de arquivo.
O correto é $imuxsock /var/bind/dev/log
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 ]
Junior,
Existe essa linha descomentada no seu arquivo:
$ModLoad imuxsock
A linha a ser acrescentada deve estar abaixo desta.