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.
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
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
apt-get install bind9 dnsutils
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.
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.
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
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.
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;
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
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
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
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";
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.
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/