Debian - Bind9

Un article de Wiki.OmBreNoiRe.net.

Vous être en train de lire Comment installer un serveur sécurisé sur Debian.

Sommaire Install Aptitude Locales SSHd Shorewall 6wall DHCP3-server Bind9 VsFTPd Apache/MySQL Mail BackupManager


Sommaire

Introduction

Un serveur DNS a 2 rôles :

  • obtenir la correspondance entre un nom de domaine et une adresse IP
  • transmettre aux autres serveurs de noms les adresses IP des zones de vos domaines.

De plus, il existe les serveurs DNS primaires qui définissent des zones pour votre domaine, et les DNS secondaires qui relaient ces données de zones. Je vais vous expliquer comment faire un DNS qui sera à la fois (pour l'exemple) primaire/secondaire et de cache (chargé de résoudre les noms pour votre réseau local).

Je ne vais pas vous faire un cours sur les serveurs DNS, mais comme d'habitude vous trouverez ici des fichiers à presque copier-coller pour avoir un serveur DNS qui fonctionne très rapidement :)

Installation

root@monordi:~# aptitude install bind9

Et voilà, le travail !

Configuration

Il y a 2 répertoires pour les fichiers par défaut : - /etc/bind/ qui contient les fichiers de configurations - /var/cache/bind/ qui contient les zones de vos domaines

Les fichiers /etc/bind/db.*

Il n'y a rien à modifier dans ces fichiers.

Le fichier /etc/bind/named.conf

Remplacer votre fichier par le miens :

Fichier : /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//

// Declaration de la clef en incluant directement le fichier clef.
include "/etc/bind/rndc.key";

// Autorise une mise a jour avec la clef.
controls {
        inet 127.0.0.1 allow { any; } keys { "cle-rndc"; };
};

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

logging {
        category "unmatched" { "null"; };
        category "default" { "default_syslog"; "default_debug"; };
};

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/etc/bind/db.root";
};

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";
};

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

Le fichier /etc/bind/named.conf.local

Remplacer votre fichier par le miens :

Fichier : /etc/bind/named.conf.local
//
// Do any local configuration here
//


// PARTIE 1 - LOCAL //
// REVERSE LOCAL
zone "0.168.192.in-addr.arpa" {
        type master;
        file "/var/cache/bind/db.monrezo.rez.rev";
};

// DNS LOCAL
zone "monrezo.rez" {
        type master;
        file "/var/cache/bind/db.monrezo.rez";
};

// PARTIE 2 - DNS PRIMAIRE //
// ADRESSES IP DE MES SERVEURS DNS SECONDAIRES
acl "mes_dns_sec" {
        94.27.40.10;
        39.39.43.43; 
};

// DNS PRIMAIRE
zone "db.domaineprim.net" {
        type master;
        file "/var/cache/bind/primaire/db.domaineprim.net";
        allow-transfer { mes_dns_sec; };
        allow-query { any; };
};

// PARTIE 3 - DNS SECONDAIRE //
// DNS SECONDAIRE

zone "domainesec.com" {
        type slave;
        file "/var/cache/bind/secondaire/db.domainesec.com";
        masters {23.18.24.25;};
        allow-query { any; };
        notify no;
};

Vous l'avez compris ce fichier définis tous vos domaines, il faut donc prendre ce qui vous interesse uniquement en sachant que vous avez 3 parties dans ce fichier :

  • Partie 1 qui définie les domaines locaux (direct et reverse) :
    • Veuillez modifier le nom monrezo.rez par cequevoulez.rez et n'oubliez pas d'adapter partout où je fais référence à ce domaine (vous pouvez aussi laisser, ça vous simplifira la vie).
    • Cette configuration sous entends que sur votre réseau local les adresses IP sont 192.168.0.X (ce qui est expliquée dans les étapes précédentes)
  • Partie 2 qui définie les domaines pour lesquelles le serveur est DNS primaire
    • mes_dns_sec contient la liste des serveurs secondaires de votre domaine
    • Cette configuration permet donc à votre DNS de fournir les IP pour le domaine configuré à savoir domaineprim.net.
  • Partie 3 qui définie les domaines pour lesquelles le serveur est DNS secondaire
    • 23.18.24.25 est l'adresse du serveur primaire

Ces 3 parties sont entièrement compatible, à vous d'en prendre 1, 2, ou même les 3 en fonctions de vos besoins (par exemple si vous vous voulez faire un serveur standalone qui est DNS primaire (genre sur une [www.kimsufi.com kimsufi]) vous n'allez prendre que la partie 2, alors que pour votre passerelle maison, vous prendrez peut être la partie 1 et 3. A vous de voir !


