Bonjour, aujourd’hui je vais vous montrer comment utiliser les vues (view) de Bind9 pour sécuriser votre serveur DNS ou pour d’autres applications, comme ce cas :
On a un serveur avec plusieurs interfaces et @IP dans des réseaux différents qui doit répondre sous un nom précis commun à tous les réseaux ; avec un seul serveur DNS.
Dans un prochain billet, je vous montrerai une autre méthode plus simple pour réaliser cela.
On va donc « splitter » notre/nos zone(s) afin de choisir la partie correspondante en fonction de l’adresse source de la requête.
Exemple : le serveur à comme nom « sauvegarde.mondomaine.fr » avec les IPs suivantes :
192.168.0.20/24
192.168.1.20/24
192.168.3.20/24
Objectif :
Si la machine qui demande la résolution « sauvegarde.mondomaine.fr » est dans le réseau 192.168.0.0/24 elle devra recevoir l’adresse 192.168.0.20
Si la machine qui demande la résolution « sauvegarde.mondomaine.fr » est dans le réseau 192.168.1.0/24 elle devra recevoir l’adresse 192.168.1.20
Si la machine qui demande la résolution « sauvegarde.mondomaine.fr » est dans le réseau 192.168.2.0/24 elle devra recevoir l’adresse 192.168.2.20
Exemple de configuration de 3 vues :
//Dns dynamique acl "res0" {192.168.0.0/24;}; acl "res1" {192.168.1.0/24;}; acl "res2" {192.168.2.0/24;}; view "reseau0" { match-clients { "res0"; }; recursion yes; zone "mondomaine.fr" { type master; file "/etc/bind/mondomaine.fr.zone.res0"; }; }; view "reseau1" { match-clients { "res1"; }; recursion yes; zone "mondomaine.fr" { type master; file "/etc/bind/mondomaine.fr.zone.res1"; }; }; view "reseau2" { match-clients { "res2"; }; recursion yes; zone "mondomaine.fr" { type master; file "/etc/bind/mondomaine.fr.zone.res2"; }; }; view "external" { match-clients { any; }; recursion no; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; };
Exemple de fichier de zone (/etc/bind/mondomaine.fr.zone.common) :
; ; BIND data file for mondomaine.fr ; $TTL 604800 @ IN SOA monSrvDns hostmaster.mondomaine.fr. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS hv-1 mondomaine.fr. IN MX 10 mail monSrvDns IN A 192.168.0.171 mail IN A 192.168.0.180
Exemple de fichier de zone (/etc/bind/mondomaine.fr.zone.res0) :
include "/etc/bind/mondomaine.fr.zone.common";
sauvegarde IN A 164.81.0.20
Exemple de fichier de zone (/etc/bind/mondomaine.fr.zone.res1) :
include "/etc/bind/mondomaine.fr.zone.common";
sauvegarde IN A 164.81.1.20
Exemple de fichier de zone (/etc/bind/mondomaine.fr.zone.res2) :
include "/etc/bind/mondomaine.fr.zone.common";
sauvegarde IN A 164.81.2.20
Comme vous l’aurez compris, j’ai choisi d’utiliser un fichier commun pour éviter les enregistrements redondants.
Une telle configuration peut aussi servir a accroitre la sécurité. En effet, dans le(s) fichier(s) de zone de la vue « external » vous pouvez limiter les enregistrements vu depuis un réseau extérieur (autre que 192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24).
N’hésitez pas à commenter si vous avez des questions / améliorations.