Bind9 Installation
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.
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.
# apt-get install bind9 Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets supplémentaires suivants seront installés : bind9utils Paquets suggérés : bind9-doc resolvconf Les NOUVEAUX paquets suivants seront installés : bind9 bind9utils 0 mis à jour, 2 nouvellement installés, 0 à enlever et 3 non mis à jour. Il est nécessaire de prendre 455 ko dans les archives. Après cette opération, 1 450 ko d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? Réception de : 1 http://fr.archive.ubuntu.com/ubuntu/ natty-updates/main bind9utils amd64 1:9.7.3.dfsg-1ubuntu2.2 [110 kB] Réception de : 2 http://fr.archive.ubuntu.com/ubuntu/ natty-updates/main bind9 amd64 1:9.7.3.dfsg-1ubuntu2.2 [345 kB] 455 ko réceptionnés en 0s (568 ko/s) Préconfiguration des paquets... Sélection du paquet bind9utils précédemment désélectionné. (Lecture de la base de données... 169078 fichiers et répertoires déjà installés.) Dépaquetage de bind9utils (à partir de .../bind9utils_1%3a9.7.3.dfsg-1ubuntu2.2_amd64.deb) ... Sélection du paquet bind9 précédemment désélectionné. Dépaquetage de bind9 (à partir de .../bind9_1%3a9.7.3.dfsg-1ubuntu2.2_amd64.deb) ... Traitement des actions différées (« triggers ») pour « man-db »... Traitement des actions différées (« triggers ») pour « ufw »... Traitement des actions différées (« triggers ») pour « ureadahead »... Paramétrage de bind9utils (1:9.7.3.dfsg-1ubuntu2.2) ... Paramétrage de bind9 (1:9.7.3.dfsg-1ubuntu2.2) ... Ajout du groupe `bind' (GID 127)... Fait. Ajout de l'utilisateur système `bind' (UID 120) ... Ajout du nouvel utilisateur `bind' (UID 120) avec pour groupe d'appartenance `bind' ... Le répertoire personnel `/var/cache/bind' n'a pas été créé. wrote key file "/etc/bind/rndc.key" # * Starting domain name service... bind9 [ OK ]
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
.
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;
// };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
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
.
# dig -x 127.0.0.1 ; <<>> DiG 9.7.3 <<>> -x 127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40145 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;1.0.0.127.in-addr.arpa. IN PTR ;; ANSWER SECTION: 1.0.0.127.in-addr.arpa. 10800 IN PTR localhost. ;; Query time: 3 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Wed Aug 31 21:15:29 2011 ;; MSG SIZE rcvd: 63
Il est également possible d'interroger un site disant, afin de valider le transfert des requêtes. e>.
# dig google.com ; <<>> DiG 9.7.3 <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36138 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 241 IN A 209.85.148.106 google.com. 241 IN A 209.85.148.147 google.com. 241 IN A 209.85.148.104 google.com. 241 IN A 209.85.148.99 google.com. 241 IN A 209.85.148.103 google.com. 241 IN A 209.85.148.105 ;; Query time: 26 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Wed Aug 31 21:12:13 2011 ;; MSG SIZE rcvd: 124
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.
# dig google.com ; <<>> DiG 9.7.3 <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17527 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 241 IN A 209.85.148.106 google.com. 241 IN A 209.85.148.147 google.com. 241 IN A 209.85.148.104 google.com. 241 IN A 209.85.148.99 google.com. 241 IN A 209.85.148.103 google.com. 241 IN A 209.85.148.105 ;; Query time: 3 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Wed Aug 31 21:14:04 2011 ;; MSG SIZE rcvd: 124
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
.
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
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 formatYYYYMMDD
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
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; };
};
Voir aussi
Documentation officielle: https://help.ubuntu.com/community/BIND9ServerHowto
http://www.mimiz.fr/linux/installation-et-configuration-dun-serveur-dns-bind9-sur-ubuntu/