Todos sabemos o que é o DNS e todos os dias em que olhamos para a configuração de rede das nossas maquinas nos lembramos da sua existencia e da sua importancia.
Um servidor de DNS mal configurado pode ser usado por terceiros sem grande esforço para ataques DoS. Pode também ser um meio de entrada para o sistema que o alberga(como qualquer outro serviço de rede).
Tendo isto em conta vamos instalar o BIND que é um dos dinossauros em continua evolução que mantem grande parte do serviço de DNS. O historico de bugs criticos e compromissos de segurança com este software é negro, contudo a versão actual ainda é na minha humilde opinião o melhor pacote gratuito de DNS do mercado.
Mas antes de arregaçar as mangas é preciso planear a estrutura do DNS, as zonas primarias, secundarias, stub, assim como a localização geográfica dos servidores, o alojamento dos mesmos, as delegações(subdominios), etc.
Recomendo para este efeito pelo menos uma olhada no DNS howto e para os mais afortunados mesmo a leitura do DNS & Bind da O’Reilly.
Na versão 9 é uma brisa montar um ambiente 'estanque', um chroot, onde o processo estará isolado do resto do sistema. Basta para isso seguir o chroot-bind-howto.
Depois criam-se as zonas respectivas e/ou na ausencia delas configuram-se os forwarders ficando com um cashing-only DNS server.
Existe uma equipa que mantem uma template de config para o bind verdadeiramente impressionante pela qualidade. A ‘Team Cymru’, deixo o link como referencia.
Espero que seja um ponto de partida para muito divertimento.
Referencias:
http://www.dns.net/dnsrd/rfc/
http://en.wikipedia.org/wiki/Domain_name_system
http://tldp.org/HOWTO/DNS-HOWTO.html
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/pdf/Chroot-BIN...
http://www.cymru.com/Documents/secure-bind-template.html
Basicamente esta operação consiste em colocar o serviço a correr num ambiente restringido a uma zona do sistema de ficheiros de modo a dificultar a vida a quem possa explorar falhas de segurança com sucesso.
Testado com Debian Etch 4.0
Instalação:
apt-get install bind9
Configuração:
Parar o serviço:
/etc/init.d/bind9 stop
Restringir o serviço ao directorio do chroot:
Editar /etc/default/bind9
Alterar a linha:
OPTIONS="-u bind -t /var/lib/bind9"
Criar a arvore de directorios do chroot:
mkdir /var/lib/bind9
mkdir -p /var/lib/bind9/etc
mkdir /var/lib/bind9/dev
mkdir -p /var/lib/bind9/var/cache/bind
mkdir -p /var/lib/bind9/var/run/bind/run
mv /etc/bind /var/lib/bind9/etc/bind
Precaver algum problema com futuras actualizações:
ln -s /var/lib/bind9/etc/bind /etc/bind
Criar os dispositivos necessários para o seu funcionamento:
mknod /var/lib/bind9/dev/null c 1 3
mknod /var/lib/bind9/dev/random c 1 8
Acertar as permissões dos ficheiros:
chmod 666 /var/lib/bind9/dev/null /var/lib/bind9/dev/random
chown -R bind:bind /var/lib/bind9/var/*
chown -R bind:bind /var/lib/bind9/etc/bind
Preparar o syslog para recolher os dados do log do bind:
Editar /etc/default/syslogd
Alterar a linha:
SYSLOGD="-a /var/lib/bind9/dev/log"
Reiniciar os serviços:
/etc/init.d/sysklogd restart
/etc/init.d/bind9 start
Finalmente verificar erros em /var/log/syslog
e está prontinho :)
# Referencias:
* http://www.howtoforge.com/howto_bind_chroot_debian
* http://tldp.org/HOWTO/Chroot-BIND-HOWTO.html
O Dynamic Host Configuration Protocol é o serviço que trata de distribuir endereços IP por um conjunto de hosts.
Como estes IP's mudam frequentemente torna-se importante manter o DNS coerente ou poderiamos ter nomes a apontar para os hosts errados. Como fazemos isso?
Configuramos o servidor de DHCP para fazer essas actualizações no DNS de cada vez que houver alterações nos leases.
Para instalar o servidor de DHCP e DNS:
apt-get install bind9 dhcp3-server
colocar os interfaces relevantes para o servidor de DHCP:
/etc/default/dhcp3-server
INTERFACES="eth0 tap0"
/etc/dhcp3/dhcpd.conf
# activar o DDNS
ddns-updates on;
ddns-update-style interim;
# zona DNS Forward em que vai actualizar os nomes
ddns-domainname "joao.o-meu-dominio.whatever.";
# zona DNS Reverse em que vai actualizar os PTR's
ddns-rev-domainname "in-addr.arpa.";
# Esta linha inibe resposta aos pedidos de actualização DDNS dos clientes, usa-se em zonas inseguras
#ignore client-updates;
# Chave para aceder ao servidor de DNS
include "/etc/dhcp3/rndc.key";
option domain-name "joao.o-meu-dominio.whatever.";
option domain-name-servers 10.0.0.254;
default-lease-time 3600;
max-lease-time 17200;
authoritative;
log-facility local7;
zone joao.o-meu-dominio.whatever. {
primary 127.0.0.1;
key rndc-key;
}
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.50;
option routers 10.0.0.254;
option broadcast-address 10.0.0.255;
allow unknown-clients;
filename "pxelinux.0";
next-server 10.0.0.1;
zone 0.0.10.in-addr.arpa. {
primary 127.0.0.1;
key "rndc-key";
}
}
subnet 172.31.0.0 netmask 255.255.255.0 {
range 172.31.0.60 172.31.0.70;
option routers 172.31.0.1;
option broadcast-address 172.31.0.255;
allow unknown-clients;
filename "pxelinux.0";
next-server 172.31.0.254;
zone 0.31.172.in-addr.arpa. {
primary 127.0.0.1;
key "rndc-key";
}
}
Na configuração do bind colocar a linha allow-update { key "rndc-key"; }; nas zonas respectivas:
/etc/bind9/named.conf.local
zone "joao.o-meu-dominio.whatever" {
type master;
file "/etc/bind/db.farm";
allow-update { key "rndc-key"; };
notify yes;
};
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/db.10.0.0";
allow-update { key "rndc-key"; };
notify yes;
};
zone 0.31.172.in-addr.arpa. {
type master;
file "/etc/bind/db.172.32.0";
allow-update { key "rndc-key"; };
notify yes;
};
Arrancar os serviços e voilá...
/etc/init.d/dhcp3-server start
/etc/init.d/bind9 start