DNS
Serveur | |
---|---|
Protocole | udp |
Port | 53 |
Configuration Iptables | iptables -I INPUT 2 -p udp --dport 53 -j ACCEPT |
Préparation
Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un "autre" serveur DNS et désactiver SELinux.
Pour ceux qui aurait manqué des étapes les voici:
Une fois ces étapes effectuées, entrons dans le vif du sujet !
Installation
Tout d'abord il faut installer les paquetages suivants:
# yum -y install bind bind-utils
- bind → c'est le serveur DNS (Berkeley Internet Name Daemon)
- bind-utils → des utilitaires pour s'assurer que le serveur est correctement configuré (nslookup, dig, ...)
Configuration du serveur
Point de départ
L'essentiel de la configuration se déroule dans le fichier /etc/named.conf Ci-dessous un exemple de fichier de base:
options { # Adresse d'écoute pour IPv4 listen-on port 53 { 127.0.0.1; }; # Adresse d'écoute pour IPv6 listen-on-v6 port 53 { ::1; }; # Emplacement des fichiers de zones directory "/var/named"; # dump-file "/var/named/data/cache_dump.db"; # statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; # Réseaux auxquels BIND répondra allow-query { localhost; }; # Autorise les recherches récursives recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
Déclarations
Les déclarations suivantes peuvent être utilisées:
- acl → configure une liste de contrôle d'accès
- any → correspond à toutes les adresses IP
- localhost → correspond aux IP du système local
- localnets → correspond aux adresses IP utilisées par le système aux travers d'interfaces
- none → correspond à aucune adresse IP
Exemples
acl
La déclaration acl permet de rassembler plusieurs réseaux ensemble:
acl authorized { 192.168.0.0/24; 10.0.1.0/24; 192.168.50.0/24; }; acl unauthorized { 192.168.60.0/24; }
On pourra ensuite remplacer avantageusement la ligne suivante:
allow-query { localhost; };
Par:
allow-query { authorized; };
Cela sera plus propre de rassembler les déclarations en début de fichier et de ne plus avoir à parcourir l'intégralité du fichier pour apporter une modification !
none
On pourra remplacer la ligne suivante:
listen-on-v6 port 53 { ::1; };
Par:
listen-on-v6 port 53 { none; };
localnets
On pourra remplacer la ligne suivante:
listen-on port 53 { 127.0.0.1; };
Par:
listen-on port 53 { localnets; };
Options supplémentaires
Dans la section options on peut ajouter:
Forwarders
Quand le serveur DNS est incapable de répondre à une requête, il la forward aux serveurs spécifiés l'option forwarders
forwarders { 8.8.8.8; 212.217.0.1; };
Recherche récursives
Pour un client, il est plus simple de s'adresser à un seul serveur DNS et, autoriser les requêtes récursives, signifie que le serveur DNS s'adressera récursivement à plusieurs autres DNS jusqu'à la résolution complète de la requête.
allow-recursion { authorized; };
Cacher la version de BIND
Pour des raisons évidentes de sécurité, il vaut mieux masquer la version de BIND !
version "SECRET";
Démarrage
Au premier démarrage, le démon named génére les clés RNDC:
# service named start Generating /etc/rndc.key: [ OK ] Démarrage de named : [ OK ]
Vérification de l'écoute
On peut utiliser la commande netstat pour s'assurer que named écoute sur les interfaces désirées
# netstat -aunp | grep named udp 0 0 127.0.0.1:53 0.0.0.0:* 10787/named udp 0 0 192.168.200.253:53 0.0.0.0:* 10787/named
Test de résolution
Utilisons nslookup pour s'assurer que notre serveur fonctionne en lui demandant l'adresse de google.fr
# nslookup google.fr 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: google.fr Address: 173.194.41.23 Name: google.fr Address: 173.194.41.24 Name: google.fr Address: 173.194.41.31
Il ne nous reste plus qu'à déclarer une zone !
Ajout d'une zone de recherche directe
Le fichier de zone
Le fichier de zone de recherche directe se trouve dans le répertoire /var/named et respecte la syntaxe suivante, pour un réseau tala.informatique.fr:
- tala-informatique.fr / tala-informatique.fr.db
Le contenu du fichier tala-informatique.fr est le suivant:
; Précise au client que la durée de validité des informations de noms $TTL 86400 ; Début de la déclaration State Of Autority (SOA) tala-informatique.fr. IN SOA dns.tala-informatique.fr. root.tala-informatique.fr. ( 0 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expires after 1 week 86400 ) ; minimum TTL of 1 day ; NS pour les serveurs de nom IN NS dns.tala-informatique.fr. ; MX pour les serveurs de mails, on indique également un poid / priorité IN MX 10 mail.tala-informatique.fr. IN MX 20 mail2.tala-informatique.fr. ; Enregistrement direct dns.tala-informatique.fr. IN A 192.168.200.253 ; Enregistrement direct mail.tala-informatique.fr. IN A 192.168.200.252 ; Enregistrement direct mail2.tala-informatique.fr. IN A 192.168.200.251 ; Alias mx <=> mail <=> 192.168.200.252 mx.tala-informatique.fr. IN CNAME mail.tala-informatique.fr. ; Alias mx2 <=> mail2 <=> 192.168.200.251 mx2.tala-informatique.fr. IN CNAME mail2.tala-informatique.fr.
Déclaration dans la configuration de named
Maintenant que le fichier de recherche directe est créé, il faut indiquer à named de quoi il retourne. A la fin du fichier /etc/named.conf ajoutons les lignes suivantes:
zone "tala-informatique.fr" IN { ; Le serveur est maître pour cette zone type master; ; On indique le fichier de zone file "tala-informatique.fr"; ; On précise si on autorise les mises à jours (ici non, parce que le serveur est maître) allow-update { none; }; };
Test
Toujours avec nslookup
# nslookup dns.tala-informatique.fr 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: dns.tala-informatique.fr Address: 192.168.200.100
Pour s’affranchir d'avoir à ajouter le nom de domaine, il faut modifier la configuration du client dns
Ajout d'un zone de recherche inverse
Le fichiers de zones de recherche inverse se trouve dans le répertoire /var/named et respecte la syntaxe suivante, pour un plan d'adressage 192.168.200.0/24:
- 200.168.192.in-addr.arpa
Le fichier de zone
$TTL 86400 200.168.192.in-addr.arpa. IN SOA dns.tala-informatique.fr. root.tala-informatique.fr. ( 0 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day IN NS dns.tala-informatique.fr. IN MX 10 mail.tala-informatique.fr. IN MX 20 mail2.tala-informatique.fr. 253 IN PTR dns.tala-informatique.fr. 252 IN PTR mail.domain.com. 251 IN PTR mail2.domain.com.
Déclaration dans la configuration de named
zone "200.168.192.in-addr.arpa" IN { type master; file "200.168.192.in-addr.arpa"; allow-update { none; }; };
Test
# nslookup 192.168.200.253 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 253.200.168.192.in-addr.arpa name = dns.tala-informatique.fr.
Enregistrement dans le chargeur de démarrage
# chkconfig named on
Mise à jour sécurisée
Création d'une clé (dnssec)
La commande dnssec-keygen permet de générer une clé pour faire des mise à jours sécurisées
# dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 256 -n USER DHCP_DAEMON Kdhcp_daemon.+157+30508
- -r → ajoute une source aléatoire
- -a → permet de choisir l'algorithme de cryptage
- -b → spécifie la taille de la clé (256 est correct)
- -n → précise l'utilisation de la clé [ZONE|HOST|ENTITY]
Une fois cette commande terminée les deux clés sont générées
# ls Kdhcp_daemon.+157+30508.key Kdhcp_daemon.+157+30508.private
On contrôle la clé générée
# cat Kdhcp_daemon.+157+30508.key DHCP_DAEMON. IN KEY 0 3 157 m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM=
Modification de la configuration de named
Dans le fichier /etc/named.conf il faudra ajouter, après la rubrique options par exemple, la section suivante:
key DHCP_DAEMON { algorithm hmac-md5; secret "m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM="; };
N'oubliez pas les double quote pour délimiter la clé !
Une fois que vous avez redémarrez named, il écoute maintenant sur le port TCP/953
# netstat -atnp | grep 953 tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1660/named tcp 0 0 ::1:953 :::* LISTEN 1660/named
Il ne faut pas oublier d'ouvrir un port dans le pare-feu et de sauvegarder la configuration
# iptables -I INPUT 2 -p tcp --dport 953 -j ACCEPT # service iptables save
Il ne vous reste plus qu'à configurer votre client avec la même clé !