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