Bind9 Installation

De EjnTricks

Cet article présente l'installation d'un DNS avec le package bind9 sur un serveur Ubuntu. Celle ci a été réalisé en suivant le tutoriel officiel sur le site de Ubuntu.


System-Install-icon.png Installation

L'installation du serveur s'effectue en une ligne de commande. Le paquet bind9 est installé.

sudo apt-get install bind9

L'installation s'effectue sans aucune intervention.

Configuration-icon.png Configuration

Introduction

L'objectif de cette installation est de définir un serveur, nommé server.ejouvin.fr dont l'adresse ip est 192.168.1.32. Toutes les configurations par défaut se trouvent dans le répertoire /etc/bind, dont le contenu est le suivant:

bind.keys
db.0
db.127
db.255
db.empty
db.local
db.root
named.conf
named.conf.default-zones
named.conf.local
named.conf.options
rndc.key
zones.rfc1918

Il est toujours utile de regarder les fichiers "standards" afin de comprendre le fonctionnement des outils. Dans le cas de bind9, le point d'entrée est le fichier named.conf dont le contenu est le suivant:

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";


Configuration DNS du fournisseur d'accès

La mise en place du DNS n'a pas pour objectif de remplacer les DNS mis à disposition par le fournisseur d'accès. Les demandes ne devant pas être traitées par celui installé (la majorité des cas) seront transférées vers ceux-ci. Dans le cas où les DNS mis à disposition sont:

  • DNS primaire: 212.27.40.240
  • DNS secondaire: 212.27.40.241

La configuration de la redirection s'effectue dans le fichier named.conf.options au niveau du paramètre forwarders.

Il faut insérer les deux adresses IP.

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        forwarders {
             212.27.40.240;
             212.27.40.241;
        };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

Cette modification est prise en compte qu'après un redémarrage du service.

service bind9 restart

Afin de tester le bon fonctionnement, il est possible d'utiliser l'outil dig, installé avec le package dnsutil. Le premier test consiste à interroger l'adresse locale 127.0.0.1.

Il est également possible d'interroger un site disant, afin de valider le transfert des requêtes. e>.

Le temps de réponse affiché est de 26 millisecondes. La même interrogation lancée une deuxième fois sera plus rapide, du fait d'un système de cache au niveau du serveur.

Configuration server maître

Après la redirection des requêtes, il est nécessaire de configurer le serveur principale qui va permettre de résoudre le nom des machines avec leur adresse IP. La bonne pratique consiste à modifier le fichier named.conf.local. Comme cela ne sert à rien de ré-inventer la roue, il est utile de s'inspirer du contenu du fichier named.conf.default-zones. Dans ce fichier named.conf.local, une nouvelle zone va être déclarée en indiquant son type ainsi que son fichier de configuration. Le contenu du fichier est alors:

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "ejouvin.fr" {
        type master;
        file "/etc/bind/db.ejouvin.fr";
};

Le fichier de configuration se situe donc à l'emplacement /etc/bind/db.ejouvin.fr. Une bonne pratique consiste à créer un fichier dont le nom est db.{ZONE}, où {ZINE} est remplacé par le nom de la zone à configurer. Pour mettre en place ce dernier, il est pratique de partir d'un fichier exemple, par exemple db.local.

