OpenDnsSec et Bind avec Debian

J’avais posté quelques mois auparavant sur dnssec mais la configuration était relativement compliquée pour déployer DNS Sec. J’ai depuis jeté un oeil sur OpenDNSSEC qui est plus facile à configurer sur Debian. Voici les étapes pour configurer le tout :

Bon Gros Avertissement: Testez à vos risques et périls, ne pas mettre en production à moins de savoir ce que vous faites, des bisounours peuvent mourrir et votre taxe carbone va augmenter. Vous êtes toujours en train de lire ? On y va !

J’utilise Debian Wheezy (testing) pour cette configuration car les paquets OpenDNSSEC sont plus à jour. Commencez par installer ce qui suit : apt-get install opendnssec libhsm-bin softhsm libsofthsm libhsm-bin. Vous pouvez à présent configurer le tout. Tous les fichiers se trouvent dans le répertoire /etc/opendnssec.

Editez le ficher conf.xml (changez le PIN avec le vôtre) :

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: conf.xml.in 3192 2010-04-14 20:51:42Z rb $ -->
<Configuration>
        <RepositoryList>

                <Repository name="SoftHSM">
                        <Module>/usr/lib/libsofthsm.so</Module>
                        <TokenLabel>OpenDNSSEC</TokenLabel>
                        <PIN>6666</PIN>
                </Repository>
        </RepositoryList>
        <Common>
                <Logging>
                        <Syslog><Facility>local0</Facility></Syslog>
                </Logging>
                
                <PolicyFile>/etc/opendnssec/kasp.xml</PolicyFile>
                <ZoneListFile>/etc/opendnssec/zonelist.xml</ZoneListFile>
        </Common>
        <Enforcer>
                <Privileges>
                        <User>opendnssec</User>
                        <Group>opendnssec</Group>
                </Privileges>
                <Datastore><SQLite>/var/lib/opendnssec/db/kasp.db</SQLite></Datastore>
                <Interval>PT3600S</Interval>
        </Enforcer>
        <Signer>
                <Privileges>
                        <User>opendnssec</User>
                        <Group>opendnssec</Group>
                </Privileges>
                <WorkingDirectory>/var/lib/opendnssec/tmp</WorkingDirectory>
                <WorkerThreads>2</WorkerThreads>
                <NotifyCommand>/usr/sbin/rndc reload %zone</NotifyCommand>
        </Signer>
        <Auditor>
                <Privileges>
                        <User>opendnssec</User>
                        <Group>opendnssec</Group>
                </Privileges>

                <WorkingDirectory>/var/lib/opendnssec/tmp</WorkingDirectory>
        </Auditor>
</Configuration>

Puis editez kasp.xml comme suit :

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: kasp.xml.in 3564 2010-07-06 13:39:29Z rb $ -->
<KASP>
        <Policy name="default">
                <Description>A default policy that will amaze you and your friends</Description>
                <Signatures>
                        <Resign>PT2H</Resign>
                        <Refresh>P3D</Refresh>
                        <Validity>
                                <Default>P7D</Default>
                                <Denial>P7D</Denial>
                        </Validity>
                        <Jitter>PT12H</Jitter>
                        <InceptionOffset>PT3600S</InceptionOffset>
                </Signatures>
                <Denial>
                        <NSEC3>
                                <!-- <OptOut/> -->
                                <Resalt>P100D</Resalt>
                                <Hash>
                                        <Algorithm>1</Algorithm>
                                        <Iterations>5</Iterations>
                                        <Salt length="8"/>
                                </Hash>
                        </NSEC3>
                </Denial>
                <Keys>
                        <!-- Parameters for both KSK and ZSK -->
                        <TTL>PT3600S</TTL>
                        <RetireSafety>PT3600S</RetireSafety>
                        <PublishSafety>PT3600S</PublishSafety>
                        <!-- <ShareKeys/> -->
                        <Purge>P14D</Purge>

                        <!-- Parameters for KSK only -->
                        <KSK>
                                <Algorithm length="2048">7</Algorithm>
                                <Lifetime>P1Y</Lifetime>
                                <Repository>SoftHSM</Repository>
                                <Standby>0</Standby>
                        </KSK>

                        <!-- Parameters for ZSK only -->
                        <ZSK>
                                <Algorithm length="1024">7</Algorithm>
                                <Lifetime>P150D</Lifetime>
                                <Repository>SoftHSM</Repository>
                                <Standby>0</Standby>
                                <!-- <ManualRollover/> -->
                        </ZSK>
                </Keys>
                <Zone>
                        <PropagationDelay>PT43200S</PropagationDelay>
                        <SOA>
                                <TTL>PT86400S</TTL>
                                <Minimum>PT1H</Minimum>
                                <Serial>unixtime</Serial>
                        </SOA>
                </Zone>
                <Parent>
                        <PropagationDelay>PT9999S</PropagationDelay>
                        <DS>
                                <TTL>PT3600S</TTL>
                        </DS>
                        <SOA>
                                <TTL>PT172800S</TTL>
                                <Minimum>PT10800S</Minimum>
                        </SOA>
                </Parent>
                <Audit>
                        <!-- <Partial /> -->
                </Audit>
        </Policy>
