Mettre en place un serveur DNS classique ou utilisant DNSSEC

Ce tutoriel est en cours de rédaction, il n'est pas conseillé de le suivre jusqu'à sa parution définitive.

Ce tutoriel décrit l'installation de serveurs DNS primaires et secondaires ainsi que l'utilisation de 'ns6.gandi.net'.

L'installation et la gestion d'un serveur DNS (serveur de noms) ne prend que quelques minutes. Seuls quelques fichiers doivent être configurés pour que vos serveurs DNS soient opérationnels.

Installer BIND

Dans un premier temps, vous devez installer l'application du serveur. Dans la mesure où (Berkeley Internet Name Daemon) est de loin le serveur de nom le plus fréquemment utilisé, c'est la version 9 de celui-ci que nous installons avec la commande ci-dessous.

apt-get install bind9 dnsutils

es sous domaines à leurs serveurs. |

reverse DNS zone file L'opposé de “zone file” (fichier de zones DNS)

named.conf.local

La configuration du serveur BIND s'effectue via le fichier named.conf.local. Vous devez y ajouter vos zones. Ce fichier peut être modifié avec un éditeur. Par exemple, si vous utilisez nano, tapez :

nano /etc/bind/named.conf.local

Puis, pour ajouter une zone à votre serveur DNS, ajoutez les éléments suivants (remplacer les occurences de “internautique.fr” par la zone que vous voulez gérer :

zone "internautique.fr" {
      type master;
      file "/etc/bind/zones/internautique.fr.db";
      };
  • La directive 'zone' détermine la zone à gérer, soit le sous domaine vide ou bien un autre sous domaine dans le cas d'une délégation de zone;
  • La directive 'type' peut prendre deux valeurs, 'master' ou 'slave'. Le serveur primaire (maître) sera toujours de type 'master', c'est sur celui-ci que devront être éditer les fichiers de zone. Les serveurs secondaires (esclaves) seront quant à eux de type 'slave' et iront récupérer les informations de la zone depuis le serveur primaire;
  • La directive file permet d'indiquer où se trouve la configuration de la zone à gérer. Pour une meilleure organisation des fichiers, je vous suggère de créer un répertoire 'zones' dans '/etc/bind' ou toutes les configurations de fichiers de zone seront situés;

D'autres directives peuvent être ajouter à la zone, nous verrons lesquels par la suite, notamment lors de la mise en place des serveurs DNS secondaires.

Fichier de zones

Le fichier de zones réunit tous les enregistrements qui indiquent vers quels serveurs pointent votre domaine et ses sous-domaines.

Le contenu de ce fichier de zones correspond aux éléments utilisés dans la gestion des zones DNS disponible sur l'interface Gandi (plus d'informations) lorsque vous utilisez les serveurs DNS de Gandi.

1. Commencez par créer le dossier des zones :

Ce dossier contiendra tous vos enregistrements de zones.

mkdir /etc/bind/zones

2. Puis, créez les zones pour vos domaines :

