Création de votre serveur DNS sur un Gandi Serveur (installation de BIND et ajout de DNSSEC)

Il existe plusieurs manières de créer un serveur DNS. Ici, nous allons vous présenter une méthode de création rapide sur un Gandi Serveur (Ubuntu 12.04 LTS 64 bits) afin que vous puissiez utiliser votre propre serveur DNS personnalisé. Nous vous indiquerons aussi comment sécuriser ce serveur avec DNSSEC.

1. Création de votre Gandi Serveur

Il est essentiel de commencer par cette étape car c'est celle-ci qui vous permettra d'obtenir l'adresse IP de votre serveur DNS ainsi que la machine sur laquelle vous allez installer ce service. Nous installerons BIND comme serveur DNS. Dans ce guide, nous prétendrons que l'adresse IP de notre serveur DNS est 203.0.113.0. Pour vous guider dans la création de votre serveur, vous pourrez visiter ce lien : https://wiki.gandi.net/fr/iaas/basics/create_a_server

2. Choisissez votre nom de domaine et créez le Glue record

Vous devrez décider quel nom de domaine vous allez lier à ce serveur DNS. Dans ce guide, nous prétendrons que le domaine est exemple.com et que nous souhaitons créer un serveur DNS appelé ns1.exemple.com.

Après avoir choisi le nom de domaine, vous pourrez directement créer les enregistrements “Glue” au registre depuis la page de gestion des enregistrements “Glue” de votre domaine. Pour savoir comment faire, rendez-vous ici : https://wiki.gandi.net/fr/domains/management/change-glue

3. Installez le serveur DNS (BIND)

apt-get install bind9 dnsutils

4. Modifiez le fichier /etc/bind/named.conf.local

Pour cela, vous pourrez utiliser votre éditeur de texte favori en ligne de commande afin d'ajouter la “zone” pour votre domaine qui sera lié au serveur DNS :

      zone "exemple.com" {
           type master;
           file "/etc/bind/db.exemple.com";
           allow-transfer { 217.70.177.40; };
      };

Afin de vous aider à mieux comprendre ces informations :

- zone “exemple.com” : souvenez-vous que dans notre exemple nous avons choisi le domaine exemple.com. Cela devra être remplacé par le domaine que vous aurez choisi.

- file ”/etc/bind/db.exemple.com” : il s'agit de l'endroit où se situe le fichier de zone actuel du domaine exemple.com. Ici, il se trouve directement dans le répertoire /bind/ mais vous pouvez le déplacer ailleurs si vous le souhaitez tant que vous indiquez le bon chemin à chaque fois que le serveur aura besoin de trouver le fichier.

- allow-transfer { 217.70.177.40; } : cette ligne permettra d'autoriser le transfert de zone vers le serveur DNS secondaire “NS6.GANDI.NET” dont nous avons préciser l'adresse IP. Bien entendu, vous pouvez remplacer cette adresse IP si vous utilisez un ou plusieurs autres serveurs DNS secondaires. Veillez juste à ne pas oublier le ”;” après la dernière adresse IP indiquée.

5. Créez le fichier de zone /etc/bind/db.exemple.com

A l'aide de votre éditeur de texte préféré (en ligne de commande), vous devrez créer votre fichier de zone.

Ci-dessous vous trouverez un exemple concernant notre domaine fictif et son adresse IP. Vous trouverez également les enregistrements nécessaires pour faire fonctionner Gandi Mail car ici nous avons l'intention d'utiliser Gandi Mail avec notre domaine :

$TTL    10800
@       IN      SOA     ns1.exemple.com. root.exemple.com. (
                             1         ; Serial
                         10800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
 ;
@       IN      NS      ns1.exemple.com.
ns1     IN      A       203.0.113.0

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

Si vous utilisez le fichier ci-dessus comme exemple pour votre zone, n'oubliez pas de modifier le nom de domaine, les adresses IP et le nom du serveur DNS (ns1) avec ce que vous allez utiliser.

6. Redémarrez BIND

Vous devez maintenant redémarrer BIND pour que les changements apportés prennent effet.

init.d/bind9 restart

Si cela ne fonctionne pas et que vous obtenez le message [FAIL], vous pouvez utiliser la commande suivante pour trouver l'erreur :

tail /var/log/daemon.log | grep named

7. Changez les serveurs DNS du domaine

Dès que vous êtes sûr que le serveur DNS fonctionne, vous pouvez changer les serveurs DNS de votre domaine afin d'utiliser votre nouveau serveur : https://wiki.gandi.net/fr/dns/change

Dans notre exemple nous avons choisi de créer le serveur “ns1.exemple.com” et d'utiliser le serveur DNS secondaire “ns6.gandi.net”. Nous devrons donc modifier les serveurs DNS actuellement utilisés par le domaine exemple.com par les 2 serveurs DNS mentionnés ci-dessus.

Après votre modification des serveurs DNS, il faudra patienter entre 12 et 24 heures durant la propagation DNS.

Configuration de votre serveur DNS pour DNSSEC

1. Modifiez le fichier named.conf.options

La première chose à faire est de permettre à votre serveur DNS de gérer DNSSEC. Pour cela, vous pourrez ajouter les 3 lignes suivantes entre les { } qui suivent “options” dans le fichier named.conf.options :

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

2. Générez vos clés

Il est possible d'utiliser un outil (voir ici) pour gagner en entropie afin que cette étape s'exécute plus rapidement car la génération des clés peut prendre vraiment très longtemps.

Une autre possibilité afin de générer plus d'entropie est d'installer haveged afin de réduire le temps de génération des clés à quelques secondes.

Installer haveged sur Debian:

Installer le package:

    apt-get install haveged

Vérifier le fichier de configuration dans /etc/default/haveged:

    DAEMON_ARGS="-w 1024"

S'assurer qu'il se lance au démarrage

    update-rc.d haveged defaults

Vérifier qu'il est démarré :

     service haveged status

le reste de la procédure demeure inchangé.

Nous utiliserons l'algorithme 7 (RSASHA1-NSEC3-SHA1) afin de générer ces clés. Pour cela, rendez-vous dans le répertoire où se situe vos zones DNS et tapez les commandes suivantes (en remplaçant exemple.com par votre domaine) :

  dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE exemple.com

et

  dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE exemple.com

Une fois que cela est fait vous verrez, dans le répertoire, 4 nouveaux fichiers se présentant ainsi :

Kexemple.com.+007+02885.key     
Kexemple.com.+007+02885.private 
Kexemple.com.+007+38526.key      
Kexemple.com.+007+38526.private 

3. Ajoutez les clés à votre fichier de zone

Dans les fichiers .key qui ont été générés, vous trouverez une ligne ressemblant à ça :

example.com. IN DNSKEY 256 3 7 AwEAAdiTdNNzO/2fcdF7PiUO5WA33AQZ5dmpgXaKq8TLjnNbZlQNEFDK aZTTPG2myhspl4MRNlrLDfTsONStV519+iSiEDk9NyJ4gzNLBCUit9Vf EFg+qiChjeiknIGLbDO0YkJ5YaIojRkgXPjf8Od5QUKGKzhAEnjfRkeT vllE70uTeoP8uWA3R9gaJO5vs1E3Jn+tP7YgLQ+zGcMfbL3EiSvx3Fd3 LVnIs/A6HzmnkoFf0BdYtP2PUgecTBhf4SNwnjefQw52A/newph97vxF C7urmFcfcJ4OirUv/sAhSvTeHXvOKIDibSy9C/kZ7m4J8Dkp3bONcKLx 6emsy/qJ30TnxD3+Bhzm0ASTQSk7ByR9Ef8QnJRgWIPnmxuHKWkk1X2q DiZN6amI0D0yfuJAtpHCqTrJ4YwRLTqlNyRd4ITFm5aUmalcFO5VDtfY C7AOP+c1SjzrDDO6gsqoptsT+8s4vRRZGa8E2kwr20r8cfTsAkWxsOH5 UOy4u1zaj+9hghqLUXY2LtT9P0/4+dPqn9VfIvPV8lsQjXp89Nn1RW6W jA9XEh1D/PEZTJXbH1ZWoSiesV7vzRV+eSx0IZcTEX8zCWXKQlkRaxep cognCMv8sAe+WKTIQl5etl0+0QuDcgOPXT0CjbWRbIXKa3xeVfhMGBra uEn7X8LnyEJVCJKJ

Il s'agit des enregistrements DNSKEY que vous devez ajouter à votre fichier de zone.Il est possible de les copier avec soin et collez les dans votre fichier de zone. Ou d'utiliser le petit extrait de code suivant pour y faire référence. Ce script créé les clés, insère les références dans les fichiers de zone du domaine passé en paramètre et signe le fichier de zone du domaine. On appelle le petit script avec le domaine a traiter.

#!/bin/bash

KEYGEN="/usr/sbin/dnssec-keygen"
SIGZONE="/usr/sbin/dnssec-signzone"

PDIR=`pwd`
ZONEDIR="/var/cache/bind"       #location of your zone files
DOMAIN=$1
cd $ZONEDIR

# On genere les cles
$KEYGEN -a NSEC3RSASHA1 -b 2048 -n ZONE $DOMAIN
$KEYGEN -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE $DOMAIN

#On insere les cles dans les fichiers de zone
for key in `ls K$DOMAIN*.key`
do
        echo "\$INCLUDE $key">> db.$DOMAIN
done

# On signe les zones
$SIGZONE -3 $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) -A -N INCREMENT -o $DOMAIN -t db.$DOMAIN

