Différences entre versions de « DNS »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 1 : Ligne 1 :
 
{|border=1 class="wikitable"
 
{|border=1 class="wikitable"
! !! Serveur
+
! !! Serveur !! RNDC
 
|-align="center"
 
|-align="center"
| '''Protocole''' || udp
+
| '''Protocole''' || udp || tcp
 
|-align="center"
 
|-align="center"
| '''Port''' || 53
+
| '''Port''' || 53 || 953
 
|-align="center"
 
|-align="center"
| '''Configuration Iptables''' || iptables -I INPUT 2 -p udp --dport 53 -j ACCEPT
+
| '''Configuration Iptables''' || iptables -I INPUT 2 -p udp --dport 53 -j ACCEPT || iptables -I INPUT 3 -p tcp --dport 953 -j ACCEPT
 
|}
 
|}
 
= Préparation =
 
= Préparation =

Version du 28 décembre 2013 à 18:59

Serveur RNDC
Protocole udp tcp
Port 53 953
Configuration Iptables iptables -I INPUT 2 -p udp --dport 53 -j ACCEPT iptables -I INPUT 3 -p tcp --dport 953 -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 no;
        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

Ajout de la clé

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é !

Update des zones

Ainsi que dans la déclaration de chaque zone concernées

allow-update { key DHCP_DEAMON; };

Configuration de RNDC

Le démon chargé de mettre à jour named s'appelle RNDC et sa configuration se trouve également dans /etc/named.conf (au début par exemple)

controls {
  inet * allow { tala; } keys { DHCP_DEAMON; };
};

Test

Une fois que vous avez redémarrez named, il écoute maintenant sur le port TCP/953

]# netstat -atnp | grep named
tcp        0      0 192.168.200.253:53          0.0.0.0:*                   LISTEN      2611/named
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      2611/named
tcp        0      0 0.0.0.0:953                 0.0.0.0:*                   LISTEN      2611/named

Configuration du pare-feu

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

Paramétrage des droits

Et assigner les bon droits sur les fichiers de named

# chown named.named -R /var/named/

Vérifications du bon fonctionnement

On peut tester le bon fonctionnement des mises à jour sécurisées grâce à la commande nsupdate

recherche directe

# nsupdate
> server 127.0.0.1
> key DHCP_DEAMON m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM=
> zone tala-informatique.fr
> update add test.tala-informatique.fr. 86400 A 192.168.200.50
> send
> quit

Si on affiche les deux dernières ligne de /var/log/messages

# tail -n 2 /var/log/messages
Dec 27 21:30:22 dns named[2086]: client 127.0.0.1#40392: signer "dhcp_deamon" approved
Dec 27 21:30:22 dns named[2086]: client 127.0.0.1#40392: updating zone 'tala-informatique.fr/IN': adding an RR at 'test.tala-informatique.fr' A

Et que l'on utilise nslookup

# nslookup test 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   test.tala-informatique.fr
Address: 192.168.200.50

Enfin, on efface cet enregistrement

# nsupdate << EOF
server 127.0.0.1
key DHCP_DEAMON m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM=
zone tala-informatique.fr
update delete test.tala-informatique.fr. 86400 A 192.168.200.50
send
EOF

recherche inverse

nsupdate
> server 127.0.0.1
> key DHCP_DEAMON m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM=
> zone 200.168.192.in-addr.arpa
> update add 50.200.168.192.in-addr.arpa 86400 PTR test.tala-informatique.fr.
> send
> quit

Si on affiche les deux dernières ligne de /var/log/messages

# tail -n 2 /var/log/messages
Dec 27 21:23:21 dns named[2086]: client 127.0.0.1#35469: signer "dhcp_deamon" approved
Dec 27 21:23:21 dns named[2086]: client 127.0.0.1#35469: updating zone '200.168.192.in-addr.arpa/IN': adding an RR at '50.200.168.192.in-addr.arpa' PTR

Et que l'on utilise nslookup

# nslookup 192.168.200.50 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

50.200.168.192.in-addr.arpa     name = test.tala-informatique.fr.

Enfin, on efface cet enregistrement

# nsupdate << EOF
server 127.0.0.1
key DHCP_DEAMON m6y00sQNwZQkQKq92ODj/5iSGIejHKGuURLVxHDE/iM=
zone 200.168.192.in-addr.arpa
update delete 50.200.168.192.in-addr.arpa 86400 PTR test.tala-informatique.fr.
send
EOF