[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 2 DNS maitres dans une infra



Le Ven 19 septembre 2008 14:50, thierry.leurent@asgardian.be a écrit :
[...]
> Normalement cela ne devrait pas poser de problèmes, je voudrais votre
> avis.

Voici la démarche que j'ai suivie pour le faire (j'ai documenté
l'installation des serveurs pour qu'elle soit reproductible, mais je ne
peux pas distribuer le document entier, désolé).

C'est un peu long, mais bon, tu devrais y trouver ton bonheur. Pas facile
de faire un copier/coller d'un texte mis en page dans un courriel pur
texte !

Fanfan

Serveur DNS maître : bind
Modification des sources et recompilation du paquetage
Le paquet bind fourni par Debian ne prend pas en charge LDAP en tant que
base de données.
Nous allons donc recompiler le paquetage avec un correctif sur un poste de
développement.
Installons les outils de développement et les dépendances de compilation
depuis un compte
d'administration :
[ root@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # aptitude install devscripts debhelper fakeroot dpkg-dev build-essential
[ root@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # aptitude install libopenldap-dev libssl-dev libtool bison
Téléchargeons les sources du paquetage et du correctif :
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src $ wget http://bind9-ldap.bayour.com/bind-sdb-ldap-1.0.tar.gz
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src $ tar xvzf bind-sdb-ldap-1.0.tar.gz
bind-sdb-ldap-1.0/
bind-sdb-ldap-1.0/ldapdb.c
bind-sdb-ldap-1.0/ldapdb.h
bind-sdb-ldap-1.0/README
bind-sdb-ldap-1.0/INSTALL
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src $ apt-get source bind9
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Nécessité de prendre 4323ko dans les sources.
Réception de : 1 ftp://ftp.fr.debian.org etch/main bind9 1:9.3.4-2 (dsc)
[748B]
Réception de : 2 ftp://ftp.fr.debian.org etch/main bind9 1:9.3.4-2 (tar)
[4044kB]
Réception de : 3 ftp://ftp.fr.debian.org etch/main bind9 1:9.3.4-2 (diff)
[279kB]
4323ko réceptionnés en 2m33s (28,2ko/s)
dpkg-source: extracting bind9 in bind9-9.3.4
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src $ cd bind9-9.3.4/
On ajoute la dépendance aux paquetages LDAP pour la compilation. La
dépendance pour le
paquetage binaire sera calculée automatiquement :
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ vim debian/control
Source: bind9
Section: net
Priority: optional
Maintainer: LaMont Jones <lamont@debian.org>
Uploaders: Bdale Garbee <bdale@gag.com>
Build-Depends: debhelper (>=4.1.16), libssl-dev, libtool, bison, libldap2-dev
Standards-Version: 3.7.2.0
On change le numéro de version du paquetage binaire à générer. Attention,
le nom et l'adresse
électronique doivent impérativement correspondre à une clé secrète du
trousseau de clés GPG du
développeur pour que cette clé puisse signer les paquetages créés.
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ dch -i
bind9 (1:9.3.4-2ldap) unstable; urgency=low
* Patch sdb-LDAP 1.0
-- François Cerbelle <francois.cerbelle@globalcorp.fr> Wed, 24 Oct 2007
14:56:09 +0200
bind9 (1:9.3.4-2) unstable; urgency=high
* Actually really do the merge of 9.3.4. Sigh. Closes: #408925
-- LaMont Jones <lamont@debian.org> Mon, 29 Jan 2007 06:09:03 -0700
On applique le correctif selon les instructions qu'il contient :
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ cp ../bind-sdb-ldap-1.0/ldapdb.c bin/named/
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ cp ../bind-sdb-ldap-1.0/ldapdb.h bin/named/include/
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ vim bin/named/Makefile.in
#
# Add database drivers here.
#
DBDRIVER_OBJS = ldapdb.@O@
DBDRIVER_SRCS = ldapdb.c
DBDRIVER_INCLUDES = -I/usr/include
DBDRIVER_LIBS = -L/usr/lib -lldap -llber -lresolv
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ vim bin/named/main.c
/*
* Include header files for database drivers here.
*/
/* #include "xxdb.h" */
#include <ldapdb.h>
[...]
/*
* Add calls to register sdb drivers here.
*/
/* xxdb_init(); */
ldapdb_init();
[...]
/*
* Add calls to unregister sdb drivers here.
*/
/* xxdb_clear(); */
ldapdb_clear();
Recompilons le paquetage. À deux reprises le programme va vous demander la
phrase de
passe pour déverrouiller votre clé secrète et signer deux fichiers.
[ fcerbell@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
/usr/src/bind9-9.3.4 $ dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package is bind9
dpkg-buildpackage: source version is 1:9.3.4-2ldap
dpkg-buildpackage: source changed by Francois Cerbelle
<francois.cerbelle@globalcorp.fr>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 9.3.4-2ldap
fakeroot debian/rules clean
[...]
You need a passphrase to unlock the secret key for
user: "François Cerbelle <francois.cerbelle@globalcorp.fr>"
1024-bit DSA key, ID A4CAE83F, created 2001-09-11
dpkg-genchanges
dpkg-genchanges: pas d'inclusion du code source original dans l'envoi («
upload »)
signfile bind9_9.3.4-2ldap_i386.changes
You need a passphrase to unlock the secret key for
user: "François Cerbelle <francois.cerbelle@globalcorp.fr>"
1024-bit DSA key, ID A4CAE83F, created 2001-09-11
dpkg-buildpackage: binary and diff upload (original source NOT included)
Vous disposez maintenant de toute une collection de paquetages binaires et
sources dans le
répertoire parent. Si vous disposez d'un dépôt, c'est le moment de faire
un dput, mais c'est hors du
cadre de ce document.
On retire les paquetages qui ont servi à la recompilation sur le poste de
développement :
[ root@ws210 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # aptitude purge libldap2-dev libssl-dev libtool bison devscripts
debhelper fakeroot dpkg-dev build-essential type-handling
Nous allons nous contenter de télécharger les paquetages binaires sur le
serveur par scp (ssh).
Installation et protection du paquetag
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # dpkg -i bind9_9.3.4-2ldap_i386.deb libdns22_9.3.4-2ldap_i386.deb
libisccfg1_9.3.4-2ldap_i386.deb libisc11_9.3.4-2ldap_i386.deb
libisccc0_9.3.4-2ldap_i386.deb bind9-host_9.3.4-2ldap_i386.deb
dnsutils_9.3.4-2ldap_i386.deb libbind9-0_9.3.4-2ldap_i386.deb
liblwres9_9.3.4-2ldap_i386.deb
(Lecture de la base de données... 19549 fichiers et répertoires déjà
installés.)
[...]
Comme nous ne voulons pas que les paquetages utilisant LDAP soit modifié
lors d'une mise à
jour automatique du système, nous allons les marquer pour qu'ils soient
toujours conservés.
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # aptitude hold bind9 libdns22 libisccfg1 libisc11 libisccc0
Configuration
Comme le serveur DNS est prévu pour répondre aux demandes concernant ses
zones
uniquement, nous allons désactiver les requêtes récursives sauf pour
celles venant du serveur luimême.
Cela permet d'utiliser le cache de bind. De plus, nous allons interdire
TOUS les transferts de
zones (AXFR et IXFR) par défaut, nous les réactiverons zone par zone dans
leur section
spécifique :
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you might need to uncomment the query-source
// directive below. Previous versions of BIND always asked
// questions using port 53, but BIND 8.1 and later use an unprivileged
// port by default.
// query-source address * port 53;
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
allow-recursion { 127.0.0.1; };
allow-transfer { none; };
};
Nous allons ajouter les directives de journalisation de l'activité de bind
dans syslog. Nous
ajouterons des ACL définissant les adresses IP des différents DNS
secondaires des fournisseurs
autorisés à effectuer des transferts de zone (AXFR) et nous utilisons la
directive « notify » pour que
les esclaves soient prévenus des modifications apportées sur les zones (à
condition de modifier aussi
le numéro de version des enregistrements). Et enfin, nous configurerons
les zones définies dans
l'annuaire dans les fichiers de configuration de bind en remplaçant
XXXXXXXX par le mot de passe de
l'utilisateur bind9 :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # vim /etc/bind/named.conf.local
//
// Do any local configuration here
//
logging {
category "default" { "syslog"; };
category "general" { "syslog"; };
category "database" { "syslog"; };
category "security" { "syslog"; };
category "config" { "syslog"; };
category "resolver" { "syslog"; };
category "xfer-in" { "syslog"; };
category "xfer-out" { "syslog"; };
category "notify" { "syslog"; };
category "client" { "syslog"; };
category "unmatched" { "syslog"; };
category "network" { "syslog"; };
category "update" { "syslog"; };
category "queries" { "syslog"; };
category "dispatch" { "syslog"; };
category "dnssec" { "syslog"; };
channel "syslog" {
syslog daemon;
severity warning;
print-time yes;
print-category yes;
};
};
acl "Gandi_DNS" {
217.70.177.60; 217.70.177.40;
};
acl "ColtFrance_DNS" {
195.68.0.11;
};
acl "Dedibox_DNS" {
xx.xx.xx.xx;
};
acl "Globalcorp_DNS" {
localhost;
aa.aa.aa.aa;
bb.bb.bb.bb;
};
zone "globalcorp.fr" in {
type master;
allow-transfer { Globalcorp_DNS; ColtFrance_DNS; Dedibox_DNS; };
notify yes;
database "ldap
ldap://127.0.0.1/zoneName=globalcorp.fr,ou=DNS,dc=globalcorp,dc=fr????!bindname=cn=bind9%2cou=System%2cdc=globalcorp
%2cdc=fr,!x-bindpw= XXXXXX X X 172800";
};
zone "globalcorp.com" in {
type master;
allow-transfer { Globalcorp_DNS; Gandi_DNS; Dedibox_DNS; };
notify yes;
database "ldap
ldap://127.0.0.1/zoneName=globalcorp.com,ou=DNS,dc=globalcorp,dc=fr????!bindname=cn=bind9%2cou=System%2cdc=globalcorp
%2cdc=fr,!x-bindpw= XXXXXXX X 172800";
};
zone "sylaos.fr" in {
type master;
allow-transfer { Globalcorp_DNS; ColtFrance_DNS; Dedibox_DNS; };
notify yes;
database "ldap
ldap://127.0.0.1/zoneName=sylaos.fr,ou=DNS,dc=globalcorp,dc=fr????!bindname=cn=bind9%2cou=System%2cdc=globalcorp
%2cdc=fr,!x-bindpw= XXXXXXX X 172800";
};
zone "sylaos.com" in {
type master;
allow-transfer { Globalcorp_DNS; Gandi_DNS; Dedibox_DNS; };
notify yes;
database "ldap
ldap://127.0.0.1/zoneName=sylaos.com,ou=DNS,dc=globalcorp,dc=fr????!bindname=cn=bind9%2cou=System%2cdc=globalcorp
%2cdc=fr,!x-bindpw= XXXXXXX X 172800";
};
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
Comme ce fichier contient maintenant le mot de passe de l'utilisateur
bind9 en clair, il faut
impérativement le protéger :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # chmod o-rwx /etc/bind/named.conf.local
Configuration de l'annuaire LDAP
Avant tout, si on laisse les scripts de redémarrage du système ainsi,
l'annuaire LDAP démarre
après le DNS. Bind ne peut donc pas s'initialiser correctement. Nous
allons donc modifier l'ordre de
démarrage des services :
[ root@sd-5569 ShLvl:1 Cmd:532 Ret:0 mer nov 14 16:53:13 ]
/ # update-rc.d -f slapd remove
Removing any system startup links for /etc/init.d/slapd ...
/etc/rc0.d/K80slapd
/etc/rc1.d/K80slapd
/etc/rc2.d/S19slapd
/etc/rc3.d/S19slapd
/etc/rc4.d/S19slapd
/etc/rc5.d/S19slapd
/etc/rc6.d/K80slapd
[ root@sd-5569 ShLvl:1 Cmd:533 Ret:0 mer nov 14 16:53:17 ]
/ # update-rc.d slapd defaults 14 80
Adding system startup for /etc/init.d/slapd ...
/etc/rc0.d/K80slapd -> ../init.d/slapd
/etc/rc1.d/K80slapd -> ../init.d/slapd
/etc/rc6.d/K80slapd -> ../init.d/slapd
/etc/rc2.d/S14slapd -> ../init.d/slapd
/etc/rc3.d/S14slapd -> ../init.d/slapd
/etc/rc4.d/S14slapd -> ../init.d/slapd
/etc/rc5.d/S14slapd -> ../init.d/slapd
Comme le serveur LDAP va héberger les données du DNS, il faut lui ajouter
le schéma
dNSZone (http://bind9-ldap.bayour.com/). Et lui indiquer les champs sur
lesquels il faut maintenir
un index pour accélérer les requêtes.
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # cp ../bind-sdb-ldap-1.0/dnszone.schema /etc/ldap/schemas
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # vim /etc/ldap/slapd.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/dnszone.schema
Nous créons d'abord un mot de passe pour l'utilisateur :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # slappasswd -v -h '{CRYPT}'
New password:
Re-enter new password:
{CRYPT}EcuRk2WzBDa3A
Nous créons un fichier LDIF à importer pour créer le conteneur qui
contiendra toute la
configuration des zones et l'utilisateur qui permettra à bind de se
connecter à l'annuaire :
dn: ou=DNS,dc=globalcorp,dc=fr
objectClass: top
objectClass: organizationalUnit
ou: DNS
dn: cn=bind9,ou=System,dc=globalcorp,dc=fr
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {crypt}U3Wqx0kia7Xws
description: DNS User
cn: bind9
Nous arrêtons le démon de l'annuaire :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.
Nous importons le fichier :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # slapadd fichier.ldif
Nous donnons les droits de consultation sur les informations de l'annuaire
à l'utilisateur créé :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # vim /etc/ldap/slapd.conf
[...]
access to dn.base="" by * read
access to dn.base="dc=globalcorp,dc=fr"
by dn="cn=admin,ou=System,dc=globalcorp,dc=fr" write
by dn="cn=bind9,ou=System,dc=globalcorp,dc=fr" read
by * none
access to dn.subtree="ou=DNS,dc=globalcorp,dc=fr"
by dn="cn=admin,ou=System,dc=globalcorp,dc=fr" write
by dn="cn=bind9,ou=System,dc=globalcorp,dc=fr" read
by * none
[...]
Ajoutons les index permettant d'accélérer les recherches de bind dans
l'annuaire LDAP :
# Indexing options for database #1
index objectClass eq
# On ajoute l'indexation des paramètres relatifs au DNS
index relativeDomainName eq
index zoneName eq
# Save the time that the entry gets modified, for database #1
lastmod on
On recalcule tous les index pour initialiser les nouveaux et rafraîchir
les anciens :
[ root@sd-5569 ShLvl:1 Cmd:507 Ret:0 mer oct 31 11:27:36 ]
~ # slapindex
WARNING!
Runnig as root!
There's a fair chance slapd will fail to start.
Check file permissions!
[ root@sd-5569 ShLvl:1 Cmd:509 Ret:0 mer oct 31 11:27:45 ]
~ # chown openldap.openldap /var/lib/ldap/*
Il faut enfin redémarrer l'annuaire :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # /etc/init.d/slapd start
Starting OpenLDAP: slapd.
Création des zones LDA
Nous allons insérer les zones déclarées dans bind dans l'annuaire à l'aide
du fichier LDIF en
annexe. Nous arrêtons le démon de l'annuaire :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.
importons le fichier :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # slapadd zones.ldif
et redémarrons l'annuaire :
[ root@sd-5569 ShLvl:1 Cmd:525 Ret:0 sam oct 27 12:08:24 ]
~ # /etc/init.d/slapd start
Starting OpenLDAP: slapd.

Fanfan
-- 
http://www.cerbelle.net - http://www.afdm-idf.org



Reply to: