Вы находитесь на странице: 1из 15

W I K Login

I
Search Titles Text

FrontPage RecentChanges FindPage HelpContents


/ Wiki /

Login Info Attachments More Actions:

fr Bind9
Traduction(s): English - French ?Discussion

Contents
1. Prsentation
2. Dfinitions
3. Disposition rseau
4. Gestion du serveur
1. Installation

2. Configuration
1. Signature TSIG

2. Fichier /etc/bind/named.conf
3. Fichier /etc/bind/named.conf.default-zones
4. Fichier /etc/bind/named.conf.options
5. Fichier /etc/bind/named.conf.local
6. Fichier /etc/bind/named.conf.log
3. Les Ressources Records (RR)
1. Les fichiers dans var/cache/bind/
2. Quelques explications :
4. Fichier /etc/resolv.conf

5. Chroot de bind
6. Gestion des clients
7. Les outils de tests
8. Liens et Ressources

Prsentation
La mise en place d'un serveur DNS sur un rseau permet de remplacer les adresses IP des machines par un
nom. Ainsi, il est mme possible d'associer plusieurs noms la mme machine pour mettre en vidence les
diffrents services possibles. Du coup, www.example.com et pop.example.com, peuvent pointer sur le
serveur principal o sont prsents le serveur de mail et l'intranet de l'entreprise dont le domaine serait
example.com. C'est tout de mme plus facile que de se rappeler que ces deux services tournent sur la
machine dont l'adresse IP est 192.168.0.1.

Imaginez maintenant, que l'administrateur de notre entreprise dcide pour une raison ou une autre de
dplacer le serveur de mail sur la machine 192.168.0.11. Il n'y a rien faire du tout sauf modifier le fichier
de configuration du serveur DNS. Il vous reste toujours la possibilit d'aller modifier le fichier hosts de tous
les utilisateurs, mais cela risque de prendre du temps et d'embter certaines personnes.

Dfinitions
DNS : signifie soit Domain Name System ou Domain Name Server
Serveur primaire :
Serveur secondaire :
Serveur cache :

Disposition rseau
Nous disposons d'un accs Internet via une xxxbox (192.168.1.1), de deux serveurs DNS fournis par notre
FAI (80.10.249.2, 80.10.246.129). En fait, ces deux derniers ne seront jamais mentionns dans la
configuration car la xxxbox va se charger de faire la rsolution de noms si elle ne connat pas l'adresse de
destination des paquets. Par consquent, je considre la xxxbox comme le serveur primaire hors de notre
domaine. Le serveur "sid" (192.168.1.10) est connect la xxxbox via sa premire carte rseau. Il est aussi
connect au lan (192.168.0.0/24) via sa seconde interface rseau (192.168.0.1). C'est sur celui-ci que nous
allons installer le serveur DNS primaire pour notre domaine example.com ( RFC 2606) Tous les
ordinateurs du LAN se voient attribuer une adresse IP automatiquement via le service DHCP. Ce dernier
fournira aussi l'adresse du serveur DNS primaire situ sur notre domaine, et mettra jour les noms d'htes
pour la zone example.com auxquels il aura attribu une adresse IP.

Gestion du serveur
Installation

On va utiliser le paquet bind9 pour faire tout a.

# apt-get install bind9

et puis si vous voulez installer en plus la documentation, (trs utile) :

# apt-get install bind9-doc

Configuration

Aprs l'installation, on va voir un peu du cot des fichiers de configuration. Ils sont placs dans le rpertoire
/etc/bind/

Signature TSIG

Cette signature a pour but d'authentifier les transactions avec BIND. Ainsi, le serveur DHCP ne pourra
mettre jour le domaine example.com que s'il dispose de cette clef. On recopie une clef existante :

# cd /etc/bind/

# cat rndc.key

key "rndc-key" {

algorithm hmac-md5;

secret "QJc08cnP1xkoF4a/eSZZbw==";
};

# cp rndc.key ns-example-com_rndc-key

On gnre une nouvelle clef avec les options suivantes :

algorithme HMAC-MD5 - identifiant 157 (obligatoire pour une signature TSIG et seul algorithme
support par BIND)
longeur de 512 octets (multiple de 64 avec une longueur maximale de 512 pour l'algorithme ci-
dessus)
nom : ns-example-com_rndc-key

dnssec-keygen -a HMAC-MD5 -b 512 -n USER ns-example-com_rndc-key

Kns-example-com_rndc-key.+157+53334
Le footprint associ la clef est 53334. On obtient alors deux fichiers, l'un avec une extension key et l'autre
avec une extension private. On substitue la clef prsente dans le fichier ns-example-com_rndc-key par celle
prsente dans un de ces derniers.

# cat Kns-example-com_rndc-key.+157+53334.private

Private-key-format: v1.2

Algorithm: 157 (HMAC_MD5)

Key: LZ5m+L/HAmtc9rs9OU2RGstsg+Ud0TMXOT+C4rK7+YNUo3vNxKx/197o2Z80t6gA34AEaAf3F+hEodV4K+SWvA==

Bits: AAA=

# cat ns-example-com_rndc-key

key "ns-example-com_rndc-key" {

algorithm hmac-md5;

secret "LZ5m+L/HAmtc9rs9OU2RGstsg+Ud0TMXOT+C4rK7+YNUo3vNxKx/197o2Z80t6gA34AEaAf3F+hEodV4K+SWv

A==";

};

Le fichier ns-example-com_rndc-key ne doit pas tre world-readable, afin de garantir la scurit. Celui-ci
sera insr dans la configuration de bind via une directive include car la configuration de bind est quant
elle world-readable. On pensera aussi supprimer les fichiers key et private prcdemment gnrs.

Fichier /etc/bind/named.conf

Ce fichier est le fichier de configuration principal du serveur DNS.

// Grer les acls

acl internals { 127.0.0.0/8; 192.168.0.0/24; };

// Charger les options


include "/etc/bind/named.conf.options";

// Dclaration de la clef TSIG utilise pour la mise jour dynamique


include "/etc/bind/ns-example-com_rndc-key";

// Configurer le canal de communication pour administrer BIND9 avec rndc

// Par dfaut, la clef est situe dans le fichier rndc.key et utilise par
// rndc et bind9 sur localhost

controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; };
};

// prime the server with knowledge of the root servers

zone "." {
type hint;

file "/etc/bind/db.root";
};

include "/etc/bind/named.conf.default-zones";
include "/etc/bind/named.conf.local";
Note : Dans Debian Jessie la partie 'zone "." {...}' est dans le fichier "named.conf.default-zones". Inutile de
l'ajouter dans le fichier "named.conf"

Fichier /etc/bind/named.conf.default-zones

Note : depuis Debian 7 Wheezy bind9 embarque un fichier contenant les zones par dfaut forward,
reverse, et broadcast.

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;

file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {

type master;
file "/etc/bind/db.127";

};
zone "0.in-addr.arpa" {

type master;
file "/etc/bind/db.0";

};
zone "255.in-addr.arpa" {

type master;
file "/etc/bind/db.255";

};

Fichier /etc/bind/named.conf.options

Ce fichier contient l'ensemble des options de configuration du serveur DNS.


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

// Port d'change entre les serveurs DNS

query-source address * port *;

// Transmettre les requtes 192.168.1.1 si ce serveur ne sait pas rsoudre ces adresses.
// On pourrait aussi bien renseigner les serveurs DNS du FAI plutt que de renseigner

// l'adresse IP du routeur (xxxbox)


forward only;

forwarders { 192.168.1.1; };

auth-nxdomain no; # conform to RFC1035

// Ecouter sur les interfaces locales uniquement (IPV4)


listen-on-v6 { none; };

listen-on { 127.0.0.1; 192.168.0.1; };

// Ne pas transfrer les informations de zones aux DNS secondaires

allow-transfer { none; };

// Accepter les requtes pour le rseau interne uniquement


allow-query { internals; };

// Autoriser les requtes rcursives pour les htes locaux

allow-recursion { internals; };