Vous devez créer votre fichier de zones afin de définir les pointages pour les sous domaine de votre domaine. Il existe des champs de type différents, les plus utilisés étant :

  • A : Pour faire pointer un domaine vers une adresse IP (Celle-ci ne doit pas appartenir à un réseau privé de préférence dans le cas d'un serveur DNS public);
  • CNAME : Pour faire pointer le sous domaine vers un autre sous domaine
  • MX : Pour définir les serveurs mails ainsi que leurs priorités.
  • NS : Pour définir les serveurs DNS du domaine ou du sous domaine

Il existe d'autres types de champs, ceux indiqués ci-dessus sont les plus couramment utilisés. Pour plus d'informations : http://fr.wikipedia.org/wiki/Domain_Name_System#Principaux_enregistrements_DNS

Tapez la commande suivante pour créer le fichier (remplacez internautique.fr par votre propre domaine) :

nano /etc/bind/zones/internautique.fr.db

Voici un extrait de fichier zone pour exemple :

internautique.fr.  IN   SOA   boom.whack-a-mole.eu. admin.internautique.fr. (
  
  2011120202
  10800
  3600
  604800
  38400
  )
    
  @ IN NS ns1.internautique.fr.
  @ IN NS ns2.internautique.fr.
  
  ns1 10800 IN A  95.142.172.164
  ns2 10800 IN A  95.142.172.162

  @ 10800 IN MX 10 spool.mail.gandi.net.
  @ 10800 IN MX 50 fb.mail.gandi.net.
  pop 10800 IN CNAME access.mail.gandi.net.
  imap 10800 IN CNAME access.mail.gandi.net.
  smtp 10800 IN CNAME relay.mail.gandi.net.
  webmail 10800 IN CNAME agent.mail.gandi.net.

(Vous devrez bien entendu remplacer les valeurs citées par les vôtres. Ici, le domaine utilise les serveurs e-mail de Gandi, et nos propres serveurs HTTP).

Comme vous pouvez le voir, la seconde partie de ce fichier de zone ressemble beaucoup à l'interface expert de la page de gestion de zones de l'interface Gandi ..
.. car il s'agit en réalité des mêmes éléments ! Les éléments inscrits sur ladite interface comme sur votre propre fichier de zones DNS sont en réalité les mêmes.

Comprendre les valeurs du SOA

$TTL    86400  @ IN SOA dns1.domaine.tld. admin.domain.tld.  (
        2011021442 ; Serial :  Numéro de série à incrémenter pour toute 
                   ;           modification de la zone DNS. Les DNS
                   ;           secondaires vérifient ce numéro, s'il est
                   ;           supérieur sur le serveur DNS primaire, le
                   ;           serveur DNS secondaire télécharge la 
                   ;           nouvelle zone.
                   ;           TimestampUnixXX ou YYYYMMDDXX où XX = version
                   ;           Ici, le 14 Février 2011, version 42
        86400      ; Refresh : Durée avant rafraîchissement du cache
                   ;           secondes, le serveur esclave va entrer en
                   ;           communication avec le maitre et si il ne
                   ;           le trouve pas, il fera une nouvelle
                   ;           tentative au bout du délai Retry et si au
                   ;           bout du délai Expire il considerera que le
                   ;           serveur n'est plus disponible.
        3600       ; Retry   : Temps avant le nouvel essai
        2419200    ; Expire  : Expiration du rafraîchissement du cache
        86400 )    ; Minimum : Durée minimale du cache

Toutes les valeurs sont en secondes, certains registres gérant les noms de domaine demandent des valeurs comprises entre certains valeurs pour fonctionner.

Fichier de reverse DNS

Commencez par créer votre fichier (remplacez 190.70.217 avec la véritable adresse de votre reverse) :

nano /etc/bind/zones/rev.190.70.217.in-addr.arpa

Puis, tapez le code ci-dessous en remplaçant :

  • “whack-a-mole.eu.” par votre nom de domaine
  • “boom.whack-amole.eu.” par votre serveur DNS
  • Le nombre “17” par le numéro de votre machine (ex. si votre adresse ip est 190.70.217.17)
@ IN SOA whack-a-mole.eu. admin.whack-a-mole.eu. (
                      2006081401;
                      28800;
                      604800;
                      604800;
                      86400);

                     IN    NS     boom.whack-a-mole.eu.
17                   IN    PTR    whack-a-mole.eu.

Redémarrer

Une fois votre serveur DNS configuré correctement, vous pouvez le redémarrer pour prendre en compte la nouvelle configuration :

/etc/init.d/bind9 restart

Si l'opération est un succès, vous obtiendrez ce message :

Stopping domain name service... bind                                    [ OK ]
Starting domain name service... bind                                    [ OK ]

À chaque modification de fichier de zone, le serveur DNS doit être redémarré afin d'être prise en compte.

Configuration d'un serveur DNS secondaire

La configuration d'un serveur DNS secondaire est très simple, il suffit d'installer les paquets 'bind9' et 'dnsutils' comme pour le serveur primaire, puis d'indiquer les zones gérés par le serveur dans '/etc/bind/named.conf.local'.

Voici les directive à indiquer dans le fichier :

zone "internautique.fr"
{
	type slave; Indique que c'est un serveur DNS esclave
	file "/var/cache/bind/internautique.fr.db"; Répertoire par défaut accessible par bind, où sera le fichier de zone
	masters { 95.142.172.164; }; Adresse IP du serveur DNS primaire
};

C'est tout ce qu'il est nécéssaire d'effectuer pour le serveur DNS secondaire. Enfin, nous allons indiquer au serveur primaire qu'il doit transférer le fichier de zone au serveur secondaire avec la directive 'allow-transfert'. Reprenons notre zone tel que nous l'avions laissée précédement, en y ajoutant la nouvelle directive :

zone "internautique.fr" 
{
	type master;
	file "/etc/bind/zones/internautique.fr.db";
	allow-transfer { 95.142.172.162; };
};

Enfin, redémarrez les deux serveurs afin que le transfert de zone se fasse entre les deux serveurs.

Vous pouvez également utiliser le serveur secondaire fournit par Gandi (ns6.gandi.net), dans ce cas il suffira d'indiquer l'adresse IP du serveur, soit '217.70.177.40'.

TSIG

Pré-requis

Nous allons dans un premier temps mettre à jour la date et l'heure des serveurs DNS afin d'éviter les attaques par rejeu, pour cela nous allons utiliser un NTP.

Il sera donc nécéssaire d'installer le paquet 'ntpdate' sur chaque serveur DNS, puis nous pourrons synchroniser l'heure et la date depuis le serveur de ntp de Gandi sur chacun d'eux :

apt-get install ntpdate & ntpdate ntp.gandi.net

Générer la clef partagé

Sur le serveur master, nous allons généré la clef partagé.

Pour cela, rendez vous dans le répertoire '/etc/bind/' puis créez le répertoire qui contiendra les clefs :

mkdir /etc/bind/keys ; cd /etc/bind/keys

Puis, générez la clef avec la commande :

dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST rndc-key

Cette commande aura pour effet de générer deux fichiers portant l'extension '.key' et '.private'. Le fichier '.key' contient la clef partagé, le fichier '.private' contient les informations sur la clef.

Nous allons donc récupérer la clef partagé, avec la commande :

root@Haz:/home/toor# cat Krndc-key.*.key 
rndc-key. IN KEY 512 3 165 MV5tZT2rbJmtu3Jx5Zof5kc+UjImaiAL2cNTaG9zq6tpHwz5HcJE0lZQ pbyqiX4erTEb29mqnWlj1Dy1WBVV5Q==

Ma clef partagée est donc 'MV5tZT2rbJmtu3Jx5Zof5kc+UjImaiAL2cNTaG9zq6tpHwz5HcJE0lZQ pbyqiX4erTEb29mqnWlj1Dy1WBVV5Q=='

Configuration du serveur maître

Reprenons notre fichier '/etc/bind/named.conf.local' afin d'indiquer la clef à utiliser.

Voici le fichier final que vous devriez avoir, les commentaires sont assez explicites :

//On définit la clef partagé à utiliser ainsi que l'algorythm de chiffrage utilisé
key "TSIG"
{
        algorithm hmac-sha512;
        secret "MV5tZT2rbJmtu3Jx5Zof5kc+UjImaiAL2cNTaG9zq6tpHwz5HcJE0lZQpbyqiX4erTEb29mqnWlj1Dy1WBVV5Q==";
};

//On indique avec quel serveur la clef est partagée
server 95.142.172.162
{
        keys { TSIG; };
};

zone "internautique.fr"
{
        type master;
        file "/etc/bind/zones/internautique.fr.db";
        allow-transfer { key TSIG; }; //On autorise le transfert de zone avec la clef
};

Enfin, rechargez la configuration de bind avec la commande '/etc/init.d/bind9 restart'.

Configuration du serveur secondaire

La configuration du serveur secondaire est assez simple, il suffira de modifier le fichier '/etc/bind/named.conf.local' de la même manière que sur le serveur primaire, en pensant à modifier l'adresse IP de la section 'serveur' :

key "TSIG"  
{
        algorithm hmac-sha512;
        secret "MV5tZT2rbJmtu3Jx5Zof5kc+UjImaiAL2cNTaG9zq6tpHwz5HcJE0lZQpbyqiX4erTEb29mqnWlj1Dy1WBVV5Q==";
};

server 95.142.172.164
{
        keys { TSIG; };
};

zone "internautique.fr"
{
	type slave;
	file "/var/cache/bind/db.internautique.fr";
	masters { 95.142.172.164; };
};

Une fois redémarré, vous pourrez visualiser les logs afin de voir si le transfert de zone s'est correctement déroulé :

Sur le serveur DNS primaire :

Dec  8 15:48:29 Monitor named[21659]: zone internautique.fr/IN: loaded serial 2011120801
Dec  8 15:48:29 Monitor named[21659]: zone internautique.fr/IN: sending notifies (serial 2011120801)
Dec  8 15:48:29 Monitor named[21659]: client 95.142.172.162#44168: transfer of 'internautique.fr/IN': AXFR-style IXFR started: TSIG tsig
Dec  8 15:48:29 Monitor named[21659]: client 95.142.172.162#44168: transfer of 'internautique.fr/IN': AXFR-style IXFR ended
Dec  8 15:48:29 Monitor named[21659]: client 95.142.172.162#47593: received notify for zone 'internautique.fr': TSIG 'tsig'

Sur le serveur DNS secondaire :

Dec  8 15:48:30 Haz named[8435]: client 95.142.172.164#59057: received notify for zone 'internautique.fr': TSIG 'tsig'
Dec  8 15:48:30 Haz named[8435]: zone internautique.fr/IN: Transfer started.
Dec  8 15:48:30 Haz named[8435]: transfer of 'internautique.fr/IN' from 95.142.172.164#53: connected using 95.142.172.162#44168
Dec  8 15:48:30 Haz named[8435]: zone internautique.fr/IN: transferred serial 2011120801: TSIG 'tsig'
Dec  8 15:48:30 Haz named[8435]: transfer of 'internautique.fr/IN' from 95.142.172.164#53: Transfer completed: 1 messages, 14 records, 501 bytes, 0.014 secs (35785 bytes/sec)
Dec  8 15:48:30 Haz named[8435]: zone internautique.fr/IN: sending notifies (serial 2011120801)

Vous ne pourrez pas configurer vos serveurs utilisant TSIG avec le serveur DNS secondaire de Gandi, la clef partagée ne pouvant pas lui être indiquée.

Plus de sécurité avec DNSSEC

Préambule

Je vous conseil de crée un dossier par zone.

ici, je me crée un dossier

/etc/bind/darkweb.fr

qui contient le fichier zone nommé “darkweb.fr”

pas “db.darkweb.fr”

naturellement, il faut faire suivre les fichiers sous-zone avec.

Générez vos clés

# clés ZSK

dnssec-keygen -a RSASHA1 -b 1024 -n ZONE darkweb.fr
Generating key pair...............................++++++ ....................................................................++++++ 
Kdarkweb.fr.+005+54218

# clés KSK

dnssec-keygen -f KSK -a RSASHA1 -b 2048 -n ZONE darkweb.fr
Generating key pair.KS........+++ .........................................................................................+++ 
Kdarkweb.fr.+005+04233

Implémentez vos clés dans votre fichier zone

dans votre fichier de zone, juste après le SOA

ajouter vos clés :

; 1024-bit ZSK: 
$INCLUDE Kdarkweb.fr.+005+54218.key
; 2048-bit KSK:
$INCLUDE Kdarkweb.fr.+005+04233.key
$ORIGIN .
$TTL 900	; 15 minutes
darkweb.fr		IN SOA	ns.ancier.darkweb.fr. chapuis.darkweb.fr. (
				2014022405 ; serial
 				3600       ; refresh (1 hour)
 				900        ; retry (15 minutes)
 				604800     ; expire (1 week)
 				180        ; minimum (3 minutes)
 				)

; 1024-bit ZSK: 
$INCLUDE Kdarkweb.fr.+005+54218.key
; 2048-bit KSK:
$INCLUDE Kdarkweb.fr.+005+04233.key
... suite de votre fichier zone

Signez votre fichier zone

dnssec-signzone -t -P -k Kdarkweb.fr.+005+04233.key darkweb.fr Kdarkweb.fr.+005+54218.key

Déclarez votre clé KSK dans Gandi

Service ⇒ Domain ⇒ “Votre domaine” ⇒ “Manage DNSSEC”

Ne vous souciez pas d'autre champ que “Public Key”

Oui, j'en profite du tuto pour remercié l'équipe de gandi pour sa détection automatique

de l'algorithm et du “flags”

en faisant directement un copier coller de votre clé KSK

après un :

tail -n 1 Kdarkweb.fr.+005+04233.key

copier tous ce que vous voyez :

darkweb.fr. IN DNSKEY 256 3 5 AwEAAa4v5aqBCXK5i8EES7mIFepj[......]+NU=

et faite le coller dans le champ “Public Key”, vous verrez la magie des outils de gandi configurer l'algo et le flags. et même délimité la clé voulu.

envoyer le tous.

Testez votre domaine

http://dnssec-debugger.verisignlabs.com/

Autoriser ou refuser les requêtes AXFR

Le Glue Record

Dernière modification: le 17/05/2017 à 18:36 par Romuald B. (Gandi)