Table des matières
BIND
Ou DNS ou “named”
installer
package
# aptitude update # aptitude install bind9
configurer
Par defaut, je crois que tout est permis.
mon reseau
Restreindre les droits d'interrogation…
Pour cela, il faut editer le fichier /etc/bind/named.conf.options
, et:
Configurer son reseau:
Limiter les droits:
// zone local acl mylan { 127.0.0.1; 10.22.0.0/24; };
Où “10.22.0.0/24” est “mon” reseau local.
Puis dans la section “options”, faire en sorte d'avoir:
allow-notify { none; }; allow-transfer { none; }; allow-query { mylan; }; allow-recursion { mylan; };
Ainsi, il n'y a que “mylan” qui peut utiliser “mon” DNS, et les autres droits seront definis ultérieurement au cas par cas.
log
Pour qu'on puisse voir des trucs pertinents dans les logs, on peut ajouter dans le fichier /etc/bind/named.conf.options
:
// <tj> logging { category "unmatched" { "null"; }; category "default" { "default_syslog"; "default_debug"; }; }; // </tj>
Zone
master
il faut preparer les fichiers “db” au préalable ! |
Il faut editer le fichier: /etc/bind/named.conf.local
On declare une zone locale, dont on est maitre.
Soit la zone de conversion “nom” en “ip”:
zone "thierry-jaouen.local" { type master; file "/etc/bind/LOCAL/db.thierry-jaouen.local"; allow-query { mylan; }; };
Soit la zone inverse, de conversion “ip” en “nom”:
zone "0.168.192.in-addr.arpa" { type master; file "/etc/bind/LOCAL/db.192.168.0"; allow-query { mylan; }; };
En fait, la section “allow-query” est inutile parce ce que redondante avec la declaration de la section “options”.
slave
il faut preparer les fichiers “db” au préalable ! |
Il faut editer le fichier: /etc/bind/named.conf.local
Imaginons un autre serveur DNS, qui va relayer les zone “master” vu ci-dessus.
Pour cela, on declare un “slave”, c'est a dire une zone qui va recuperer les informations auprés d'un “master”.
sur le SLAVE
zone "thierry-jaouen.local" { type slave; file "/etc/bind/SLAVE/db.thierry-jaouen.local"; masters { <ADRESSE_DU_MAITRE>; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "/etc/bind/SLAVE/db.192.168.0"; masters { <ADRESSE_DU_MAITRE>; }; };
Bien s'assurer que le user “bind” a le droit d'ecrire dans le repertoire “SLAVE” |
Si nécessaire:
# cd /etc/bind # mkdir SLAVE # chown root:bind SLAVE # chmod g+sw SLAVE # ls SLAVE -ld drwxrwsr-x 2 root bind 4096 2009-01-25 01:32 SLAVE
sur le MASTER
Modifier les zones concernés, afin qu'elles autorisent le “transfert” de zone ! Donc, ajouter:
allow-transfer { <ADRESSE_IP_DU_SLAVE>; };
La securité tient simplement aux adresses IP ! c'est mince. Voir la section suivant pour l'authentification. |
Notify
Lien: http://docstore.mik.ua/orelly/networking_2ndEd/dns/ch10_03.htm
En l'etat, les mises a jour des zones seront faites en fonction du paramètre “refresh” (dans le SOA)…
Si on veut une “notification” rapide de la mise a jour d'une zone, alors, dans le fichier “SOA” du maitre, il faut ajouter les “slaves”. Par exemple:
SOA .... ... NS ns.thierry-jaouen.fr NS ns-slave1.xxxxxxx.xxx NS ns-slave2.xxxxxxx.xxx
“ns-slave1” et “ns-slave2” seront notifiés des modifications du maitres: en retour, ils devront interroger le maître pour ce mettre a jour.
Lorsqu'on a un “slave” intermediare qui doit notifier une modification a un autre slave, en cascade, il faut ajouter dans la déclaration de cette zone “slave”:
type slave; ... also-notify { ip-d-un-autre-slave; }; ...
Delegate Zone
Le but: déléguer un sous domaine a un autre DNS, ainsi que le reverse.
Exemple de sous-domaine:
univers.thierry-jaouen.local
Afin que ca fonctionne bien, surtout pour le reverse , on doit attribuer une tranche d'un reseau, comme:
192.168.16.192/28
… ce qui délègue l'usage des ip 192.168.16.192 a 192.168.16.207.
zone
reverse
TSIG
authentifier un slave
generer key
Dans un répertoire du maitre (ou de l'esclave), taper ça:
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST rndc-key
Ca va créer 2 fichiers avec de droles de noms (par exemple):
-rw------- 1 root bind 81 2009-01-27 23:14 Krndc-key.+157+26049.private -rw------- 1 root bind 52 2009-01-27 23:14 Krndc-key.+157+26049.key
Mais peu importe: on veut juste extraire la clé qui est dedans, et puis effacer ces fichiers ! Exemple:
... <snip> ... Key: 0jnu3SdsMvzzlmTDPYRceA== ... <snip> ...
fichier key
Sur le maitre et sur le slave, on peut faire comme cela:
# cd /etc/bind # mkdir keys # chown root:bind keys # chmod o-rx keys # cd keys
Creer un fichier , par exemple bindtest-netcave.key
et y mettant dedans:
key "bindtest-netcave" { algorithm hmac-md5; secret "0jnu3SdsMvzzlmTDPYRceA=="; };
named.conf.local
Inserer enfin la configuration suivante dans bind
(dans “named.conf.local” ou ailleurs) :
include "/etc/bind/keys/bindtest-netcave.key";
et puis pour le maitre:
server <IP_DU_SLAVE> { keys { bindtest-netcave; }; };
sinon pour l'esclave:
server <IP_DU_MAITRE> { keys { bindtest-netcave; }; };
Le reste ne change pas. C'est a dire qu'on a toujours, un peu plus loin (juste aprés par exemple):
Pour le maitre par exemple:
zone "underworld.local" { type master; file "/etc/bind/LOCAL/db.underworld.local"; allow-query { 10.22.0/24; }; allow-transfer { <IP_DU_SLAVE>; }; };
Si j'ai bien compris, la declaration “server” s'applique partout où l'on retrouve la même IP…?
Tips
Vider le cache pour tout
Sans redemarrer:
# rndc flush
Vider cache pour 1 domaine
dump cache
Lien: http://ubuntuforums.org/showthread.php?t=903651
Voir un etat du cache bind:
# rndc dumpdb -cache
Et regarder dans le fichier là:
/var/cache/bind/named_dump.db
reload etc...
Il y a 2 manières de recharger la config:
# /etc/init.d/bind9 reload Reloading domain name service...: bind.
Ou bien:
# rndc reload server reload successful
CIDR
Performance
Tester les perfs: http://www.bortzmeyer.org/performances-serveur-dns.html
Limiter les DoS: http://www.bortzmeyer.org/rate-limiting-dns-open-resolver.html