Tutorial: Enjaulando Bind9 (DNS) com Chroot
O DNS está entre os principais alvos de ataque hacker, conseguir hackear um DNS pode ser a porta de entrada para diversos ataques de outras naturezas no mesmo servidor que hospeda o serviço.
Este tutorial explica como configurar o BIND em uma “jaula”, quando executado com este método, o processo BIND é incapaz de ver qualquer parte do sistema de arquivos fora da cadeia do processo. Aos olhos do BIND, o conteúdo do diretório enjaulado parecerá / ou o diretório raiz. Todas as coisas fora desse diretório não possuirão acesso. Também será configurado para não ser executado com usuário root, para evitar que o invasor possua os poderes deste usuário.
Instalação
Realize a instalação do pacote, caso não esteja instalado:
apt-get install bind9
Por razões de segurança queremos executar DNS enjaulado, por isso temos de fazer as seguintes configurações:
/etc/init.d/bind9 stop
Edite o arquivo /etc/default/bind9 para que o daemon seja executado como o vínculo do usuário sem privilégios em /var/lib/named. Modificar a linha: OPTIONS=”-u bind” para que seja OPTIONS=”-u bind -t /var/lib/named”:
vim /etc/default/bind9
# run resolvconf?
RESOLVCONF=yes
# startup options for the server
OPTIONS="-u bind -t /var/lib/named"
Crie os diretórios necessários para guardar no /var/lib:
mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run
Em seguida, mova o diretório de configuração do /etc para /var/lib/named/etc:
mv /etc/bind /var/lib/named/etc
Criar um link simbólico para o novo diretório de configuração do local antigo (para evitar problemas ao BIND é atualizado no futuro):
ln -s /var/lib/named/etc/bind /etc/bind
Faça dispositivos nulos e aleatórios e permissões de correção dos diretórios:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind
Precisamos criar o arquivo /etc/rsyslog.d/bind-chroot.conf:
vim /etc/rsyslog.d/bind-chroot.conf
Com a seguinte linha de modo que nós ainda pode obter mensagens importantes registrados nos logs de sistema:
$AddUnixListenSocket /var/lib/named/dev/log
Reinicie o daemon:
/etc/init.d/rsyslog restart
Inicie BIND e verifique /var/log/syslog para visualizar erros:
/etc/init.d/bind9 start
Pronto, após realizar essas configurações, você terá um DNS enjaulado e seguro.