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.

[ Hits: 4.842 ]

Por: Alex Marques em 17/02/2015


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!

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"

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.

   

Páginas do artigo
   1. Definição
Outros artigos deste autor

Configurando Zabbix 3.4 no CentOS 7

Leitura recomendada

Apache Kafka

Filtrando IPs no Debian e Ubuntu com o Mobloquer

Servidor FTP com NetBSD (PureFTPD + MySQL)

Conexão ADSL no Fedora Core

SOCKS - Acessando Hosts remotos via OpenSSH

  
Comentários
[1] Comentário enviado por wagnerfs em 18/02/2015 - 09:18h

Parabéns pelo artigo e obrigado por compartilhar o conhecimento.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782

[2] Comentário enviado por Tacioandrade em 19/02/2015 - 04:58h


Amigo valeu pelo artigo, muito simples e explicativo, só tenho uma duvida simples sobre o porque de fazer o chroot no bind. Pergunto isso pois o chrrot no ssh, ftp ou qualquer outro sistema que da acesso direto a arquivos e configurações do servidor eu compreendo a necessidade de um chroot, agora como o chroot de um serviço (que teoricamente só responde a requisições de informações de uma base de dados), é necessário.

Um forte abraço e até o próximo artigo. =)

[3] Comentário enviado por alex.deb em 19/02/2015 - 18:54h

Por omissão um servidor de DNS, que tenha um domínio cadastrado responde a outras solicitações isso o transforma em um servidor público, logo o servidor pode ser usado para ataques com "DNS poisonig' e comumente auxiliar em ataques DoS contra outros servidores.

[4] Comentário enviado por Tacioandrade em 19/02/2015 - 19:45h


[3] Comentário enviado por alex.deb em 19/02/2015 - 18:54h

Por omissão um servidor de DNS, que tenha um domínio cadastrado responde a outras solicitações isso o transforma em um servidor público, logo o servidor pode ser usado para ataques com "DNS poisonig' e comumente auxiliar em ataques DoS contra outros servidores.


Sim, porem um Bind com chroot ainda consegue fazer requisições recursivas de DNS e ser usado para ataque de DoS se for o caso ou por o chroot ser feito, esse tipo de ataque é barrado? Vou dar uma pesquisada para ver se compreendo melhor também. =)

[5] Comentário enviado por JnnCarlos em 24/06/2015 - 21:03h

/Olá amigos.

Fiz o tutorial exatamente como descrito, contudo, o meu bind9 não subia. Debugando com o syslog percebi que o bind não encontrava um diretório chamado /var/cache/bind. Como a função do chroot é "simular" uma raiz nova dentro de /var/lib/bind/, transformando esse diretório no raiz (simulando o "/"), o /var/cache/bind passava a ser /var/lib/bind/var/cache/bind.

A terceira linha da parte onde os diretórios são criados: >> mkdir -p /var/lib/bind/var/cache/bin << comeu a letra D do "BIND", criando um diretório bin sem razão, assim se você copiar e colar os comandos seu bind nunca vai subir, caso você já tenha feito esse tutorial e não está funcionando, essa pode ser a razão, vá dentro de /var/lib/bind/var/cache/ e dê o comando mv bin bind e tente novamente startar seu bind9.

Espero ter ajudado! :)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts