polux     Julien Thomas - TELECOM Bretagne frenchenglish

Déploiement de BIND9

Le serveur choisi est celui le plus utilisée, BIND9, en version 9.4.1-r1. Le paquet installé se nomme logiquement bind. L'application du patch de Venaas (+ ldap, Venaas : http ://www.venaas.no/ldap/bind-sdb/) en version 1.1.0 a été nécessaire pour pouvoir activer correctement l'option ldap à la compilation en plus de l'option ssl. Ainsi la procédure d'installation ne s'est pas limité à l'éxécution de la commande emerge bind.

Objectifs

Le serveur DNS a pour but de configurer automatiquement les différents serveurs. Afin de centraliser les données, le serveur DNS repose lui aussi sur le serveur LDAP, qui contient toutes les informations de la plateforme.

Procédure d'installation

Par chance la modification des sources avant l'installation d'un paquet sur Gentoo est aisé puisque le mécanisme d'installation d'une application consiste simplement en la compilation de ses sources. Il sufit alors de décomposer les étapes effectuées par la commande emerge, de les éxécuter semi-manuellement et de faire la modification de source au bon moment.

Téléchargement des sources

Il faut tout d'abord télécharger les sources et vérifier leur intégrité. Pour celà nous allons utiliser l'option fetch de la commande ebuild sur l'ebuild désiré de bind. Les ebuild se trouve dans le répertoire /usr/portage/, classé selon la hierarchie classique des paquets Gentoo. Ainsi l'ebuild désirée se trouve dans le dossier /usr/portage/net-dns/bind/. La version installée est la version 9.4.1-r1, nous utiliserons donc le fichier bind-9.4.1-r1.ebuild.

La commande à executer est ebuild bind-9.4.1-r1.ebuild fetch si l'on se trouve dans le répertoire /usr/portage/net-dns/bind/. Il faut ensuite décompresser l'archive téléchargée dans le répertoire /usr/portage/distfiles/ avec la commande ebuild bind-9.4.1-r1.ebuild unpack. Les sources sont alors décompressées dans le dossier /var/tmp/portage/net-dns/bind-9.4.1-r1. C'est le dossier work/bind-9.4.1 qui nous intéressera plus particulièrement.

Modification des sources

Nous voila donc à la racine du répertoire de sources à proprement parlé. Il suffit alors de suivre les instructions du fichier INSTALL du patch téléchargé sur le site de Venaas. Il st a noté qu'il y une option SSL non activé par défaut, dans ce patch. C'est la configuration que nous avons choisi.

Les opérations à effectuer sont alors :

  • Récupérer le patch sdb-ldap
  • Repertoire /usr/portage/net-dns/bind/ : analyser (fetch) et Décompresser (unpack) l'archive via l'ebuild bind-9.4.1- r1.ebuild
  • Repertoire /var/tmp/portage/net-dns/bind-9.4.1-r1/work/bind-9.4.1
  • Copier ldapdb.c vers bin/named
  • Copier ldapdb.h vers bin/named/include
  • Modifier bin/named/Makefile.in. Si aucun autre driver n'est prévu (ce qui est le cas pour notre maquette), le makefile doit alors contenir les lignes suivantes :
    DBDRIVER_OBJS = ldapdb.@O@
    DBDRIVER_SRCS = ldapdb.c
    DBDRIVER_INCLUDES = −I/usr/local/include
    DBDRIVER_LIBS = −L/usr/local/lib −lldap −llber −lresolv
    
    Bien que les librairies soient stockées dans le répertoire /usr/lib, il faut bien indiquer /usr/local/lib comme répertoire de librairies pour GCC. Sinon, la compilation échouera.
  • Modifier bin/named/main.c pour y ajouter les références au nouveau driver. Il s'agit en fait d'insérer le fichier header ainsi que les points d'entrées, aux endroits prévus par bind :
    /*
    /* Include header files for database drivers here .
    */
    /* #include "xxdb.h" */
    #include "xxdb.h"
    . . .
    /*
    * Add calls to register sdb drivers here .
    */
    /* xxdb_init ( ) ; */
    ldapdb_init ( ) ;
    . . . .
    /*
    * Add calls to unregister sdb drivers here .
    */
    /* xxdb_clear ( ) ; */
    ldapdb_clear ( ) ;
    
  • répertoire /usr/portage/net-dns/bind/ : terminer alors les modifications en remettant à jour BIND via l'ebuild bind-9.4.1-r1.ebuild.

Il suffit ensuite d'executer les commandes ebuild bind-9.4.1-r1.ebuild compile, ebuild bind-9.4.1-r1.ebuild install et ebuild bind-9.4.1-r1.ebuild qmerge. Ceci complète l'installation qu'aurait faire emerge, si on avait pas eu besoin de modifier les sources.

Configuration de LDAP

Dans le cas du serveur DNS, on se contente de se connecter au serveur LDAP avec le compte Manager. Un login sera créé par la suite et les accès seront définit dans la partie sécurité. Il suffit alors simplement de créer la branche dn: ou=polux.org,ou=dns,ou=services,ROOT_DN qui servira à garder les informations de configuration du DNS. Remarquons qu'à chaque requête DNS, le serveur ira lire la base LDAP et que la simple modifocation de cette base permet la mise à jour dynamique des DNS sans redémarrer le serveur DNS.

Il est nécessaire d'importer le schéma dnszone.schema dans le dossier /etc/openldap/schema qui définit les classes nécessaire à BIND pour la configuration via LDAP. Ce fichier peut être trouvé sur internet à l'adresse suivante http://www.venaas.no/ldap/bind-sdb/dnszone-schema.txt (Schema pour le support de ldap sur bind, Venaas). Pour plus de rapidité on peut alors aussi ajouter les index définit lors de la configuration du serveur LDAP :

include /etc/openldap/schema/dnszone.schema
index zoneName eq
index relativeDomainName eq

Notons qu'une entrée ayant relativeDomainName comme nom de domaine est nécessaire pour que cela marche. Dans notre cas, nous avons donc crée l'entrée relativeDomainName=polux.org,ou=polux.org,ou=dns,ou=services,ROOT_DN avec l'attribut zoneName=polux.org.

L'entrée @

C'est l'entrée la plus importante de la base LDAP puisque l'on y définit les informations essentielles du domaine : mXRecord indique quelle machine est responsable du transfert de courrier électronique, nSRecord correspond au serveur de noms ayant autorité sur le domaine, tandis que sOARecord permet de décrire le serveur de nom ayant autorité sur la zone, ainsi que l'adresse électronique du contact technique. Enfin tXTRecord permet simplement d'indiquer un commentaire sur l'entrée.

Définir une association nom-IP

Il faut alors créer une entrée ayant pour référence l'attribut relativeDomainName avec pour valeur le nom désiré, ayant comme classe mère top et dNSZone, et compléter l'attribut zoneName avec le nom du domain géré, ici polux.org. On renseigne alors l'adresse IP dans le champ aRecord, la classe DNS étant dNSClass=IN. C'est le type d'enregistrement fait pour mv1, mv2, mv3 et mv4, renseignés respectivement aux adresses IP : 10.133.14.11, 10.133.14.12, 10.133.14.13 et 10.133.14.1.

Définir un alias d'un nom

C'est la même procédure que pour créer une entrée de type aRecord, sauf que l'on renseigne l'attribut cNAMERecord avec le nom dont on veut en faire l'alias. C'est la cas pour notre maquette pour des entrées tels que auth, ldap, smtp, etc. Le type de la classe DNS est alors CNAME (dNSClass=CNAME).

Configuration du Fichier /etc/bind/named.conf

Le Fichier /etc/bind/named.conf indique à BIND quels sont les domaines à gérer et comment les gérer. Dans notre cas, il est nécessaire d'indiquer à BIND que le domaine polux.org est géré et qu'il doit prendre se configuration pour ce domaine sur le serveur LDAP. De plus il faut autoriser les machines virtuelles à accéder au serveur DNS. Pour plus de détails, voir le listing ci-dessous. La configuration de la connexion au serveur LDAP s'effectue via la ligne database "ldap ldap://LDAP_URL/ou=polux.org,ou=dns,ou=services, ROOT_DN???? 172800 !bindname=cn=Manager%2cdc=polux%2cdc=org ,!x-bindpw=tutu,x-tls"; qui contient :

  • la méthode d'accès aux informations : une base de données (database) de types ldap ("ldap).
  • la méthode de connexion à la base ldap://ldap.polux.org/ ainsi que la branche de base où effectuer la recherche, ou=polux.org,ou=dns,ou=services,ROOT_DN.
  • la syntaxe ???? permet de respecter les contraintes syntaxiques définies par la RFC 225 (The ldap url format, Network Working Group, December 1997, M. Smith T. Howes : http ://www.ietf.org/rfc/rfc2255.txt). Une version française de cette RFC est également disponible sur Internet (Le format d'url de ldap, traduction française, Yves LESCOP, 2255 - FR, M. Smith T. Howes : http://ylescop.free.fr/mrim/protocoles/rfc-fr/ldap/rfc2255.htm).
  • 172800 est le temps de péremption du cache de BIND.
  • la connexion se fait en mode tls avec les identifiants classiques : !bindname=cn=Manager%2cdc=polux%2cdc=org,!x-bindpw=tutu,x-tls";

Pour des raisons techniques, il faut laisser obligatoirement une valeur pour le temps de péremption et à cette position, sous peine de ne pas pouvoir démarrer BIND. Bien que ce soit une limitation due au patch LDAP pour bind (sdb-ldap, comme indiqué dans la partie installation 1.4.9), cela permet également de définir la valeur par défaut du TTL des entrées définies dans l'annuaire LDAP.

options {
directory "/var/bind" ;
listen-on-v6 { none ; } ;
# Autorise les machines virtuelles à effectuer des requêtes DNS sur ce serveur
listen-on { 127.0.0.1 ; 10.133.14/24 ;} ;
pid-file "/var/run/named/named.pid" ; } ;
# Définit la résolution pour tous les domaines non spécifiés
# hint pour effectuer une requete comme un client
# voir named.ca pour voir les serveurs questionnés
# rajouter un serveur ici si on a pas acces directement à internet ou utiliser la
commande query-source
zone "." IN {
type hint ;
file "named.ca" ;
} ;
zone "localhost" IN {
type master ;
file "pri/localhost.zone" ;
allow-update { none ; } ;
notify no ;
} ;
zone "127.in-addr.arpa" IN {
type master ;
file "pri/127.zone" ;
allow-update { none ; } ;
notify no ;
} ;
zone "polux.org" {
type master ;
database "ldap ldap ://ldap.polux.org/ou=polux.org,ou=dns,ou=services,ROOT_DN ? ? ? ? 172800 !bindname=cn=Manager \
%2cROOT_DN, !xbindpw=tutu,x-tls" ;
allow-update { none ; } ;
notify no ;
} ;

/etc/bind/named.conf



«Design-by-assumption works as long as assumptions hold. Assumptions are shortcuts to useful efficiencies, provided they are not violated. »
David S. Isenberg

«If the kernel is not evaluated to an MLS-capable protection profile, MLS features cannot be trusted regardless of how impressive the demonstration looks.»
J. Davidson