Linux – DNS cache com BIND9

Este artigo demonstra como podemos criar um DNS cache utilizando o Bind9.

Todas as informações neste artigo tiveram como base pesquisas na internet e testes reais em produção.

Para um bom entendimento do artigo é necessário que o usuário já possua algum conhecimento em linux.

DNS cache com Bind9

Distribuição utilizada: Fedora Linux 9.

Altere o hostname da máquina para o nome do seu servidor:

# vi /etc/sysconfig/network

Crie um diretório para os downloads:

# mkdir -p /downloads
# cd /downloads

1. Baixe e instale o openssl-0.9.8e:

# wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
# tar -xzvf openssl-0.9.8e.tar.gz
# cd openssl-0.9.8e
# ./config –prefix=/usr/local –openssldir=/usr/local/openssl
# make
# make test
# make install

2. Baixe e instale bind-9.5.0a6.tar.gz

# cd /downloads
# wget ftp://mirrors.24-7-solutions.net/pub/isc/bind9/9.5.0a6/bind-9.5.0a6.tar.gz
# tar xzfv bind-9.5.0a6.tar.gz
# cd bind-9.5.0a6
# ./configure –with-openssl=/usr/local/openssl –disable-ipv6 –disable-threads –prefix=/usr/local
# ./make
# ./make install

Volte para o diretório raiz:

# cd /

Remova qualquer configuração de Bind que exista:

# rm -rf /chroot/named

Crie o diretorio chroot:

# mkdir -p /chroot/named
# cd /chroot/named

Crie o usuário e o grupo named:

# groupadd named
# useradd -g named -d /chroot/named -s /bin/true named
# passwd -l named

Crie os diretórios filhos:

# mkdir dev
# mkdir etc
# mkdir logs
# mkdir -p var/run
# mkdir -p conf/secondaries

Criando os devices:

# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# mknod dev/random c 1 8

Copiando o arquivo de timezone:

# cp /etc/localtime etc

Criando link simbólico:

# ln -sf /chroot/named/etc/named.conf /etc/named.conf

Acesse o diretório /chroot/named/etc:

# cd /chroot/named/etc

Edite o arquivo named.conf e escreva as linhas abaixo:

######## named.conf ####################

acl minha-rede {
127.0.0.1;
10.10.10.0/24 ## Aqui você deve informar o endereço da sua rede ou o ip das máquinas que podem utilizar este DNS
};

options {
allow-query {minha-rede; };
allow-recursion { minha-rede; };
directory “/conf”;
pid-file “/var/run/named.pid”;
statistics-file “/var/run/named.stats”;
dump-file “/var/run/named.db”;
version “[secured]“;
listen-on-v6 { any; };
forward only;
forwarders { 0.0.0.0; 1.1.1.1; }; ## Aqui você pode colocar algum DNS para realizar um forwarders caso na queria utilizar deixe estas linhas comentadas
};

# The root nameservers
zone “.” {
type hint;
file “db.rootcache”;
};

# localhost – forward zone
zone “localhost” {
type master;
file “db.localhost”;
notify no;
};

# localhost – inverse zone
zone “0.0.127.in-addr.arpa” {
type master;
file “db.127.0.0″;
notify no;
};

Certifique se que sua máquina tem acesso a internet.

Acesse o diretório /chroot/named/conf:

# cd /chroot/named/conf

Digite o comando abaixo para criar um arquivo chamado db.rootcache dentro do /chroot/named/conf:

# dig @a.root-servers.net . ns > /chroot/named/conf/db.rootcache

Dentro do /chroot/named/conf crie o arquivo db.localhost:

Digite este comando para criar o arquivo
# touch db.localhost

Edite o arquivo db.localhost
# vi db.localhost

Adcione estas linhas no arquivo db.localhost

; ; db.localhost
;
$TTL 86400

@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

IN NS @
IN A 127.0.0.1

Dentro do /chroot/named/conf crie o arquivo db.127.0.0 :

Digite este comando para criar o arquivo
# touch db.127.0.0

Edite o arquivo db.localhost
# vi db.127.0.0

Adcione estas linhas no arquivo db.127.0.0