// Ne pas rendre publique la version de BIND


version none;

};

Le port associ l'option query-source ne doit en aucun cas tre fig car il fragilise les transactions DNS
dans le cas d'un rsolveur.

Vulnerability Note VU#800113


Bind9 DNS Cache Poisoning

M. Rash a crit un article intressant propos de cela et comment forcer le port source de manire
alatoire par le biais d'iptables : Mitigating DNS Cache Poisoning Attacks with iptables

Afin de diminuer la temporisation de timeout pour les connexions UDP, et ainsi mettre en vidence la
randomization qui par dfaut est de 30s par tuple, il suffit de mettre jour le paramtre
net.netfilter.nf_conntrack_udp_timeout

# sysctl -w net.netfilter.nf_conntrack_udp_timeout=10

pour obtenir un timeout 10s.

Fichier /etc/bind/named.conf.local

Ce fichier contient la configuration locale du serveur DNS, on y dclare les zones associes au domaine.
// Grer les fichiers de logs

include "/etc/bind/named.conf.log";

// Gestion du domaine example.com


// ------------------------------

// - Le serveur est dfini comme matre sur ce domaine


// - Il n'y a aucun forwarder pour ce domaine car nous avons la main mise dessus.

// Pour tous les autres domaines, nous utiliserons le forwarder mentionn dans *named.conf.options*
// - Les entrees sur le domaine peuvent tre ajoutes dynamiquement avec le clef ns-example-com_rndc-key

zone "example.com" {
type master;

file "/var/cache/bind/db.example.com";

forwarders {};
allow-update { key ns-example-com_rndc-key; };

};

zone "0.168.192.in-addr.arpa" {
type master;

file "/var/cache/bind/db.example.com.inv";

forwarders {};

allow-update { key ns-example-com_rndc-key; };


};

// Consider adding the 1918 zones here, if they are not used in your

// organization
include "/etc/bind/zones.rfc1918";

NOTE : si vous crez un non-FQDN local et l'appelez .local, il se heurte d'autres paquets (lesquels ?).
ditez /etc/nsswitch.conf et dplacez dns juste aprs files sur la ligne hosts. Cela fera marcher les
domaines .local.

Fichier /etc/bind/named.conf.log

Sous Debian Jessie, ce fichier est crer dans /etc/bind


logging {

channel update_debug {
file "/var/log/update_debug.log" versions 3 size 100k;

severity debug;

print-severity yes;

print-time yes;
};

channel security_info {

file "/var/log/security_info.log" versions 1 size 100k;

severity info;
print-severity yes;

print-time yes;

};
channel bind_log {

file "/var/log/bind.log" versions 3 size 1m;

severity info;

print-category yes;
print-severity yes;

print-time yes;

};

category default { bind_log; };

category lame-servers { null; };

category update { update_debug; };

category update-security { update_debug; };


category security { security_info; };

};

On dfinit ici les diffrentes mthodes de log pour les diffrentes catgories. La premire catgorie est
comme son nom l'indique la catgorie par dfaut qui est habituellement affecte au syslog. Toute catgorie
non mentionne, est assimile la catgorie default. Pour obtenir une liste des diffrentes catgories,
consulter le manuel de rfrence de l'administrateur pour bind9. Pour ce qui est des lame-servers, on
ignore tous les logs qui leur sont associs.

Les Ressources Records (RR)

Un DNS est constitu de plusieurs enregistrements, les RR ou Ressources Records, dfinissant les diverses
informations relatives au domaine. Le premier enregistrement est consacr la rsolution de noms, dans
notre cas, il s'agit du fichier db.example.com. Le second sera quant lui en rapport avec la rsolution de
noms inverses ; il s'agit du fichier db.example.com.inv.

Les fichiers dans var/cache/bind/

RR pour la rsolution de noms (fichier db.example.com)


$TTL 3600

@ IN SOA sid.example.com. root.example.com. (

2007010401 ; Serial
3600 ; Refresh [1h]

600 ; Retry [10m]

86400 ; Expire [1d]

600 ) ; Negative Cache TTL [1h]