</KASP>

Editez le fichier suivant /etc/softhsm/softhsm.conf puis ajoutez :

1:/var/lib/opendnssec/db/kasp.db

Nous pouvons à présent créer la base, il vous sera demandé de confirmer votre PIN, c’est celui que vous avez déclaré dans votre premier fichier de configuration. Executez ensuite : softhsm –init-token –slot 1 –label “OpenDNSSEC”

Editez ensuite votre fichier de groupes :

bind:x:107:opendnssec
opendnssec:x:114:bind
softhsm:x:999:opendnssec

Vous pouvez maintenant créer la base : ods-ksmutil setup

Je vous recommande de changer les permissions et de créer les liens symboliques pour les répertoires signed/unsigned utilisés par OpenDNSSEC.

chown -R opendnssec:opendnssec /var/lib/opendnssec/
chgrp opendnssec /etc/opendnssec/*
ln -s /var/lib/opendnssec/signed /etc/bind/master/
ln -s /var/lib/opendnssec/unsigned /etc/bind/master/

Nous voici au moment crucial de l’affaire, nous ajoutons à présent notre première zone. Copiez la dans /var/lib/opendnssec/unsigned puis faîtes :

ods-ksmutil zone add -z myzone.net
service opendnssec-enforcer restart
service opendnssec-signer restart

Si tout s’est bien passé, il devrait vous indiquer que votre zone existe. Si c’est le cas, il faut à présent la déclarer afin de générer les clés : ods-ksmutil key generate –policy default –interval 30. Vous devez maintenant attendre qu’elle devienne valide, ce qui devrait prendre au moins 12h selon votre configuration. Vous pouvez à présent vous faire plein de café et écouter quelques albums de métal.

Il faut à présent rendre vos zones disponibles. Plutot que de faire cela manuellement, voici un script (qu’il vous faudra placer dans le bon répertoire) :

ods-ksmutil  key list |grep ready|awk '{ print $1 }'  > list
for i in `cat list`;
do 
SERIAL=`ods-ksmutil key export --zone $i --keystate ready |awk '{ print $11 }'`
ods-ksmutil key ds-seen -z $i -x $SERIAL
done

Maintenant que la zone est prête, vous devez la faire signer par ods. Il vous suffit de faire service opendnssec-signer restart. Si cela a bien marché, vous devriez voir votre nouvelle zone signée ici : /etc/bind/master/signed. Il ne vous reste alors qu’à pointer Bind vers le bon fichier.

Ceci conclu notre article, les clés expirent : 6 mois pour la Zone Signing Key (ZSK) et un an pour la KSK. Vous devrez vous assurer de regénérer les clés avant leur expiration, vu que vous êtes supposé propager vos clés vers les serveurs root de l’internet.

Lorsque vous modifiez une zone, lancez ods-signer sign myzone.net pour la re-signer. Si vous avez besoin d’effacer une zone sous ods, exécutez la commande suivante : ods-ksmutil zone delete –zone myzone.net

Au moment de la rédaction de cet article, seulement certaines zones ont été signées, je réitère donc ici l’aspect recherche plus que production (bien que toutes mes zones soient signées).