; ; db.127.0.0
;
$TTL 86400
@ IN SOA localhost. root.localhost. (
1 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.

Verificando as permissões.

Volte para o diretório /chroot e crie o arquivo named.perms:

# cd /chroot
# vi named.perms

Inclua estas linhas dentro do named.perms:

# cd /chroot/named
# chown -R root.named .
# find . -type f -print | xargs chmod u=rw,og=r # regular files
# find . -type d -print | xargs chmod u=rwx,og=rx # directories

# chmod o= etc/*.conf

# touch conf/secondaries/.empty # placeholder
# find conf/secondaries/ -type f -print | xargs chown named.named
# find conf/secondaries/ -type f -print | xargs chmod ug=r,o=

# chown root.named conf/secondaries/
# chmod ug=rwx,o= conf/secondaries/

# chown root.root var/
# chmod u=rwx,og=x var/

# chown root.named var/run/
# chmod ug=rwx,o=rx var/run/

# chown root.named logs/
# chmod ug=rwx,o=rx logs/

Execute o comando abaixo:

# sh -x /chroot/named.perms

O resultado será este:

+ cd /chroot/named
+ chown -R root.named .
+ find . -type f -print
+ xargs chmod u=rw,og=r
+ find . -type d -print
+ xargs chmod u=rwx,og=rx
+ chmod o= etc/named.conf etc/rndc.conf
+ touch conf/secondaries/.empty
+ find conf/secondaries/ -type f -print
+ xargs chown named.named
+ find conf/secondaries/ -type f -print
+ xargs chmod ug=r,o=
+ chown root.named conf/secondaries/
+ chmod ug=rwx,o= conf/secondaries/
+ chown root.root var/
+ chmod u=rwx,og=x var/
+ chown root.named var/run/
+ chmod ug=rwx,o=rx var/run/

cd /chroot/named

touch named.run
chown named.named named.run
chmod ug=rw,o=r named.run

PATH=/usr/local/sbin:$PATH named
-t /chroot/named
-u named
-c /etc/named.conf

Transforme-o em executável:

# chmod a+x /chroot/named.start

Altere o resolv.conf:

# vi /etc/resolv.conf

Inclua esta linha no resolv.conf:

nameserver 127.0.0.1

Controlando o daemon com rndc.

Crie este arquivo caso ele não exista:

# vi /etc/rndc.conf

Inclua as linhas abaixo no rndc.conf:

#
# /chroot/named/etc/rndc.conf
#

options {
default-server 127.0.0.1;
default-key “rndckey”;
};

server 127.0.0.1 {
key “rndckey”;
};

key “rndckey” {
algorithm “hmac-md5″;
secret “secret key here”;
};

Crie esta chave:

# cd /chroot/named/etc
# /usr/local/sbin/dnssec-keygen -a HMAC-MD5 -b 256 -n HOST rndc

# cat nome-da-cache.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: xeTGutBAdP6/dVKKfxOlv0bPOTnAd4A1qosMbs/dwVJI= ### A chave terá este formato, mas não terá as mesmas informações que esta

Copie a string gerada após a palavra key e copie ela no arquivo rndc.conf, no marcador rndckey após o parâmetro secret entre aspas.

Apague a chave.

# rm -rf sua_chave.*

Crie um link simbólico para o arquivo rndc.conf para facilitar a administração e o rndc.conf funcionar adequadamente.

# ln -sf /chroot/named/etc/rndc.conf /etc/rndc.conf

Agora o servidor DNS precisa ser configurado para ser controlado pelo rndc. Vamos editar novamente o arquivo /chroot/named/etc/named.conf para adicionar as seções responsáveis por esta habilidade.

Deixe o arquivo rndc.conf desta forma:

#
# /chroot/named/etc/rndc.conf
#

options {
default-server 127.0.0.1;
default-key “rndckey”;
};

server 127.0.0.1 {
key “rndckey”;
};

key “rndckey” {
algorithm “hmac-md5″;
secret “sua_chave”;
};

O arquivo acima permite que apenas a interface localhost escute e aceite instruções do rndc.

Inicie o serviço:

# sh /chroot/named.start

Verifique se o servidor está rodando:

# ps aux | grep named

Vamos testar se o rndc está funcionando…

Digite o comando abaixo:

# rndc status
number of zones: 2
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
server is up and running

Para verificar o log:

# tail -f /var/log/messages

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.