Le contenu du fichier db.{ZONE} est le suivant:

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     server.ejouvin.fr. etienne.ejouvin.fr. (
                         20110831       ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      server.ejouvin.fr.
server  IN      A       192.168.1.32

Deux choses sont très importante:

  • Les noms des serveurs doivent contenir le nom de la "machine" suivie du nom de la zone. Et cette chaîne doit se terminer par un point.
  • A chaque modification du fichier, il faut modifier la valeur de Serial pourque cela soit pris en compte. Ce numéro est courament construit à l'aide de la date du jour au format YYYYMMDD suivi d'un numéro d'incrément en cas de plusieurs modification dans la même journée. Dans le cas de cet exemple, la modification à eu lieu le 31 août 2011.

Le caractère ; permet de commencer un zone de commentaire. C'est pourquoi les textes Serial, Refresh ... ne sont pas pris en compte, mais permet d'identifier l'utilité de la valeur spécifiée.

La déclaration des machines s'effectue donc en fin de fichier. Dans le cadre de cette exemple, une machine server est spécifiée avec l'adresse IP 192.168.1.32, c'est celle sur lequel le serveur DNS est installé.


Configuration requête inversée

La dernière étape consiste à configurer les requêtes inversées afin d'identifier le nom des machines en fonction des adresses IP. Pour cela, il faut configurer une nouvelle zone, dont le nom est la concaténation des 3 premiers groupes de chiffres des adresses IP et de in-addr.arpa, au niveau du fichier named.conf.local Dans le cadre de cette installation, les adresses IP des machines sont du type 192.168.1.XXX, le nom de la zone sear donc 1.168.192.in-addr.arpa

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "ejouvin.fr" {
        type master;
        file "/etc/bind/db.ejouvin.fr";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        notify no;
        file "/etc/bind/db.192";
};

De la même manière que pour la configuration du serveur primaire, un fichier de configuration est mis en place db.192. La valeur 192 correspond à la racine des adresses IP, règle de nommage utilisée courament. Pour la création de celui-ci, il est possible de s'inspirer d'un déjà existant, par exemple db.127</db>. Le contenu de ce fichier est similaire à celui pour le serveur principale, et dans le cadre de cette installation:

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     server.ejouvin.fr. etienne.ejouvin.fr. (
                        2011083101      ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      server.
32      IN      PTR     server.ejouvin.fr.

La différence se situe au niveau de l'inversion de paramètre de configuration en fin de fichier, à savoir que l'adresse IP est le premier argument des lignes, et le nom complet des machine (inversé et se terminant par un point) en fin de ligne.

La documentation sur le site de Ubuntu indique que l'on peut "pinger" les machines après ces configurations. Or dans le cas d'une installation "domestique" derrière un routeur, des modifications complémentaires sont nécessaires.


Configuration du routeur

Il est pas rare d'installer ses machines derrière un routeur, qui est considéré par défaut comme le serveur DNS, avec relais sur les DNS du fournisseur d'accès. Or celui ci ne connaîtra pas le serveur DNS nouvellement installé. Pour ce faire, il faut modifier sa configuration pour ne plus prendre en compte les DNS fournis, mais indiquer celui installé, à l'adresse 192.168.1.32 dans le cas de l'article. Le serveur primaire du fournisseur d'accès peut être utilisé en tant que serveur secondaire du routeur.

Configuration résolution des noms sur serveur Ubuntu

Enfin, la dernière étape consiste à modifier la configuration pour la résolution des noms au niveau du serveur installé. Pour une installation sous Ubuntu, celle-ci s'effectue dans le fichier <code>/etc/resolv.conf. Pour cet article, le contenu du fichier indiquait l'adresse IP du routeur. Les modifications apportées permettent de cible l'adresse IP locale ainsi que les deux DNS du fournisseur d'accès.

# Generated by NetworkManager
# nameserver 192.168.1.1
nameserver 127.0.0.1
nameserver 212.27.40.240
nameserver 212.27.40.241


Icon-log.png Configuration de la log

De nombreuses options de trace sont disponibles. La mise en place présentée ici va permettre de tracer les requêtes effectuées (et non pas les accès). Cependant, sur un serveur Ubuntu, l'installation de bind9 entraîne l'ajout d'un profile dans l'application apparmor, offrant une sécurité sur les droits d'accès aux fichiers pour les process. L'exemple de mise en place des traces, fourni sur le site de Ubuntu, spécifie l'emplacement dans le fichier /var/log/query.log. Or cela n'est pas fonctionnel tel quel.

Configuration de apparmor

Il se trouve des règles sont mises en place au niveau de ce process, empéchant l'écriture dans le répertoire /var/log. Le fichier de configuration, pour le process named lancé par bind9, se situe à l'emplacement /etc/apparmor.d/usr.sbin.named. Le contenu est le suivant:

# vim:syntax=apparmor
# Last Modified: Fri Jun  1 16:43:22 2007
#include <tunables/global>

/usr/sbin/named {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,
  capability sys_resource,

  # /etc/bind should be read-only for bind
  # /var/lib/bind is for dynamically updated zone (and journal) files.
  # /var/cache/bind is for slave/stub data, since we're not the origin of it.
  # See /usr/share/doc/bind9/README.Debian.gz
  /etc/bind/** r,
  /var/lib/bind/** rw,
  /var/lib/bind/ rw,
  /var/cache/bind/** rw,
  /var/cache/bind/ rw,

  # gssapi
  /etc/krb5.keytab kr,
  /etc/bind/krb5.keytab kr,

  # ssl
  /etc/ssl/openssl.cnf r,

  # dnscvsutil package
  /var/lib/dnscvsutil/compiled/** rw,

  /proc/net/if_inet6 r,
  /proc/*/net/if_inet6 r,
  /usr/sbin/named mr,
  /var/run/named/named.pid w,
  /var/run/named/session.key w,
  # support for resolvconf
  /var/run/named/named.options r,

  # some people like to put logs in /var/log/named/ instead of having
  # syslog do the heavy lifting.
  /var/log/named/** rw,
  /var/log/named/ rw,
}

Cette configuration indique qu'il est possible d'effectuer la lecture et l'écriture de fichier au niveau du répertoire /var/log/named. Tout naturellement, la configuration spécifiera un fichier de trace dans celui-ci.


Configuration de la trace

Celle-ci s'effectue toujours dans le fichier named.conf.local par l'ajout d'une "balise" logging qui va contenir la définition du fichier de trace, ainsi que les différente catégories, organisation des traces, mises en place. Le cas présenté est le plus simple possible pour indiquer:

  • Emplacement de la trace vers /var/log/bind9/query.log
  • Niveau Debug
  • Tracer que les requêtes.
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "ejouvin.fr" {
        type master;
        file "/etc/bind/db.ejouvin.fr";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        notify no;
        file "/etc/bind/db.192";
};

logging {
        channel query.log {
                file "/var/log/bind9/query.log";
                severity debug 3;
        };

        category queries { query.log; };
};


Viewer icon.png Voir aussi

Documentation officielle: https://help.ubuntu.com/community/BIND9ServerHowto

http://www.mimiz.fr/linux/installation-et-configuration-dun-serveur-dns-bind9-sur-ubuntu/