Éric Boucher, 1er février 2005 (boucher.eric@hydro.qc.ca)
Ce système a été développé pour rencontrer
(entres autres) les besoins suivants:
- faciliter l'ajout, la modification et la suppression d'entrées au DNS
via une interface WEB conviviale;
- faciliter l'ajout, la modification et la suppression de zones dans le DNS;
- assurer une intégrité entre les entrées de type A et
les entrées inverses (PTR);
- sécuriser les modifications au DNS avec un système de code d'usagers
et de privilèges;
- permettre à des usagers non administrateurs (et à accès
restreint) de mettre à jour des entrées dans certaines zones seulement
du DNS;
- ...
Bdns est un produit
« open source », dérivé de oDNS, un autre
produit « open source ». La base de données et
quelques scripts Perl de oDNS ont été conservés; Bdns ajoute
une interface WEB complètement refaite et de nombreuses fonctionalités
aditionnelles.
Avantages de Bdns
Pour les administrteurs
habitués à gérer un serveur DNS classique, la gestion des
zones devrait leur faciliter la tâche, tâche qui consistait, habituellement,
à éditer des fichiers de configuration (la plupart du temps avec
vi), et à envoyer un SIGHUP au démon in.named.
Avec un serveur DNS dont le nombre de zones et le nombre des entrées
est petit, les avantages de Bdns restent minimes, si ce n'est le fait qu'il
valide les entrées insérées dans le DNS, réduisant
ainsi le risque d'erreur (les administrateurs de DNS les plus chevronnés
commettent ou ont déjà commis des erreurs, même s'ils affirment
le contraire!).
Avec un DNS dont le nombre de zones et d'entrées est grand, et qui en
plus subit beaucoup d'ajouts/suppressions/modifications, les avantages de Bdns
deviennent vite clairs:
- Bdns permet d'éviter les erreurs les plus fréquentes en validant
les entrées des usagers;
- Bdns assure une intégrité référentielle dans la
base de données du DNS, évitant entre autres le problème
des "glue records";
- Bdns permet de désigner des opérateurs qui gèrent toutes
les entrées du DNS (mais qui ne peuvent pas créer/modifier/supprimer
de zone);
- Bdns permet de déléguer à des responsables les ajouts/modifications/suppressions
des entrées de type A, CNAME et PTR dans des zones où ils sont
désignés comme responsables, distribuant ainsi la tâche
de mise à jour des entrées du DNS;
- Bdns permet à des sysadmins d’administrer un serveur DNS sans
avoit de compte sur le serveur, ce qui augmente la sécurité ;
- ...
Historique de Bdns
Bdns a été développé à partir d'un autre package "Open Source" nommé odns. Mon intention au début était d'améliorer l'interface de odns et d'y ajouter quelques fonctionalités, mais en cours de route, j'ai changé d'orientation et j'ai fini par écrire un système complet. Bdns est en production dans l'intranet d'Hydro Québec depuis mai 2002 et gère un DNS qui comporte environ 50 000 enregistrements. Une vingtaine d'usagers de types différents gèrent le contenu du DNS.
Cette section décrit les grandes étapes pour installer/configurer Bdns. J'ai personellement installé et configuré Bdns sur Solaris 2.6 et Solaris 8, Solaris 9, ainsi que sur MacOS X. Un de mes collègues de bureau l'a même fait marcher sur Windows NT, quoi que la démonstration n'était pas complète... Si vous voulez l'installer sous MacOSX, les instructions sont disponibles ici.
Voici la liste
des étapes essentielles:
- Créez sur votre serveur un usager (disons "bdns") non privilégié;
- Installez sur ce même serveur BIND, Apache-PHP-MySQL. Notez le mot de
passe de root de votre BD MySQL;
- Configurez Apache et BIND pour qu'ils démarrent en tant qu'usager bdns.
Ceci se fait en démarrant BIND avec l'option "-u bdns" et en
plaçant la ligne "User bdns" dans le fichier httpd.conf;
- Décompressez la distribution de Bdns dans un répertoire sous
le DOCROOT de votre serveur Web Apache (disons, Bdns);
- Modifiez le fichier httpd.conf pour avoir les lignes suivantes:
User bdns DirectoryIndex index.html index.html.var index.php LoadModule php4_module modules/libphp4.so AddType application/x-httpd-php.php AddType application/x-httpd-php-source.phps- Modifiez le fichier php.ini et assurez-vous d'avoir la ligne suivante:
register_globals = On- Créez un répertoire (par exemple: /var/named/Bdns) où seront placés les fichiers de zone du DNS. Mettez l'usager bdns créé ci-dessus comme propriétaire de ce répertoire;
chown -R bdns /var/named/Bdns chmod 755 /var/named/Bdns chmod 644 /var/named/Bdns/*
chown bdns /etc/named.conf chmod 644 /etc/named.conf
directory /var/namedremplacez par:
directory /var/named/Bdns
Première utilisation:
Pointez votre navigateur à l'URL de Bdns (genre http://www.votreserveur.com/Bdns). Vous devriez voir aparaître l'écran suivant:
Connectez-vous avec admin/admin.
Vous verrez alors l'écran qui liste les domaines DNS de votre base de données:
IMPORTANT:
Avant d'aller plus loin, vous devez encore effectuer quelques réglages pour vous assurer que votre installation fonctionnera correctgement. Cliquez sur le bouton "parameters". Vous verrez l'écran suivant (on ne voit ici pas tous les paramètres, mais ils sont tous expliqués ci-dessous) :
Assurez-vous que les paramètres correspondent à votre installation et aux bons répertoires sur votre serveur:
À ce stade-ci,
l'installation est terminée.
Avant de commencer à expliquer l'utilisation de Bdns, quelques concepts doivent être compris.
Préalables
quant à la structure des enregistrements du DNS :
Bien qu’un serveur DNS comme bind vous laisse faire n’importe quoi
ou presque, cela ne signifie pas que tout ce qu’on peut faire avec est
sensé. Ainsi, avec l’expérience, quelques standards « non
écrits », découlant du bon sens, finissent par ressortir.
Bdns a été développé avec ces standards non écrits
en tête, et il sont énumérés ici :
- à un enregistrement de type A correspond un ou plusieurs enregistrements
de type PTR;
- à un enregistrement de type PTR correspond un et un seul enregistrement
de type A;
- un enregistrement de type A peut être référé par
aucun, un ou plusieurs enregistrement(s) de type CNAME;
- un enregistrement de type CNAME peut pointer sur un autre enregistrement de
type CNAME (quoi que ce ne soit pas conseillé);
Avec ces quelques
règles, Bdns se comporte donc ainsi avec les enregistrements du DNS :
- tout ajout, modification ou suppression d'un enregistrement de type A dans
le DNS entraîne l'ajout, la modification ou la suppression d'un ou plusieurs
enregistrement(s) de type PTR correspondant(s) ainsi que du ou des CNAME qui
pointent dessus;
- tout ajout, modification ou suppression d'un enregistrement de type PTR dans
le DNS entraîne l'ajout, la modification ou la suppression d'un enregistrement
de type A correspondant;
Les règles ci-dessus s'appliquent pour assurer une intégrité
référentielle des données du DNS : Un nom x pointe
sur une adresse IP y, cette adresse IP y pointe donc sur le nom x. Simple bon
sens. Ces règles imposent cependant quelques limitations, notamment que
votre serveur DNS doit être « master » pour la zone
inverse de tous domaine DNS dont il est « master ». Cependant,
les quelques limitations imposées par le logiciel sont minimes et ne
devraient pas entraver l’administration d’un DNS typique. Elles
ne sont pas rencontrées dans un DNS corporatif comme celui d’Hydro
Québec, qui comprend des centaines de zones, réparties en master-slave,
avec des DNS secondaires et de la délégation, et des dizaines
de milliers d’enregistrements dans la base de données. Les mises
à jour sont dynamiques et effectives immédiatement sur le serveur
DNS :
Lorsqu’une entrée est ajoutée, modifiée ou supprimée
du DNS, ou lorsqu’une zone est ajoutée ou supprimée, le
changement est visible immédiatement dans le DNS. Bdns effectue le changement
dans la base de données et le propage dans le DNS immédiatement
après.
Les
types d'usagers:
Bdns supporte les connexions simultanées de plusieurs types d’usagers.
Voici la liste des types d’usager et les privilèges de chacun :
Administrateur
Cet usager peut tout faire:
- créer/supprimer des zones primaires ou secondaires (primary ou slave)
dans le DNS;
- recycler le serveur DNS (kill –HUP de named);
- créer/modifier/supprimer tous les types d'enregistrements du DNS (SOA,
NS, MX, A, CNAME, PTR et SRV);
- créer/modifier/supprimer des comptes usagers dans Bdns;
Opérateur:
Cet usager peut créer/modifier/supprimer tous les enregistrements de
type MX, A, CNAME, PTR et SRV de toutes les zones du DNS;
Responsable:
Cet usager peut créer/modifier/supprimer tous les enregistrements de
type MX, A, CNAME, PTR et SRV des zones pour lesquelles il est désigné
responsable.
Connexion
et mot de passe
Tous les usagers doivent se connecter avec leur code d'usager/mot de passe avant
d'avoir accès aux fonctionalités du système.
L es usagers ont le droit de modifier leur mot de passe et peuvent choisir la
langue d'affichage qu'ils préfèrent.
Seul un usager de type administrateur peut modifier le type d'un autre usager
ou les zones du DNS assignées à un usager de type responsable.
Pour quelqu'un
qui connaît un peu comment fonctionne un service DNS, l'utilisation de
Bdns devrait être aisée dès le début. Les écrans
permettent de parcourir le DNS par les noms de domaines ou par les réseaux
IP qui le composent. Des boutons permettent d'accéder à des écrans
qui offriront de modifier ou supprimer les entrées affichées,
et d'autres boutons apportent des écrans permettant d'en créer
de nouvelles.
- Les enregistrements du DNS sont affichés dans des tableaux;
- Pour ajouter un enregistrement, cliquez sur le bouton 'ajouter' dans le haut
du tableau affichant un domaine ou une zone;
- Pour rechercher un enregistrement dans le DNS, cliquez sur le bouton 'Rechercher'.
Deux types de recherche sont disponibles:
- La recherche à partir du menu principal, qui recherche dans tout le
DNS;
- La recherche dans un domaine DNS ou un réseau IP qui recherche seulement
dans ce domaine ou ce réseau IP;
- Lorsqu'il y a un bouton bleu contenant la lettre 'M' à côté
d'un champ, cela signifie qu'on peut modifier le champ en cliquant dessus;
- Lorsqu'il y a un bouton rouge contenant ls lettre 'S' à la fin d'une
ligne de tableau, cela signifie qu'on peut supprimer la ligne (l'enregistrement)
en cliquant dessus;
- Chaque suppression dans Bdns (enregistrement ou zone complète) requiert
la confirmation par l'usager;
Pour ajouter une entrée:
Pour supprimer une entrée:
Pour rechercher une entrée dans la base de données du DNS:
Pour modifier une entrée:
La gestion
des zones
Chaque fois que vous modifiez un paramètre dans une zone, vous devez cliquer sur le bouton ‘Actualiser’ pour recycler le serveur DNS (Bdns envoie un "ndc reload" à named). Cette façon de faire a pour but d’éviter d’arrêter-redémarrer le serveur bind à chaque modification faite à une zone; vous pouvez ainsi, par exemple, modifier plusieurs paramètres SOA d’une zone, ajouter un serveur MX dans cette zone, et cliquer ‘Actualiser’ à la fin, pour recycler bind et rendre les changements effectifs.
Gestion
des usagers
La page de gestion des usagers est très simple à utiliser et utilise les mêmes boutons et fonctionne comme tout le rest de Bdns. La seule particularité réside dans la façon d'assigner des zones à un usager responsable:
L'usager responsable
pourra ainsi saisir des entrées de type A, CNAME, PTR et MX dans chacune
des zones pour lesquelles il est désigné 'responsable'.
Un usager responsable
qui n'a pas de zones dans sa liste de zones ne peut que consulter les entrées
du DNS; il ne peut effectuer aucune modification. Ce serait une bonne façon
de créer un usager de type 'lecture seulement'.
Attention à
la manipulation des usagers de type 'administrateur'
Si vous êtes connecté avec un compte de type 'administrateur' et
que vous changez votre type de compte pour 'operateur' ou 'responsable', vous
perdez instantanément votre privilège d'administrateur et vous
ne pourrez le retrouver qu'en utilisant un autre compte de type 'administrateur'
pour vous remettre vos droits. Si vous enlevez les droits d'administrateur au
seul compte de type 'administrateur' restant dans la liste des usagers, aucun
autre compte de type 'administrateur' ne vous permettra de regagner vos droits,
puisqu'ils n'en restera plus. Vous devrez alors modifier votre compte directement
dans la base de données.
Morale de cette histoire: ne sciez pas la branche sur laquelle vous êtes
assis !
5) Le futur
Il reste beaucoup de choses à ajouter / corriger à Bdns. Voici la liste en date du 18 août 2003 (si vous souhaitez en ajouter à cette liste, envoyez vos suggestions par EMail à thebutch@users.sourceforge.net
Voici une liste
non-exhaustive:
- Utilisation de nsupdate au lieu de dynupdate;
- Support pour une BD Oracle ;
- Permettre de modifier les noms des entrées dans la section ‘Parcourir
le DNS par IP ;
- Plus de validation dans la section ‘Gestion des zones’ ;
(fin du document)