Il est possible (et même souhaitable) de sécuriser son DNS local. Voici quelque recettes.
Dans le fichier /etc/named.conf, on peut spécifier les DNS autorisés à demander un transfert de zone à l’aide de l’option allow-transfer :
/*
* Fichier utilise pour la resolution des noms d'hote se terminant par
* domaine1. Seul le DNS d'adresse 192.168.2.1 a le droit de recuperer les
* informations a partir de ce DNS.
*/
zone "domaine1" {
type master;
file "domaine1";
allow-transfer { 192.168.2.1 ; };
};
Les transferts de zones étant utilisés par les spammers et les spoofers d’IP, il est recommandé de spécifier cette option. Si on n’a pas de DNS secondaire, on peut mettre l’adresse loopback (127.0.0.1). On peut préciser plusieurs adresses, séparées par un point-virgule ;
Vérifier que chaque adresse IP faisant une requête au DNS est bien associée à un nom de domaine valide à l’aide de l’option nospoof dans le fichier /etc/host.conf. On peut également enregistrer chaque tentative de spoofing à l’aide de syslog avec l’option alert ;
Limiter les interfaces sur lesquelles named tourne en mettant dans le fichier /etc/named.conf, où 192.168.1.1 est l’adresse du serveur DNS ;
Autoriser les requêtes au DNS de la part des hôtes d’un domaine particulier, les autres n’y étant pas autorisés. Par exemple, pour que seuls les hôtes du domaine local 192.168.1.0 soient autorisés à interroger le DNS, insérer dans le fichier /etc/named.conf l’option allow-query :
/*
* Fichier utilise pour la resolution des noms d'hote se terminant par
* domaine1. Seul le DNS d'adresse 192.168.2.1 a le droit de recuperer les
* informations a partir de ce DNS. Seuls les hotes du domaine 192.168.1.0/24
* sont autorises a interroger ce DNS local.
*/
zone "domaine1" {
type master;
file "domaine1";
allow-transfer { 192.168.2.1 ; };
allow-query {192.168.1.0/24 ; };
};
L’adresse 192.168.1.0/24 signifie ``toute les adresses dont les 24 premiers bits commencent par 192.168.1.0’’. Comme on a une adresse de classe C avec un masque de réseau correspondant à une adresse de classe C, cela revient à dire tous les hôtes du réseau 192.168.1.0 ;
Empêcher un utilisateur de déterminer la version de BIND :
zone "bind" chaos {
type master;
file "bind";
allow-query { localhost ; };
};
Le fichier bind contient :
$TTL 1d
@ CHAOS SOA localhost. root.localhost. (
1 ; serial
3H ; refresh
15M ; retry
1W ; expire
1D ; minimum
)
NS localhost.
Faire tourner le DNS sous l’identité d’un utilisateur normal, utilisé uniquement pour les besoins du DNS :
# useradd -M -r -d /var/named -s /bin/false named
# groupadd -r named
Ne pas oublier de changer le script d’initialisation (/etc/rc.d/init.d/named sous RedHat ou /etc/init.d/named sous Debian rajouter SuSE) pour y mettre la ligne :
/usr/sbin/named -u named -g named
Ne pas mettre de RR de type HINFO. Les information associées donnant des informations sur la machine sur laquelle tourne le DNS, on peut plus facilement trouver les failles de sécurité .