Installation et configuration de bind9

De Linux Server Wiki
Aller à : navigation, rechercher

Nous allons voir comment installer bind9 sous debian squeeze écoutant l'ipv4 213.186.47.110 et l'ipv6 2001:41d0:1:d6e::110.

1 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

2 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

3 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

4 Bind utilise beaucoup de CPU (debian squeeze)

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

5 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

6 vérifier une zone

named-checkzone domain.tld /chemin/vers/le/fichier/contenant/la/zone/domain.tld

7 DNSsec