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.