Criar diretórios:
# mkdir -p /chroot/named
# cd /chroot/named
# mkdir dev etc logs
# mkdir -p var/run
# mkdir - p conf/secondaries
Trazer o arquivo timezone para a chroot:
# cp /etc/localtime /chroot/named/etc
Criar os nodes:
# mknod /chroot/named/dev/null c 1 3
# mknod /chroot/named/dev/zero c 1 5
# mknod /chroot/named/dev/random c 1 8
Criar um usuário e grupo para o bind:
# groupadd named
# useradd -g named -d /chroot/named -s /bin/true named
# passwd -l named
Montando os arquivos de configuração
Primeiro criaremos o
named.conf, que é o arquivo principal do bind, repare que as zonas de root servers e as outras zonas padrões ficaram na própria máquina, ou seja, não consultará no ldap.
# vim /chroot/named/etc/named.conf
Por hora adicione este conteúdo dentro do arquivo:
options {
directory "/conf";
pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";
dump-file "/var/run/named.db";
empty-zones-enable no;
# esconda sua "verdadeiro" numero de versao
version "[seguro]";
};
# root servers
zone "." {
type hint;
file "db.rootcache";
};
# localhost - zona de encaminhamento
zone "localhost" {
type master;
file "db.localhost";
notify no;
};
# localhost - zona reversa
zone "0.0.127.in-addr.arpa" {
type master;
file "db.127.0.0";
notify no;
};
Cria também um link simbólico do named.conf para o /etc para facilitar administração:
# ln -sf /chroot/named/etc/named.conf /etc/named.conf
Perceba que nosso named.conf aponta para três arquivos:
- db.127.0.0
- db.localhost
- db.rootcache
Criaremos agora eles, então a começar pelo db.rootcache.
Se a máquina que estamos instalando tem acesso a internet, ele pode ser criado com o comando:
# dig @a.root-servers.net . ns > /chroot/named/conf/db.rootcache
Criando os outros dois:
# vim /chroot/named/conf/db.127.0.0
E cole o conteúdo:
; 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.
Salve e feche o arquivo.
# vim /chroot/named/conf/db.localhost
e cole o conteúdo:
; 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
Salve e feche o arquivo.
Checando permissões no CHROOT
Este script gerencia perfeitamente todas as permissões que precisamos dentro do diretório chroot.
# verifica.permissoes
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/
Copie o conteúdo acima e cole num arquivo novo em
/chroot/verifica.permissoes.
Agora é só executarmos:
# sh -x /chroot/verifica.permissoes
A saída será algo como:
+ 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/
Agora as permissões dos nossos diretórios estão todas ok.
Script para inicialização do serviço:
#start.named
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
Crie um arquivo start.named dentro do /chroot/ e cole o conteúdo acima nele.
Transforme o mesmo em executável com o comando:
# chmod a+x /chroot/start.named
Não execute o script ainda!
Configurando o rndc
Crie o arquivo
rndc.conf dentro de /chroot/named/etc/rndc.conf e adicione o seguinte conteúdo:
#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 "COLOQUE SUA CHAVE";
};
Adicione as seguintes entradas no início do arquivo
/chroot/named/etc/named.conf:
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { rndckey; };
};
key "rndckey" {
algorithm "hmac-md5";
secret "COLOQUE SUA CHAVE";
};
Perceba que nos dois arquivos temos a frase COLOQUE SUA CHAVE, então, substituiremos esta por a respectiva chave.
Para gerar a chave faça:
# dnssec-kegen -a HMAC-MD5 -b 256 -n HOST rndc
Então você terá dois arquivos no diretório onde executou o comando.
Os nomes serão algo como Krndc.+157+48683.private e Krndc.+157+48683.key, mas nos estamos interessados somente no Krndc.+157+48683.private, dentro dele terá uma linha como essa informando a chave Key: QQMI5z8cceUIzA0UkPlbOEP3RH3sLEfSNVfWGmawjPo=, copie somente a chave e cole nos arquivos substituindo a frase COLOQUE SUA CHAVE.
Remova os dois arquivos que foram gerados.
Feito isso estamos prontos para iniciar o serviço e verificar se tudo está ok.
# cd /chroot/named
# ./start.named
Verifique se tudo está ok através do comando:
# rndc status
A saída deve ser algo parecido com:
version: 9.7.1rc1 ([seguro])
number of zones: 3
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
Para facilitar a administração utilize o seguinte script:
#named init
export PATH=/usr/local/sbin:$PATH # needed for rndc
case "$1" in
start)
# Start daemons.
echo -n "Levantando o named: "
sh /chroot/start.named
echo
;;
stop)
# Stop daemons.
echo -n "Derrubando o named: "
rndc stop
echo "done"
;;
esac
exit 0
Cole o conteúdo dentro de um novo arquivo chamado named em /etc/init.d e de permissão de execução para ele.
Assim quando quiser levantar o processo use:
# /etc/init.d/named start
e pra derrubar:
# /etc/init.d/named stop
Inicialize o serviço e faça um teste com o dig, não se esqueça de alterar no arquivo /etc/resolv.conf apontar para o 127.0.0.1.
# dig www.google.com.br
Obrigatoriamente devemos ter algo parecido com o seguinte resultado:
; <<>> DiG 9.7.1rc1 <<>> www.google.com.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53404
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;www.google.com.br. IN A
;; ANSWER SECTION:
www.google.com.br. 345600 IN CNAME www.google.com.
www.google.com. 604800 IN CNAME www.l.google.com.
www.l.google.com. 300 IN A 64.233.163.104
;; AUTHORITY SECTION:
google.com. 172799 IN NS ns2.google.com.
google.com. 172799 IN NS ns1.google.com.
google.com. 172799 IN NS ns3.google.com.
google.com. 172799 IN NS ns4.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 345600 IN A 216.239.32.10
ns2.google.com. 345600 IN A 216.239.34.10
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10
;; Query time: 1784 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jan 24 20:31:15 2011
;; MSG SIZE rcvd: 235
Ok, agora temos um servidor de DNS configurado e funcionando, esperando somente as zonas do LDAP.