Enjaulando o Bind9 em um chroot
Esse artigo tem por objetivo, difundir o conhecimento de Software Livre, focado na área de segurança em um servidor DNS Bind9 Dynamic Network System. Servidor mais utilizado no mundo. Abordarei uma técnica já conhecida no mundo Open Source que irá ajudar a inciantes a compreenderem melhor o uso do chroot.
Definição
É isso mesmo, enjaulando, aprisionando. Hoje em dia, quando se fala em internet, qualquer prevenção é bem vinda no mundo cibernético, todos os anos empresas investem milhões em softwares e tecnologia de ponta para proteger a integridade de suas informações.
Contudo, ninguém está livre de possíveis ataques provenientes da internet. Sabendo-se disso, o Bind9 será configurado para trabalhar em uma área reservada, fazendo com que diminua drasticamente qualquer tipo de ataque que possa ocorrer maiores danos.
Vamos fazer uma analogia: Imagine uma casa, certo? Essa casa possui muro, portão e cerca elétrica. Isso não quer dizer que não possa ser invadida, mas diminui as chances pelo fato de existir segurança.
Nesse artigo demostro como proteger o Bind9 através de um chroot, tornando a sua "casa" um lugar mais seguro.
Fonte: Servidor Linux Guia Prático!
# apt-get install bind9
Desative-o com o comando:
# /etc/init.d/bind9 stop
Próximo passo será editar o arquivo:
# vim /etc/default/bind9
Deixe como no exemplo abaixo (essa configuração informa ao bind9 rodar em modo chroot):
Crie os diretórios e devices que serão utilizados pelo serviço do Bind9:
# mkdir -p /var/lib/bind/etc/
# mkdir /var/lib/bind/dev
# mkdir -p /var/lib/bind/var/cache/bin
# mkdir -p /var/lib/bind/var/run/bind/run
# mknod /var/lib/bind/dev/null c 1 3
# mknod /var/lib/bind/dev/random c 1 8
# chmod 666 /var/lib/bind/dev/null /var/lib/bind/dev/random
Ajuste as permissões para que o usuário do Bind9, o "bind", tenha permissão para alterar os arquivos.
# chown -R bind:bind /var/lib/bind/var/*
Migre os arquivos do diretório /etc/bind para a pasta do chroot em /var/lib/bind/etc e crie um link simbólico apontando para o diretório do chroot. E por fim, de permissão para o usuário "bind":
# mv /etc/bind /var/lib/bind/etc
# ln -s /var/lib/bind/etc/bind/ /etc/bind
# chown -R bind:bind /var/lib/bind/etc/bind
Edite o arquivo do rSylog para que continue gerando os logs do Bind9. Deixe-o como no exemplo abaixo:
# vim /etc/default/rsyslog
Reinicie os serviços:
# /etc/init.d/bind9 restart
# /etc/init.d/rsyslog restart
Verifique se está funcionando com o comando abaixo, provavelmente o servidor retorná algo como o exemplo abaixo:
# rndc status
version: 9.8.4-rpz2+rl005.12-P1
CPUs found: 1
worker threads: 1
number of zones: 18
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
Observe que ele está rodando:
server is up and running
Veja como ficaria no exemplo abaixo:
# ls -laF /etc/bind
Irá retornar:
lrwxrwxrwx 1 root root 22 Fev 9 22:01 /etc/bind -> /var/lib/bind/etc/bind/
L significa que é um link simbólico.
Destino do link simbólico criado: /etc/bind → /var/lib/bind/etc/bind/
Dessa forma, o Bind9 ficará menos vulnerável a ataques por que ele foi isolado do diretório raiz padrão do sistema.
Contudo, ninguém está livre de possíveis ataques provenientes da internet. Sabendo-se disso, o Bind9 será configurado para trabalhar em uma área reservada, fazendo com que diminua drasticamente qualquer tipo de ataque que possa ocorrer maiores danos.
Vamos fazer uma analogia: Imagine uma casa, certo? Essa casa possui muro, portão e cerca elétrica. Isso não quer dizer que não possa ser invadida, mas diminui as chances pelo fato de existir segurança.
Nesse artigo demostro como proteger o Bind9 através de um chroot, tornando a sua "casa" um lugar mais seguro.
Fonte: Servidor Linux Guia Prático!
Instalação
Primeiro instale o Bind9:# apt-get install bind9
Desative-o com o comando:
# /etc/init.d/bind9 stop
Próximo passo será editar o arquivo:
# vim /etc/default/bind9
Deixe como no exemplo abaixo (essa configuração informa ao bind9 rodar em modo chroot):
# run resolvconf?
RESOLVCONF=yes
# startup options for the server
OPTIONS="-u bind -t /var/lib/bind"
RESOLVCONF=yes
# startup options for the server
OPTIONS="-u bind -t /var/lib/bind"
Crie os diretórios e devices que serão utilizados pelo serviço do Bind9:
# mkdir -p /var/lib/bind/etc/
# mkdir /var/lib/bind/dev
# mkdir -p /var/lib/bind/var/cache/bin
# mkdir -p /var/lib/bind/var/run/bind/run
# mknod /var/lib/bind/dev/null c 1 3
# mknod /var/lib/bind/dev/random c 1 8
# chmod 666 /var/lib/bind/dev/null /var/lib/bind/dev/random
Ajuste as permissões para que o usuário do Bind9, o "bind", tenha permissão para alterar os arquivos.
# chown -R bind:bind /var/lib/bind/var/*
Migre os arquivos do diretório /etc/bind para a pasta do chroot em /var/lib/bind/etc e crie um link simbólico apontando para o diretório do chroot. E por fim, de permissão para o usuário "bind":
# mv /etc/bind /var/lib/bind/etc
# ln -s /var/lib/bind/etc/bind/ /etc/bind
# chown -R bind:bind /var/lib/bind/etc/bind
Edite o arquivo do rSylog para que continue gerando os logs do Bind9. Deixe-o como no exemplo abaixo:
# vim /etc/default/rsyslog
RSYSLOGD_OPTIONS="-a /var/lib/bind/dev/log"
Reinicie os serviços:
# /etc/init.d/bind9 restart
# /etc/init.d/rsyslog restart
Verifique se está funcionando com o comando abaixo, provavelmente o servidor retorná algo como o exemplo abaixo:
# rndc status
version: 9.8.4-rpz2+rl005.12-P1
CPUs found: 1
worker threads: 1
number of zones: 18
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
Observe que ele está rodando:
server is up and running
Conclusão
Concluindo, todas essas alterações foram feitas no diretório /etc/bind que é o padrão do Bind9. Mesmo com essas alterações, ele continuará trabalhando em /etc/bind, por que foi criado um link simbólico (lembra?) apontando para o diretório /var/lib/etc/bind/, entretanto, para o Bind9, é como se fosse no mesmo diretório, simplesmente pelo fato de ter sido criado um link simbólico.Veja como ficaria no exemplo abaixo:
# ls -laF /etc/bind
Irá retornar:
lrwxrwxrwx 1 root root 22 Fev 9 22:01 /etc/bind -> /var/lib/bind/etc/bind/
L significa que é um link simbólico.
Destino do link simbólico criado: /etc/bind → /var/lib/bind/etc/bind/
Dessa forma, o Bind9 ficará menos vulnerável a ataques por que ele foi isolado do diretório raiz padrão do sistema.
_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782