« DNS: Configuration des vues dans Bind » : différence entre les versions
Aucun résumé des modifications |
|||
(11 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
<metadesc>La configuration de vues dans bind permet d'avoir différents environnements dans le même serveur et ainsi avoir des comportements différents. Par exemple pour un SOA qui sert aussi de DNS interne.</metadesc> | |||
{{Auteur|Adadov}} | {{Auteur|Adadov}} | ||
__TOC__ | |||
L'utilisation de vues sur un serveur DNS revient pratiquement à multiplier les serveurs DNS, chaque vue aura son lot de zones et ses propres critères d'accès. Elles vont permettre de centraliser la gestion des serveurs DNS au lieu d'installer de multiples serveurs. | |||
== Problématique == | |||
Les clients externes | * Nous avons besoin de diffuser des zones DNS en tant que {{abbr|SOA|Source Of Authority}} et de gérer les requêtes des clients du réseau interne. | ||
* Les clients internes doivent accéder à la zone DNS de recherche local mais elle ne doit pas être accessible depuis l'extérieur. | |||
* Les clients internes doivent pouvoir effectuer des requêtes récursives contrairement aux clients externes. | |||
* Pour les serveurs placés derrière le NAT, les IP renvoyées aux clients ne doivent pas être les mêmes s'ils sont internes ou externes. On se retrouve sinon avec des routes asymétrique sur le réseau et souvent les connexions n'aboutissent pas. | |||
* Le serveur DNS n'a accès qu'à un seul réseau physique/logique. | |||
Voilà donc le mini cahier des charges, il serait certainement plus simple de monter deux serveurs DNS, un pour les clients internes et un pour les SOA. Mais on serait obligés de se disperser pour l'administration et tout ce qui va avec. | |||
On peut choisir de diriger les clients sur une vue ou une autre de multiples manières mais dans le cas présent, la séparation est faite en fonction de l'adresse IP du client. Nous pourrons ainsi séparer les clients externes des clients internes vu que nous connaissons toutes les pages des réseaux internes. | |||
== Gestion des logs == | == Configuration générale du serveur == | ||
=== Gestion des logs === | |||
Pour gérer les logs on utilisera simplement le syslog du système. | Pour gérer les logs on utilisera simplement le syslog du système. | ||
J'ai choisi le local6 car il n'est pas utilisé par autre chose et donc il permet de séparer les logs du serveur DNS du reste. | J'ai choisi le local6 car il n'est pas utilisé par autre chose et donc il permet de séparer les logs du serveur DNS du reste. | ||
< | <syntaxhighlight lang=text> | ||
logging { | logging { | ||
channel default_debug { | channel default_debug { | ||
Ligne 26 : | Ligne 33 : | ||
category default { default_debug; }; | category default { default_debug; }; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
== Configuration globale == | === Configuration globale === | ||
La configuration est plutôt standard, on écoute sur toutes les interfaces en IPv4 et IPv6, on utilise le dossier <code>/var/named</code> comme base pour les fichiers de zone. | La configuration est plutôt standard, on écoute sur toutes les interfaces en IPv4 et IPv6, on utilise le dossier <code>/var/named</code> comme base pour les fichiers de zone. | ||
Ligne 34 : | Ligne 41 : | ||
La direction version permet quand à elle de cacher la version du serveur, ça permet d'éviter des tentatives d'attaque ciblées sur la version actuelle du serveur. | La direction version permet quand à elle de cacher la version du serveur, ça permet d'éviter des tentatives d'attaque ciblées sur la version actuelle du serveur. | ||
< | <syntaxhighlight lang=text> | ||
options { | options { | ||
listen-on port 53 { any; }; | listen-on port 53 { any; }; | ||
Ligne 43 : | Ligne 50 : | ||
version "Nothing to display"; | version "Nothing to display"; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
On autorise le controle du serveur via RNDC uniquement depuis localhost. | On autorise le controle du serveur via RNDC uniquement depuis localhost. | ||
< | <syntaxhighlight lang=text> | ||
controls { | controls { | ||
inet 127.0.0.1 allow { localhost; }; | inet 127.0.0.1 allow { localhost; }; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
= Configuration de la vue interne = | == Configuration de la vue interne == | ||
La vue interne référence toutes les zones internes et les zones externes qui nécessitent d'utiliser des IP internes dans la configuration des zones. | La vue interne référence toutes les zones internes et les zones externes qui nécessitent d'utiliser des IP internes dans la configuration des zones. | ||
Ligne 62 : | Ligne 69 : | ||
On a placé les directives allow-query et allow-recursion ici afin de les appliquer aux clients de cette vue. | On a placé les directives allow-query et allow-recursion ici afin de les appliquer aux clients de cette vue. | ||
< | <syntaxhighlight lang=text> | ||
view "internal" { | view "internal" { | ||
match-clients { 192.168.0.0/24; 127.0.0.1; ::1; }; | match-clients { 192.168.0.0/24; 127.0.0.1; ::1; }; | ||
Ligne 70 : | Ligne 77 : | ||
zone "exemple.loc" IN { | zone "exemple.loc" IN { | ||
type master; | type master; | ||
file "internal | file "data/internal/exemple.loc"; | ||
allow-update { key DHCP_UPDATER; }; | allow-update { key DHCP_UPDATER; }; | ||
}; | }; | ||
Ligne 76 : | Ligne 83 : | ||
zone "0.168.192.in-addr.arpa" IN { | zone "0.168.192.in-addr.arpa" IN { | ||
type master; | type master; | ||
file "internal | file "data/internal/reverse.zone"; | ||
allow-update { key DHCP_UPDATER; }; | allow-update { key DHCP_UPDATER; }; | ||
}; | }; | ||
Ligne 88 : | Ligne 89 : | ||
zone "exemple.net" IN { | zone "exemple.net" IN { | ||
type master; | type master; | ||
file "internal | file "data/internal/exemple.net"; | ||
}; | }; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
= Configuration de la vue externe = | == Configuration de la vue externe == | ||
La vue externe ne référence que les zones publiques, elle sera utilisée par tous les clients qui ne sont pas dans les plages définies pour la vue interne. | La vue externe ne référence que les zones publiques, elle sera utilisée par tous les clients qui ne sont pas dans les plages définies pour la vue interne. | ||
Ligne 100 : | Ligne 101 : | ||
allow-recursion vaut "none" afin d'interdire l'utilisation du serveur comme serveur DNS pour une station de travail. | allow-recursion vaut "none" afin d'interdire l'utilisation du serveur comme serveur DNS pour une station de travail. | ||
< | <syntaxhighlight lang=text> | ||
view "external" { | view "external" { | ||
match-clients { any; }; | match-clients { any; }; | ||
Ligne 108 : | Ligne 109 : | ||
zone "exemple.net" IN { | zone "exemple.net" IN { | ||
type master; | type master; | ||
file "external/data/exemple. | file "data/external/exemple.net"; | ||
}; | |||
zone "exemple.com" IN { | |||
type master; | |||
file "data/external/exemple.com"; | |||
}; | }; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
[[Category:DNS | |||
[[Category:DHCP-DNS]] |
Dernière version du 28 janvier 2023 à 04:09
<metadesc>La configuration de vues dans bind permet d'avoir différents environnements dans le même serveur et ainsi avoir des comportements différents. Par exemple pour un SOA qui sert aussi de DNS interne.</metadesc>
L'utilisation de vues sur un serveur DNS revient pratiquement à multiplier les serveurs DNS, chaque vue aura son lot de zones et ses propres critères d'accès. Elles vont permettre de centraliser la gestion des serveurs DNS au lieu d'installer de multiples serveurs.
Problématique[modifier | modifier le wikicode]
- Nous avons besoin de diffuser des zones DNS en tant que SOA et de gérer les requêtes des clients du réseau interne.
- Les clients internes doivent accéder à la zone DNS de recherche local mais elle ne doit pas être accessible depuis l'extérieur.
- Les clients internes doivent pouvoir effectuer des requêtes récursives contrairement aux clients externes.
- Pour les serveurs placés derrière le NAT, les IP renvoyées aux clients ne doivent pas être les mêmes s'ils sont internes ou externes. On se retrouve sinon avec des routes asymétrique sur le réseau et souvent les connexions n'aboutissent pas.
- Le serveur DNS n'a accès qu'à un seul réseau physique/logique.
Voilà donc le mini cahier des charges, il serait certainement plus simple de monter deux serveurs DNS, un pour les clients internes et un pour les SOA. Mais on serait obligés de se disperser pour l'administration et tout ce qui va avec.
On peut choisir de diriger les clients sur une vue ou une autre de multiples manières mais dans le cas présent, la séparation est faite en fonction de l'adresse IP du client. Nous pourrons ainsi séparer les clients externes des clients internes vu que nous connaissons toutes les pages des réseaux internes.
Configuration générale du serveur[modifier | modifier le wikicode]
Gestion des logs[modifier | modifier le wikicode]
Pour gérer les logs on utilisera simplement le syslog du système. J'ai choisi le local6 car il n'est pas utilisé par autre chose et donc il permet de séparer les logs du serveur DNS du reste.
logging {
channel default_debug {
syslog local6;
severity info;
};
category default { default_debug; };
};
Configuration globale[modifier | modifier le wikicode]
La configuration est plutôt standard, on écoute sur toutes les interfaces en IPv4 et IPv6, on utilise le dossier /var/named
comme base pour les fichiers de zone.
La direction version permet quand à elle de cacher la version du serveur, ça permet d'éviter des tentatives d'attaque ciblées sur la version actuelle du serveur.
options {
listen-on port 53 { any; };
listen-on-v6 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
version "Nothing to display";
};
On autorise le controle du serveur via RNDC uniquement depuis localhost.
controls {
inet 127.0.0.1 allow { localhost; };
};
Configuration de la vue interne[modifier | modifier le wikicode]
La vue interne référence toutes les zones internes et les zones externes qui nécessitent d'utiliser des IP internes dans la configuration des zones.
Le filtrage se fait via la directive "match-clients", on listera dedans toutes les plages IP qui doivent être dirigés vers cette vue. La première vue dont les règles correspondent au client sera utilisée.
On a placé les directives allow-query et allow-recursion ici afin de les appliquer aux clients de cette vue.
view "internal" {
match-clients { 192.168.0.0/24; 127.0.0.1; ::1; };
allow-query { any; };
allow-recursion { any; };
zone "exemple.loc" IN {
type master;
file "data/internal/exemple.loc";
allow-update { key DHCP_UPDATER; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "data/internal/reverse.zone";
allow-update { key DHCP_UPDATER; };
};
zone "exemple.net" IN {
type master;
file "data/internal/exemple.net";
};
};
Configuration de la vue externe[modifier | modifier le wikicode]
La vue externe ne référence que les zones publiques, elle sera utilisée par tous les clients qui ne sont pas dans les plages définies pour la vue interne.
On a placé les directives allow-query et allow-recursion ici afin de les appliquer aux clients de cette vue. allow-recursion vaut "none" afin d'interdire l'utilisation du serveur comme serveur DNS pour une station de travail.
view "external" {
match-clients { any; };
allow-query{ any; };
allow-recursion { none; };
zone "exemple.net" IN {
type master;
file "data/external/exemple.net";
};
zone "exemple.com" IN {
type master;
file "data/external/exemple.com";
};
};