;

@ IN NS sid.example.com.

@ IN MX 10 sid.example.com.

sid IN A 192.168.0.1

etch IN A 192.168.0.2

pop IN CNAME sid

www IN CNAME sid

mail IN CNAME sid

RR pour la rsolution inverse (fichier db.example.com.inv)

@ IN SOA sid.example.com. root.example.com. (


2007010401 ; Serial

3600 ; Refresh [1h]

600 ; Retry [10m]

86400 ; Expire [1d]


600 ) ; Negative Cache TTL [1h]

@ IN NS sid.example.com.

1 IN PTR sid.example.com.

2 IN PTR etch.example.com.

Quelques explications :

$TTL : (Time To Live) exprime la duree (en secondes) de validit, par dfaut, des informations que
contiennent les RRs. Une fois ce dlai expir, il est ncessaire de vrifier nouveau les donnes. Les
diffrents types :

SOA : permet de dfinir les informations relatives la zone. En l'occurrence le nom du serveur DNS
primaire "sid.example.com." et l'adresse mail du contact technique (root.example.com. ; le @ est
remplace par un point). Il est compose de plusieurs champs :
1. Serial : est un entier non sign 32 bits. C'est le numro de srie incrmenter chaque
modification du fichier. Il permet au serveur secondaire de recharger les informations qu'ils ont.
L'usage gnral vient le formater de cette manire YYYYMMDDXX, soit pour la premire
modification du 01/04/2007 -> 2007040101, pour la seconde 2007040102.
2. Refresh : dfinit la priode de rafrachissement des donnes.
3. Retry : si une erreur survient au cours du dernier rafrachissement, celle-ci sera rpte au bout du
dlai Retry.
4. Expire : le serveur sera considr comme non disponible au bout du dlai Expire.
5. Negative cache TTL : dfinit la dure de vie d'une rponse NXDOMAIN de notre part.
NS : renseigne le nom des serveurs de noms pour le domaine.
MX : renseigne sur le serveur de messagerie. Plusieurs peuvent tre dfinis. Ainsi, il est possible de leur
donner une priorit en leur affectant un numro. Plus bas est le numro, plus haute est la priorit.
A : associe une nom d'hte une adresse ipv4 (32 bits)
AAAA : associe une nom d'hte une adresse ipv6 (128 bits)
CNAME : identifie le nom canonique d'un alias (un nom pointant sur un autre nom)
PTR : c'est simplement la rsolution inverse (le contraire du type A).

Les classes : IN determine l'association a la classe Internet. D'autres classes sont disponibles (CH et HS).
Pour de plus amples informations vous pouvez consulter la RFC 1035

Fichier /etc/resolv.conf

search example.com

Il est pas des plus compliqu celui-la !

Chroot de bind
Par dfaut, la configuration de bind emploie l'utilisateur bind pour excuter le dmon named.

Ainsi, on retrouve cette option dans /etc/default/bind9 (NOTE : cela n'est pas valide pour Debian Jessie
qui utilise systemd) :

OPTIONS="-u bind"

Le script de dmarrage de bind /etc/init.d/bind9 lit ce fichier de configuration quand le service est lanc.

Dmarrer bind en tant que simple utilisateur est une bonne pratique mais pour lancer le dmon dans un
environnement chroot, nous devons galement spcifier le rpertoire chroot. Cela se fait en utilisant la
mme variable OPTIONS dans /etc/default/bind9.

Pour commencer, stoppez le service bind :

/etc/init.d/bind9 stop

Ensuite, ditez /etc/default/bind9 (pas pour Debian Jessie) :

OPTIONS="-u bind -t /var/bind9/chroot"

Pour Jessie, crez le fichier /etc/systemd/system/bind9.service avec les options "-t /var/bind9/chroot" :
[Unit]

Description=BIND Domain Name Server

Documentation=man:named(8)

After=network.target

[Service]

ExecStart=/usr/sbin/named -f -u bind -t /var/bind9/chroot

ExecReload=/usr/sbin/rndc reload
ExecStop=/usr/sbin/rndc stop

