From 73bd82682e0886d5b09c81e98ba0338f891a5b3e Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Fri, 11 Jan 2013 00:55:01 +0100 Subject: [PATCH] =?UTF-8?q?[bind.py]=20Possibilit=C3=A9=20de=20d=C3=A9clar?= =?UTF-8?q?er=20des=20zones=20sign=C3=A9=20par=20opendnssec.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore-this: 68a00379301354ac38bc7e1a6a2d370b darcs-hash:20130110235501-3a55a-66368702a1203be2e123d99709ebdbf3d2cc430e.gz --- gestion/gen_confs/bind.py | 58 +++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/gestion/gen_confs/bind.py b/gestion/gen_confs/bind.py index c4bd1f96..2611f7de 100644 --- a/gestion/gen_confs/bind.py +++ b/gestion/gen_confs/bind.py @@ -6,7 +6,7 @@ Copyright (C) Frédéric Pauget Licence : GPLv2 """ -import time, sys +import time, sys, re sys.path.append('/usr/scripts/gestion') from socket import gethostname from gen_confs import gen_config @@ -40,6 +40,7 @@ la base LDAP ### Fichiers à écrire # Répertoire d'écriture des fichiers de zone DNS_DIR = '/etc/bind/generated/' # Avec un / à la fin + DNSSEC_DIR = '/etc/bind/signed/' # Avec un / à la fin # Fichier de définition des zones pour le maître DNS_CONF = DNS_DIR + 'zones_crans' @@ -50,8 +51,11 @@ la base LDAP ## En cas de modification de ces zones penser à regéner le fichier de ## zone des esclaves (sur le serveur principal de bcfg2 : python /usr/scripts/gestion/gen_confs/bind.py puis lancer bcfg2 sur les miroirs) # Résolution directe - zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org' ] + zones_direct = [ 'crans.org', 'crans.ens-cachan.fr', 'wifi.crans.org', 'ferme.crans.org' , 'clubs.ens-cachan.fr', 'adm.crans.org','crans.eu','wifi.crans.eu' ] + zones_dnssec = ['crans.eu','wifi.crans.eu','v6.crans.eu','wifi.v6.crans.eu'] zones_v4_to_v6 = { + 'wifi.crans.eu': 'wifi.v6.crans.eu', + 'crans.eu': 'v6.crans.eu', 'crans.org': 'v6.crans.org', 'wifi.crans.org': 'wifi.v6.crans.org', 'adm.crans.org': 'adm.v6.crans.org', @@ -60,6 +64,7 @@ la base LDAP # Résolution inverse zones_reverse = config.NETs["all"] + config.NETs["adm"] + config.NETs["personnel-ens"] zones_v6_to_net = { + 'crans.eu': config.prefix["fil"][0], 'crans.org': config.prefix["fil"][0], 'wifi.crans.org': config.prefix["wifi"][0], 'adm.crans.org': config.prefix["adm"][0], @@ -76,18 +81,27 @@ la base LDAP ### Liste des délégations de zone # Pour les demandes de ces zones, le DNS dira d'aller voir les serveurs listés ici # Pour les noms des serveurs on met l'IP sans point ou le nom avec un point - DELEG = { 'tv.crans.org' : ['charybde.crans.org.' , 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.'] } + DELEG = { + 'tv.crans.org' : ['charybde.crans.org.' , 'freebox.crans.org.', 'sable.crans.org.' , 'mdr.crans.org.'] , + } ### Serveurs de mail # format : [ priorité serveur , .... ] MXs = ['10 redisdead.crans.org', '20 ovh.crans.org', '20 freebox.crans.org'] - SRVs = ['_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.', + SRVs = [ + '_jabber._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.', '_xmpp-server._tcp.crans.org. 86400 IN SRV 5 0 5269 xmpp.crans.org.', '_xmpp-client._tcp.crans.org. 86400 IN SRV 5 0 5222 xmpp.crans.org.', '_sip._udp.crans.org. 86400 IN SRV 5 0 5060 asterisk.crans.org.', '_sip._tcp.crans.org. 86400 IN SRV 5 0 5060 asterisk.crans.org.', '_sips._tcp.crans.org. 86400 IN SRV 5 0 5061 asterisk.crans.org.', ] + + # DS à publier dans zone parentes : { parent : [ zone. TTL IN DS key_id algo_id 1 hash ] } + # ex : { 'crans.eu' : ['wifi.crans.eu. 86400 IN DS 33131 8 1 3B573B0E2712D8A8B1B0C3'] } + # /!\ Il faut faire attention au rollback des keys, il faudrait faire quelque chose d'automatique avec opendnssec + DS = {} + ### Entète des fichiers de zone zone_entete=""" @@ -124,7 +138,12 @@ zone "%(NOM_zone)s" { # Si =0, ralera seulement contre les machines ne pouvant être classées verbose = 1 - restart_cmd = '/etc/init.d/bind9 reload' + hostname = short_name(gethostname()) + if hostname == short_name(DNSs[0]): + restart_cmd = '/usr/sbin/ods-signer sign --all && /etc/init.d/bind9 reload' + else: + restart_cmd = '/etc/init.d/bind9 reload' + ######################################FIN PARTIE DE CONFIGURATION def __str__(self) : @@ -184,8 +203,12 @@ zone "%(NOM_zone)s" { # Ecriture fd = self._open_conf(self.DNS_CONF_BCFG2,'//') for zone in zones : + if zone in self.zones_dnssec: + path=self.DNSSEC_DIR + 'db.' + zone + else: + path=self.DNS_DIR + 'db.' + zone fd.write(self.zone_template_slave % { 'NOM_zone' : zone, - 'FICHIER_zone' : self.DNS_DIR + 'db.' + zone, + 'FICHIER_zone' : path, 'ip_master_DNS': self.ip_master_DNS}) fd.close() @@ -235,6 +258,12 @@ zone "%(NOM_zone)s" { direct['crans.org'] += s + '\n' direct['crans.org'] += '\n' + ### Ajout d'eventuel champs DS pour les délégation dnssec + for zone,ds in self.DS: + for s in ds: + direct[zone] += s + '\n' + direct[zone] += '\n' + ### Tri des machines self.anim.iter=len(self.machines) for machine in self.machines : @@ -349,10 +378,21 @@ zone "%(NOM_zone)s" { for serv in self.DELEG[deleg]: direct[zone] = direct[zone] + "%s\tIN\tNS\t%s\n" % ( nom, serv ) + + ### aliasing pour crans.eu + direct['crans.eu']=re.sub('crans.org','crans.eu',direct['crans.org']) + direct['wifi.crans.eu']=re.sub('crans.org','crans.eu',direct['wifi.crans.org']) + direct[self.zones_v4_to_v6['crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['crans.org']]) + direct[self.zones_v4_to_v6['wifi.crans.eu']]=re.sub('crans.org','crans.eu',direct[self.zones_v4_to_v6['wifi.crans.org']]) + ### Ecriture des fichiers de zone et préparation du fichier de définition f = '' for zone, lignes in direct.items() + reverse.items() : - file = self.DNS_DIR + 'db.' + zone + if zone in self.zones_dnssec: + path = self.DNSSEC_DIR + 'db.' + zone + else: + path = self.DNS_DIR + 'db.' + zone + file = self.DNS_DIR + 'db.' + zone fd = self._open_conf(file,';') fd.write(self.zone_entete % \ { 'zone' : zone, 'serveur_autoritaire' : self.DNSs[0] , 'serial' : serial } ) @@ -361,10 +401,10 @@ zone "%(NOM_zone)s" { fd.write(lignes) fd.close() if short_name(gethostname()) in map(short_name, dns.DNSs[1:]): - f += self.zone_template_slave % {'NOM_zone': zone, 'FICHIER_zone': file, + f += self.zone_template_slave % {'NOM_zone': zone, 'FICHIER_zone': path, 'ip_master_DNS': self.ip_master_DNS} else: - f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : file } + f += self.zone_template % { 'NOM_zone' : zone, 'FICHIER_zone' : path } ### Ecriture fichier de définition fd = self._open_conf(self.DNS_CONF,'//')