cd $PDIR

Vous pourrez voir à quoi cela ressemble dans le fichier de zone ci-dessous avec insertion des clés (n'oubliez pas d'incrémenter le numéro “Serial” de votre fichier de zone) :

$TTL    10800
@       IN      SOA     ns1.exemple.com. root.exemple.com. (
                              2         ; Serial
                          10800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.exemple.com.
ns1     IN      A       203.0.113.0
@  IN MX 10 spool.mail.gandi.net.
@  IN MX 50 fb.mail.gandi.net.
pop  IN CNAME access.mail.gandi.net.
imap  IN CNAME access.mail.gandi.net.
smtp  IN CNAME relay.mail.gandi.net.
webmail  IN CNAME agent.mail.gandi.net.

exemple.com. IN DNSKEY 256 3 7 AwEAAZt0RlA3cfU/z4IUYcUu7rKK0JYuy8Uy28+4j0WJ6UQZsFdifVr9 j1xnJqfyR24IDlp6TPFc9NjVb2uusdEDh2Iz19e6oQFTjlDsWn46WAxO PZcaydLzyBl7Cx40WMRX00ohgXxZLXNh5LrKg26TrFNgjbt5bM4vMNpg AcPk7aRPfv9xKyH0aW9FkQRoJM6eGkclpjpTzr+Gug1Oltl8tvb5FhZB GNWZr/A3M8LSdTpXgtbGcqbakHpFJL7CsvYmhTKXm/OknpPetfu6m5JR fdAga/vgOBmWu+0WbvHpkiPNhJrV4jKSWbsS85DefGCHlRkwwIjh28Gb lS5iFGD8/38=
example.com. IN DNSKEY 257 3 7 AwEAAdiTdNNzO/2fcdF7PiUO5FA33AQZ5dmpgXaKq8TLjnNbZlQNEFDK aZTTPG2myhspl4MRNlrLDfTsONStV519+iSiEDk9NyJ4gzNLBCUit9Vf EFg+qiChjehknIGLbDO0YkJ5YaIojRkgXPjf8Od5QUKGKzhAEnjfRkeT vllE70uTeoP8uWA3R9gaJO5vs1E3Jn+tP7YgLQ+zGcMfbL3EiSvx3Fd3 LVnIs/A6HzmnuoFf0BdYtP2PUgecTBhf4SNwnjefQw52A/newph97vxF C7urmFcfcJ4OirUv/sAhSvTeHXvOKIDibSy3C/kZ7m4J8Dkp3bONcKLx 6emsy/qJ30TnxDv+Bhzm0ASTQSk7ByR9Ef8QnJRgWIPnmxuHKWkk1X2q DiZN6amI0D0yfuJAtkHCqTrJ4YwRLTqlNyRd4ITFm5aUmalcFO5VDtfY C7AOP+c1SjzrDDO6gQqoptsT+8s4vRRZGa8E2kwr20r8cfTsAkWxsOH5 UOy4u1zaj+9hghqLUXY2LtT9P0/4+dPqn9VfIvPV8lsQjXp89Nn1RW6W jA9XEh1D/PEZTJXbHAZWoSiesV7vzRV+eSx0IZcTEX8zCWXKQlkRaxep cognCMv8sAe+WKTIQl5etl0+0QuDcgOPXT0CjbWRbIXKa3xeVfhMGBra uEn7X8LnyEJVCJKJ

ou avec la référence au fichiers de clés.

$TTL    10800
@       IN      SOA     ns1.exemple.com. root.exemple.com. (
                              2         ; Serial
                          10800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.exemple.com.
ns1     IN      A       203.0.113.0
@  IN MX 10 spool.mail.gandi.net.
@  IN MX 50 fb.mail.gandi.net.
pop  IN CNAME access.mail.gandi.net.
imap  IN CNAME access.mail.gandi.net.
smtp  IN CNAME relay.mail.gandi.net.
webmail  IN CNAME agent.mail.gandi.net.

$INCLUDE Kexemple.com.+007+04341.key
$INCLUDE Kexemple.com.+007+46637.key

4. Signez votre fichier de zone

Vous devez maintenant signer votre fichier de zone en utilisant la commande dnssec-signzone :

  dnssec-signzone -3 'random' -A -N INCREMENT -o exemple.com -t db.exemple.com

Faites bien attention de remplacer la valeur “random” avec au moins 16 lettres et chiffres choisis aléatoirement (J'ai utilisé cet outil pour les générer : https://www.random.org/bytes/) et n'oubliez pas de modifier “exemple.com”” et “db.exemple.com” avec votre domaine et le nom de votre fichier de zone.

A moins que vous n'ayez fait une erreur, vous devriez maintenant voir un résultat ressemblant à ça :

Verifying the zone using the following algorithms: NSEC3RSASHA1.
Zone signing complete:
Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
                         ZSKs: 1 active, 0 stand-by, 0 revoked
db.sauvaginier.fr.signed
Signatures generated:                       20
Signatures retained:                         0
Signatures dropped:                          0
Signatures successfully verified:            0
Signatures unsuccessfully verified:          0
Signing time in seconds:                 0.066
Signatures per second:                 302.805
Runtime in seconds:                      0.123

5. Modifiez le fichier /etc/bind/named.conf.local

Lorsque vous avez signé votre zone cela a créé un nouveau fichier nommé db.exemple.com.signed. C'est dans ce fichier que les enregistrements RRSIG sont présents pour chacun des enregistrements DNS de votre zone. Afin que votre serveur prenne connaissance de cette information, vous devez à nouveau modifier le fichier named.conf.local.

Cette fois, vous devrez mettre à jour le chemin d'accès au fichier de zone actuel de :

  file "/etc/bind/db.example.com";

Vers le fichier signé :

  file "/etc/bind/db.example.com.signed";

6. Rechargez BIND et testez

Vous pouvez maintenant recharger votre serveur DNS ( en rechargeant vous ne stoppez pas le service DNS à la différence d'un redémarrage) :

  service bind9 reload

Après cela, tout devrait fonctionner. Vous pouvez tester le serveur en utilisant ces commandes :

  dig DNSKEY exemple.com @localhost

et :

  dig A exemple.com @localhost +noadditional +dnssec

Si cela fonctionne correctement alors vous devriez voir apparaître les clés DNSKEY et RRSIG.

7. Ajoutez les clés DNNSEC chez Gandi

Maintenant que vous êtes sûr que votre serveur DNS est configuré pour DNSSEC, vous devez utiliser l'interface DNSSEC pour déclarer vos clés au registre.

Dans cet exemple nous avons utilisé l'algorithme 7 (RSASHA1-NSEC3-SHA1). Vous devrez donc choisir ce dernier depuis l'interface Gandi si c'est aussi celui que vous avez utilisé. Pour plus d'informations sur ce sujet, je vous invite à visiter cette page de notre wiki : https://wiki.gandi.net/fr/domains/dnssec

Enfin, nous vous invitons à patienter quelques instants afin de vous assurer d'une bonne propagation DNS avant de faire un nouveau test. Si le test vous renvoie une erreur mais que vous pensez que tout est en ordre alors nous vous invitons à patienter quelques heures de plus avant de tester à nouveau. Verisign Labs a mis à disposition un bon outil de test ici : http://dnssec-debugger.verisignlabs.com/

Voir aussi

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