Installation et configuration de bind9
Nous allons voir comment installer bind9 sous debian squeeze écoutant l'ipv4 213.186.47.110 et l'ipv6 2001:41d0:1:d6e::110.
Installation
Installez bind9 et bind9-host. bind9-host est l'un des paquets ajoutant la commande host pour résoudre une ip ou un domaine.
aptitude install bind9 bind9-host dnsutils
Depuis une mise à jour de sécurité, bind9 doit avoir accès au fichier /etc/ssl/openssl.cnf
:
chmod o+r /etc/ssl/openssl.cnf
Configuration
Éditez le fichier /etc/bind/named.conf.options
et ajoutez y les lignes suivantes :
allow-query { 127.0.0.1; 213.186.47.110; ::1; 2001:41d0:1:d6e::110; }; allow-recursion { 127.0.0.1; 213.186.47.110; ::1; 2001:41d0:1:d6e::110; }; allow-query-cache { 127.0.0.1; 213.186.47.110; ::1; 2001:41d0:1:d6e::110; }; version "[SECURED]"; allow-notify { 127.0.0.1; 213.186.47.110; ::1; 2001:41d0:1:d6e::110; }; //interdiction du transfère complet de zones allow-transfer {"none";}; listen-on { 127.0.0.1; 213.186.47.110; }; listen-on-v6 { ::1; 2001:41d0:1:d6e::110; }; transfer-source 213.186.47.110; transfer-source-v6 2001:41d0:1:d6e::110; notify-source 213.186.47.110; notify-source-v6 2001:41d0:1:d6e::110; dnssec-enable yes; dnssec-validation auto; dnssec-lookaside auto;
Étant donné que mon serveur dispose de plusieurs adresses ips, les directives listen-on
(-v6
), transfer-source
(-v6
) et notify-source
(-v6
) permettent de spécifier les ips à utiliser. Si vous faites de même, il faudra peut-être que vous adaptiez votre fichier /etc/resolv.conf
pour qu'il corresponde à ces ips.
Pensez à supprimer ou commenter (avec //) la ligne listen-on-v6 { any; };
à la fin du fichier /etc/bind/named.conf.options
Comme je suis gentil, je vais vous détailler un peu tout ça :
allow-query
: spécifie les IPs ayant la permission d'interroger votre serveur DNS. Une telle option peut aussi être placée dans la configuration d'une zone dns, dans ce cas, la directive globale est ignorée pour la zone en question. Attention, si vous ne spécifiez pas cette directive, tous le monde pourra se servir de votre serveur bind pour résoudre des DNS.allow-recursion
: spécifie les IPs ayant la permission de faire des requêtes récursives sur votre serveur DNS. Attention, si vous ne spécifiez pas cette directive, tous le monde pourra se servir de votre serveur bind pour réaliser des requêtes récursives.allow-query-cache
de même que précédemment mais pour le cache de votre DNS. Cette option évitera les attaques sur votre bind.allow-notify
: spécifie les IPs autorisés à notifier votre serveur bind d'un changement dans une zone DNS qu'il gère en mode esclave en plus du DNS maître. Cette option peut aussi être déclarée dans la configuration d'une zone dns, dans ce cas l'option globale est ignorée pour la zone en question. Cette option n'est utile que pour une zone esclave (slave).allow-transfer
: spécifie les IPs autorisés à demander un transfert complet d'une zone dns. Attention, si vous ne spécifiez pas cette directive, tous le monde pourra demander le transfert complet de vos zones DNS. Cette option peut aussi être utilisée dans la configuration d'une zone DNS en mode maître. Dans ce cas, on y indique généralement les IPs des serveurs dns secondaires (esclaves).listen-on(-v6)
: spécifie les IPs sur lesquels le serveur DNS doit écouter pour les requêtes.transfer-source(-v6
: spécifie les IPs à utiliser lors de l'initiation d'un transfert de zone. Veillez à ne pas utiliser des IPs locales.notify-source(-v6)
: spécifie les IPs à utiliser pour notifier un changement dans une zone dns. Veillez à ne pas utiliser des IPs locales.
Enfin, modifiez votre fichier /etc/resolv.conf
pour utiliser votre serveur bind :
nameserver ::1 nameserver 127.0.0.1 nameserver 2001:41d0:1:d6e::110 nameserver 213.186.47.110
Création d'une zone
Nous allons ajouter la zone dns du domaine domain.tld et ayant comme dns secondaire 87.98.136.217
Ajoutez les lignes suivantes dans le fichier /etc/bind/named.conf.local
:
zone "domain.tld" { type master; //autoriser le dns secondaire à copier la zone allow-transfer { 87.98.136.217; }; allow-query { any; }; notify yes; file "/srv/bind/domain.tld"; };
A titre d'information, voici les lignes à ajouter sur le serveur dns secondaire :
zone "domain.tld"{ type slave; file "/var/cache/bind/slave/domain.tld"; masters { 213.186.47.110; }; allow-query { any; }; notify no; };
Enfin, créez le fichier /srv/bind/domain.tld
qui contiendra la zone dns :
mkdir /srv/bind touch /srv/bind/domain.tld chgrp -R bind /srv/bind
Voici un exemple de zone dns :
$ttl 3600 domain.tld. IN SOA srv.domain.tld. postmaster.domain.tld. ( 2008052803 ; Serial 14400 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum ;global zone info domain.tld. IN NS srv.domain.tld. domain.tld. IN NS srv2.domain.tld. srv.domain.tld. IN A 213.186.47.110 srv.domain.tld. IN AAAA 2001:41d0:1:d6e::110 srv2.domain.tld. IN A 213.186.47.111
Si vous utilisez apparmor
, ajoutez ces lignes dans /etc/apparmor.d/local/usr.sbin.named
:
/srv/bind/ r, /srv/bind/* r,
Bind utilise beaucoup de CPU
Essayez d'ajouter la ligne de configuration suivante :
managed-keys-directory "/var/cache/bind/";
Cela peut se produire si vous avez changé la directory dans /etc/bind/named.conf.options vers un dossier sur lequel bind n'a pas le droit en écriture
Bind DNSSEC NTA
NTA : Negative Trust Anchor : permet de désactiver la vérification DNSSEC pour une durée déterminée pour un domaine.
touch /srv/bind/_default.nta chown bind:bind /srv/bind/_default.nta chmod u+rw,g+r,o-rwx /srv/bind/_default.nta
Si vous utilisez apparmor, veillez à ce que les fichiers dans /srv/bind/_default.nta
et
/srv/bind/_bind.nta
soient accessibles en écriture.
Pour ajouter une NTA :
rndc nta -l 60 fail01.dnssec.works
rndc nta -dump
Mode debug
Bind9 étant par défaut assez peu bavard et ce même s'il n'arrive pas à se lancer, voici comment le lancer en mode debug :
named -u bind -d9 -g -c /etc/bind/named.conf
-u
défini l'utilisateur avec lequel il faut le lancer (c'est l'utilisateur bind par défaut sous debian), -d9
est le niveau de debug, -g
permet de lancer bind en console, -c
défini le fichier de configuration
vérifier une zone
named-checkzone domain.tld /chemin/vers/le/fichier/contenant/la/zone/domain.tld
DNSsec