Bdns - Un système de gestion du DNS avec interface WEB

Éric Boucher, 1er février 2005 (boucher.eric@hydro.qc.ca)

 

1) Introduction


Bdns est un système WEB conçu pour gérer les entrées d'un serveur DNS. Il se présente sous la forme d'un ensemble de menus, de listes et d'écrans de saisie dans des pages WEB.


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.

 

2) Installation

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;
- Copiez voss fichiers de zones de DNS dans le sous-répertoire créé ci-dessus (/var/named/Bdns);

- Changez les droits et le propriétaire du répertoire /var/named/Bdns pour que l’usager bdns puisse lire et écrire les fichiers de configuration et des zones:
    chown -R bdns /var/named/Bdns
    chmod 755 /var/named/Bdns
    chmod 644 /var/named/Bdns/*

- Faites la même chose avec le fichier named.conf :
    chown bdns /etc/named.conf
    chmod 644 /etc/named.conf

- Éditez votre fichier named.conf pour faire pointer la directive "directory" sur le répertoire créé ci-dessus; si vous aviez:
  directory /var/named
remplacez par:
  directory /var/named/Bdns

- Démarrez (si ce n’est déjà fait) le serveur de BD Mysql;
- Redémarrez BIND et assurez-vous que tout fonctionne et que vous n’avez pas d’erreur;
- Arrêtez-redémarrez le serveur WEB Apache pour activer la nouvelle configuration;
- Placez-vous dans le répertoire des scripts de Bdns. En tant que root, exécutez le script de création de la BD (mysql –p < cree_Bdns.sql);
- Éditez le fichier getzones.pl et changez la section « config » pour qu’il puisse lire les fichiers de named et se connecter à la BD;
- Peuplez les tables de la BD avec vos fichiers de config de named à l’aide du script getzones.pl;

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.

 


3) Quelques concepts

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.

4) Utilisation

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)