=== Le fichier /etc/bind/named.conf.options

Version qui gère l'IPv6

Remplacer votre fichier par le miens :

Fichier : /etc/bind/named.conf.options
acl ip-ok {
        // IPv4 du serveur
        127.0.0.1;
        1.2.3.4;
        // IPv6 du serveur
        ::1/128;
        2001:d0d0:1::1/64;
        // Les IP du reseau local
        192.168.0.0/24
};

options {
        directory "/var/cache/bind";
        query-source-v6 address * port 53;
        listen-on-v6 { any; };
        auth-nxdomain no;
        version "version";
        allow-transfer { none; };
        allow-query { ip-ok; };
        allow-recursion  { ip-ok; };
};

Version qui NE gère PAS l'IPv6

Remplacer votre fichier par le miens :

Fichier : /etc/bind/named.conf.options
acl ip-ok {
        // IPv4 du serveur
        127.0.0.1;
        1.2.3.4;
        // Les IP du reseau local
        192.168.0.0/24
};

options {
        directory "/var/cache/bind";
        auth-nxdomain no;
        version "version";
        allow-transfer { none; };
        allow-query { ip-ok; };
        allow-recursion  { ip-ok; };
};

Remarques

  • Si vous avez pris le fichier pour IPv6 :
    • vous devez remplacer 2001:d0d0:1::1/64; par votre adresse IPv6
    • ajouter après celle-ci les autres adresses IPv6 que vous avez en circulation sur votre réseau grâce au brouting, et les autres adresses IPv6 du réseau
  • Pour les 2 fichiers (IPv4 ET IPv6) :
    • Remplacer 1.2.3.4 par l'adresse IPv4 fixe du serveur, enlever si le serveur n'a pas d'adresse fixe, et ajouter les autres fixes si le serveur possède plusieurs IP fixes
    • Enlever 192.168.0.0/24 si vous n'avez pas de réseau local, et adapter si vos adresses IP ne sont de ce type.

Le fichier rndc.conf

Ce fichier n'est pas inclus dans la configuration de base avec le paquet, à vous de le créer et d'y mettre :

Fichier : /etc/bind/rndc.conf
options {
default-server 127.0.0.1;
default-key "ma-cle";
};

server localhost {
key "ma-cle";
};

Le fichier rndc.key

Avant d'écrire de fichier, il vous faut générer une clé grâce à la commande :

root@monordi:~# dnssec-keygen -a hmac-md5 -b 256 -n HOST ma-cle

Kma-cle.+157+29852

Problème connu !
Cette commande peut avoir l'air d'être bloquée. Il n'en n'est rien : elle lit des chiffres aléatoires dans /dev/random, il est donc possible que le fichier soit vide. Dans ce cas, vous devez faire un peu d'activité sur la machine. En général, je lance un
root@monordi:~# find /
et ça fait l'affaire :)

La commande précédente à génèrer un fichier, dans notre exemple Kma-cle.+157+29852.private et Kma-cle.+157+29852.key

Editer le fichier Kma-cle.+157+29852.private et récupérer la clé :

Fichier : /etc/bind/Kma-cle.+157+29852.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: s/5/T5qDoTqiE1FXjbdV6KL/TmRvOWzbdjnYGxhq9K8=

Ici la clé est s/5/T5qDoTqiE1FXjbdV6KL/TmRvOWzbdjnYGxhq9K8=.

Maintenant que vous avez la clé, remplacer le fichier /etc/bind/rndc.key par le miens en changeant la clé :

Fichier : /etc/bind/rndc.key
key "ma-cle" {
        algorithm hmac-md5;
        secret "s/5/T5qDoTqiE1FXjbdV6KL/TmRvOWzbdjnYGxhq9K8=";
};

Finition du répertoire /etc/bind

La configuration est terminée dans ce répertoire, exécutez donc les commandes suivantes :

root@monordi:~# cd /etc/bind

root@monordi:~# chmod 644 *
root@monordi:~# chmod 640 rndc*
root@monordi:~# chgrp bind *

Préparation du répertoire /var/cache/bind

  • Si vous hébergez des domaines en tant que serveur DNS primaire faite le répertoire /var/cache/bind/primaire :
root@monordi:~# cd /var/cache/bind

root@monordi:~# mkdir primaire
root@monordi:~# chgrp bind primaire
root@monordi:~# chmod 755 primaire

  • Si vous hébergez des domaines en tant que serveur DNS secondaire faite le répertoire /var/cache/bind/secondaire:
root@monordi:~# cd /var/cache/bind

root@monordi:~# mkdir secondaire
root@monordi:~# chgrp bind secondaire
root@monordi:~# chmod 775 secondaire

DNS Primaire - Exemple de fichier Zones

Conformément à mon fichier /etc/bind/named.conf.local je crée le fichier /var/cache/bind/primaire/db.domaineprim.net :

Fichier : /var/cache/bind/primaire/db.domaineprim.net
;
; Zone de domaineprim.net
;
$TTL    3D
@       IN      SOA     monordi.mondomaine.net. contactdns.mondomaine.net. (
                     2008062402         ; Serial
                          86400         ; Refresh
                           7200         ; Retry
                        3628800         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      monordi.mondomaine.net.
@       IN      NS      ns2.mondomaine.net.
@       IN      MX      10      mx1.mondomaine.net.
@       IN      MX      30      mx2.mondomaine.net.

domaineprim.net. IN      A       1.2.3.4
www              IN      A       1.2.3.4
blog             IN      A       1.2.3.4
ftp              IN      A       1.2.3.4

Remarque :

  • le serial 2008062402 a un format précis que vous devez respecter, ici cela dit que la dernière modification a eu le 24/06/2008 et que c'est la 2ème modification (vous l'avez compris vous êtes limités à 99 modifications par jours)
  • monordi.mondomaine.net pointe vers votre serveur (vu que c'est lui le serveur primaire), il faut donc aller au préalabe configurer votre serveur primaire qui gere mondomaine.net.
  • le point terminal . indique que c'est une adresse complete, si vous ne mettez pas de point il complete par le nom du domaine.
Astuce !

Il y a deux façon d'indiquer que l'on est serveur primaire pour un domaine :

  • On peut utiliser un domaine que j'appelle "utilitaire", c'est à dire qu'il ne va servir qu'à nommer des serveurs par exemple ns1.mondomaine.net, ns2.mondomaine.net, monordi.mondomaine.net, etc... Ce domaine doit être géré intégralement par votre registrar (au passage je vous conseil Bookmyname).

Ainsi auprès du registrar chez qui vous avez déclaré domaineprim.net vous pouvez indiqué monordi.mondomaine.net comme serveur primaire.

  • L'autre façon de faire est de s'auto-déclarer auprès des serveurs root (voir avec votre registrar), cela permet d'avoir comme adresse de dns ns1.domaineprim.net et ns2.domaineprim.net qui gere domaineprim.net

DNS Local - Exemple de fichier Zones

Conformément à mon fichier /etc/bind/named.conf.local je crée les fichiers /var/cache/bind/primaire/db.monrezo.rez et {{filename|/var/cache/bind/primaire/db.monrezo.rez.rev

Fichier : /var/cache/bind/primaire/db.monrezo.rez
;
; Zone de monrezo.rez (domaine local)
;
$TTL    604800
@       IN      SOA     monordi.monrezo.rez. root.monrezo.rez. (
                     2008062401         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      monordi.monrezo.rez.

monordi         IN      A       192.168.0.1
autrordi        IN      A       192.168.0.2
Fichier : /var/cache/bind/primaire/db.monrezo.rez.rev
;
; Zone Reverse de monrezo.rez (domaine local)
;
$TTL    604800
@       IN      SOA     monordi.monrezo.rez. root.monrezo.rez. (
                     2008062401         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      monordi.monrezo.rez.
1       IN      PTR     monordi.monrezo.rez.
2       IN      PTR     autreordi.monrezo.rez.

Le fichier reverse sert à faire la résolution inverse (de l'IP vers le nom de domaine).

Finalisation de l'installation

On édite le fichier /etc/host.conf et /etc/resolv.conf pour qu'ils contiennent exactement :

Fichier : /etc/host.conf

order hosts,bind multi on

Puis

Fichier : /etc/resolv.conf

nameserver 127.0.0.1

Tous les fichiers sont en place, il faut redémarrer la machine :

root@monordi:~# reboot

Mise à jour de la configuration

Si vous modifier un fichier de zone, n'oublier pas de changer le serial. Une fois les modification terminées, faite :

root@monordi:~# rndc reload

Conclusion

Vous avez donc un serveur DNS qui tourne, si vous avez besoin d'une meilleure compréhension des DNS, je vous invite à vous rendre sur la doc du site, néanmoins, je n'exclue pas de faire une explication un peu plus poussée si le besoin s'en refait sentir :)

Vous pouvez passer à l'étape suivante, qui est la mise en place d'un serveur FTP, VsFTPd.

Affichages
Boîte à outils
Publicité