[Install]

WantedBy=multi-user.target

Pour Jessie, aprs avoir cr le fichier ci-dessus, mettez jour le lien symbolique vers le fichier avec :

systemctl reenable bind9

Maintenant, crez la structure de rpertoire de chroot :

mkdir -p /var/bind9/chroot/{etc,dev,var/cache/bind,var/run/named}

Crez les fichiers spciaux de priphrique requis et dfinissez les permissions appropries :

mknod /var/bind9/chroot/dev/null c 1 3
mknod /var/bind9/chroot/dev/random c 1 8

chmod 660 /var/bind9/chroot/dev/{null,random}

Dplacez le rpertoire de configuration actuel dans le nouveau rpertoire chroot :

mv /etc/bind /var/bind9/chroot/etc

Crez maintenant un lien symbolique dans /etc pour une compatibilit :

ln -s /var/bind9/chroot/etc/bind /etc/bind

Si vous voulez utiliser la timezone locale dans le chroot (par exemple, pour syslog) :

cp /etc/localtime /var/bind9/chroot/etc/

Changez le propritaire sur les fichiers que vous venez de dplacer dessus et le reste de la structure de
rpertoire du chroot nouvellement cr :
chown bind:bind /var/bind9/chroot/etc/bind/rndc.key
chmod 775 /var/bind9/chroot/var/{cache/bind,run/named}

chgrp bind /var/bind9/chroot/var/{cache/bind,run/named}

ditez la variable PIDFILE dans /etc/init.d/bind9 vers le chemin correct :

PIDFILE=/var/bind9/chroot/var/run/named/named.pid

Enfin, indiquez rsyslog d'couter les journaux (logs) de bind dans le bon endroit :

echo "\$AddUnixListenSocket /var/bind9/chroot/dev/log" > /etc/rsyslog.d/bind-chroot.conf

Redmarrez rsyslog et dmarrez bind :

/etc/init.d/rsyslog restart; /etc/init.d/bind9 start

Gestion des clients


Comme je l'ai mentionn au dbut, l'attribution des adresses IP sur le rseau local est effectu par le
serveur DHCP. Ainsi, pour dfinir notre serveur DNS aux diffrents clients, il est ncessaire d'ajouter au
fichier de configuration DHCP les deux lignes suivantes :

option domain-name "example.com"

option domain-name-server sid.example.com

Il faut ajouter aux fichiers (je pense) les zones pour lesquelles DHCP devrait effectuer automatiquement des
mises jour.

Syntaxe (paramtres "=>" commentaires) :

zone [name.of.the.zone.] {

primary 127.0.0.1; => le serveur DNS primaire est sur la mme machine que DHCP
key rndc-key; => il est ncessaire de fournir la cl de scurit (via un include) dans le dbut du fichier
de configuration du serveur DHCP,
Ce doit tre la mme cl que celle qui scurise le allow-update pour la zone dans le named.conf.local
de Bind9.

Exemples de [name.of.the.zone.] (avec le "." la fin) :

- example.com. : pour la zone directe de cet objet,

- 0.168.192.in-addr.arpa. : pour la zone inverse de cet objet.

Pour de plus amples informations sur la mise en place de la mise jour dynamique des enregistrements
DNS via DHCP voir ici
Les outils de tests
La commande dig : Elle permet d'interroger directement le serveur DNS de son choix et d'obtenir de
nombreuses informations, en plus de la rsolution de noms et la rsolution inverse.
$ dig nomade-frjo.stones.lan

; <<>> DiG 9.4.2 <<>> nomade-frjo.stones.lan

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15760


;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;nomade-frjo.stones.lan. IN A

;; ANSWER SECTION:

nomade-frjo.stones.lan. 900 IN A 192.168.0.242

;; AUTHORITY SECTION:

stones.lan. 604800 IN NS emerald.stones.lan.

stones.lan. 604800 IN NS diamond.stones.lan.

;; ADDITIONAL SECTION:

diamond.stones.lan. 604800 IN A 192.168.0.1

emerald.stones.lan. 604800 IN A 192.168.0.2

;; Query time: 20 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Mar 28 20:53:09 2008

;; MSG SIZE rcvd: 131

$ dig -x 192.168.0.242
; <<>> DiG 9.4.2 <<>> -x 192.168.0.242

;; global options: printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37702

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;242.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:

242.0.168.192.in-addr.arpa. 900 IN PTR nomade-frjo.stones.lan.

;; AUTHORITY SECTION:

0.168.192.in-addr.arpa. 604800 IN NS diamond.stones.lan.

0.168.192.in-addr.arpa. 604800 IN NS emerald.stones.lan.

;; ADDITIONAL SECTION:

diamond.stones.lan. 604800 IN A 192.168.0.1

emerald.stones.lan. 604800 IN A 192.168.0.2

;; Query time: 19 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Fri Mar 28 20:53:31 2008


;; MSG SIZE rcvd: 155
La commande nslookup : Elle est moins performante mais reste utile.

$ nslookup etch

Server: 192.168.0.1

Address: 192.168.0.1#53
Name: etch.example.com

Address: 192.168.0.2

$ nslookup 192.168.0.2

Server: 192.168.0.1

Address: 192.168.0.1#53

2.0.168.192.in-addr.arpa name = etch.example.com.

named-checkconf : Elle permet de vrifier la syntaxe des fichers de configuration de Bind9.

# named-checkconf -z

zone localhost/IN: loaded serial 1

zone 127.in-addr.arpa/IN: loaded serial 1

zone 0.in-addr.arpa/IN: loaded serial 1

zone 255.in-addr.arpa/IN: loaded serial 1


zone estar.lan/IN: loaded serial 20080315

zone 0.168.192.in-addr.arpa/IN: loaded serial 20080315

zone 10.in-addr.arpa/IN: loaded serial 1

zone 16.172.in-addr.arpa/IN: loaded serial 1

zone 17.172.in-addr.arpa/IN: loaded serial 1

zone 18.172.in-addr.arpa/IN: loaded serial 1

zone 19.172.in-addr.arpa/IN: loaded serial 1


zone 20.172.in-addr.arpa/IN: loaded serial 1

zone 21.172.in-addr.arpa/IN: loaded serial 1

zone 22.172.in-addr.arpa/IN: loaded serial 1

zone 23.172.in-addr.arpa/IN: loaded serial 1

zone 24.172.in-addr.arpa/IN: loaded serial 1

zone 25.172.in-addr.arpa/IN: loaded serial 1

zone 26.172.in-addr.arpa/IN: loaded serial 1

zone 27.172.in-addr.arpa/IN: loaded serial 1


zone 28.172.in-addr.arpa/IN: loaded serial 1

zone 29.172.in-addr.arpa/IN: loaded serial 1

zone 30.172.in-addr.arpa/IN: loaded serial 1

zone 31.172.in-addr.arpa/IN: loaded serial 1

zone 168.192.in-addr.arpa/IN: loaded serial 1

named-checkzone : Elle permet de vrifier la validit des fichiers de zones avant de recharger la
configuration.

# named-checkzone example.com /var/cache/bind/db.example.com

zone example.com/IN: loaded serial 20080315

OK
# named-checkzone 0.168.192.in-addr.arpa /var/cache/bind/db.example.com.inv

zone 0.168.192.in-addr.arpa/IN: loaded serial 20080315

OK

Liens et Ressources
rfc1035 - Implementation ans specifications
rfc1591 - Domain Name System Structure and Delegation
rfc2606 - Reserved Top Level DNS Names
http://www.bind9.net/manual/bind/9.3.2/Bv9ARM - Bind 9 Administrator Manual
Services Whois :
Gandhi
AFNIC

?ToDos

Finir les dfinitions


Ajouter DNSSEC.

CategoryDebugging

fr/Bind9 (last modified 2016-08-31 20:20:45)

MoinMoin Powered Python Powered Debian Wiki team, bugs and config available. Hosting provided by Metropolitan Area Network

Darmstadt

Вам также может понравиться