SwordArMor

Gestion automatique de DNSSEC avec OpenDNSSEC et nsd

Introduction

J’avais déjà parlé du DNSSEC avec knot. Ici l’article sera similaire mais utilisera deux daemons différents, nsd pour le serveur faisant autorité et OpenDNSSEC pour la gestion du DNSSEC.
Alors là, il va y avoir des petits malins qui vont me dire « oui mais tu sais déjà faire avec knot, alors pourquoi s’embêter avec autre chose, niania ». Et bien justement, c’est parce que je ne connais pas que j’essaye ; simplement parce que l’on pas toujours le choix des logiciels que l’on utilise, donc en connaître le plus possible est une bonne chose.

Je vais d’abord faire un déroulé censé marcher du premier coup, puis ensuite vider mon sac sur les problèmes que j’ai rencontrés avec OpenDNSSEC.

Installation

Cette configuration a été faite sous gentoo. Je n’ai pas forcément choisi les versions les plus récentes dans les dépôts car elle a vocation a être mise en production sur du debian. La base de données utilisée pour stocker les clés avec dev-libs/softhsm sera du sqlite.
printf '=net-dns/opendnssec-1.4.7 ~amd64\n=dev-libs/softhsm-1.3.7
~amd64\n=net-dns/nsd ~amd64' >> /etc/portage/package.accept_keywords
echo 'net-dns/opendnssec	-mysql	sqlite' >> /etc/portage/package.use
emerge -va net-dns/opendnssec dev-libs/softhsm

Configuration quand tout va bien

OpenDNSSEC

Il faut commencer par préparer le stockage des clés.

echo "0:/var/lib/opendnssec/softhsm_slot0.db" > /etc/softhsm.conf
touch /var/lib/opendnssec/softhsm_slot0.db
chown opendnssec:opendnssec /var/lib/opendnssec/softhsm_slot0.db
chmod o-r /var/lib/opendnssec/softhsm_slot0.db
softhsm --init-token --slot 0 --label OpenDNSSEC
Le mot de passe qui vous est demandé sera à renseigner dans la configuration d’OpenDNSSEC par la suite.

Maintenant, on va dire à OpenDNSSEC comment aller utiliser softhsm. Il faut éditer /etc/opendnssec/conf.xml
Ici je ne copie que le bout de configuration qui nous intéresse, il faut bien évidemment garder le reste :)

<Repository name="SoftHSM">
	<Module>/usr/lib64/softhsm/libsofthsm.so</Module>
	<TokenLabel>OpenDNSSEC</TokenLabel>
	<PIN>monmotdepasse</PIN>
	<SkipPublicKey/>
</Repository>

Ensuite, il faut que opendnssec puisse dire à nsd de recharger la zone lors des rotations de clés.
Depuis nsd4, il existe nsd-control. C’est une commande qui permet d’envoyer des ordres à nsd, tel que la relecture de zone. Pour pouvoir l’utiliser, il faut avoir accès à la clé publique du serveur et à la clé privée et publique du client.
Une fois que tout cela sera lisible par opendnssec, il faudra lui dire quelle commande utiliser.

chown root:opendnssec /etc/nsd/nsd_control.*
chown root:opendnssec /etc/nsd/nsd_server.pem
Puis toujours dans /etc/opendnssec/conf.xml :
<NotifyCommand>/usr/sbin/nsd-control reload %zone</NotifyCommand>

Nous allons maintenant dire à OpenDNSSEC où aller chercher la zone brute, et où la publier. Ça se passe dans /etc/opendnssec/zonelist.xml :
<Zone name="grifon.fr">
	<Policy>default</Policy>
	<!-- https://wiki.opendnssec.org/display/DOCS/zonelist.xml#zonelist.xml-Zones
	     (Note that this file is a temporary file that passed between OpenDNSSEC components and is not intended to be edited by users.)
	-->
	<SignerConfiguration>/var/lib/opendnssec/signconf/grifon.fr.xml</SignerConfiguration>
	<Adapters>
		<Input>
			<Adapter type="File">/var/lib/opendnssec/unsigned/grifon.fr</Adapter>
		</Input>
		<Output>
			<Adapter type="File">/var/lib/opendnssec/signed/grifon.fr</Adapter>
		</Output>
	</Adapters>
</Zone>
/var/lib/opendnssec/unsigned/grifon.fr correspond à une copie de la zone qui était servie jusqu’à présent (/etc/nsd/grifon.fr.zone dans mon cas). C’est aussi ce fichier qu’il faudra éditer si on veut mettre à jour la zone.

Pour finir, on démarre le service et on demande une signature de la zone.

service opendnssec start
ods-ksmutil update all
Et là, en théorie vous avez une zone signée dans /var/lib/opendnssec/signed/grifon.fr.

nsd

La configuration de nsd est très basique, il faut juste lui dire d’aller chercher la zone dans la fichier généré par opendnssec au lieu de l’ancien.

zone:
	name:		"grifon.fr"
	zonefile:	"/var/lib/opendnssec/signed/grifon.fr"
	# vos serveur secondaires

Publication de la KSK

Pour avoir la KSK, il faut utiliser ods-ksmutil key export --zone grifon.fr une fois que le délai de mise à jour complete de tous les caches soit passé (24h par défaut). Ce délai est visible avec ods-ksmutil key list --zone grifon.fr --verbose --all.

Mes mésaventures avec OpenDNSSEC

Pour commencer, la doc est vraiment mal foutue, elle est mal organisée et il en manque même des bouts (404 sur certaines pages). De plus, quelques commentaires dans les fichiers de conf ne feraient pas de mal histoire de dire à quoi sert quel fichier ; je pense notamment au fichier temporaire dans zonelist.xml.

Parfois, les erreurs n’ont rien à voir avec le problème. Si je reprends l’exemple du fichier temporaire, je l’avais oublié au début et j’avais comme erreur « /etc/opendnssec/zonelist.xml:7: element Adapters: Relax-NG validity error : Did not expect element Adapters there » alors que le souci était que j’avais oublié une ligne, pas que ce bloc n’a rien à faire là. Et puis, c’est pas comme si le message était à l’opposé de ce qu’il faut faire…

Toujours sur cette histoire de fichier temporaire, il n’y a pas de commentaire à son propos dans l’exemple de conf (c’est moi qui l’ai rajouté à la main dans celle que j’ai copiée). N’ayant rien vu dans le dossier d’exemple, je me suis dit qu’il ne servait pas à grand chose. Et ben c’est raté.

Le MTU et le MSS

En théorie

Le MTU est la taille maximale qu’un paquet peut avoir lors de son transport sur le réseau. Elle est généralement de 1500 octets. À partir de ce MTU, nous calculons le MSS, c’est à dire la quantité maximale de données que nous pouvons atteindre dans un ...

Lire la suite

Gestion automatique de DNSSEC avec knot

Depuis quelques temps, je me suis mis au DNSSEC. Comme je suis feignant, je n’ai pas envie de re-signer ma zone à la main tous les jours :) Comme j’ai vu que knot savait gérer la signature DNSSEC comme un grand, je me suis dit que ça serait une ...

Lire la suite

Complétion de dig avec zsh

J’utilise zsh comme shell par défaut sur mon laptop. J’en suis satisfait, sauf que je n’avais pas de complétion pour la commande dig(1).
En demandant comment utiliser la complétion de bash pour cette commande, un gentil monsieur a tout simplement écrit un script de complétion pour ...

Lire la suite

Problèmes avec systemd et pourquoi j’aime l’init de BSD

Lire la suite

Mise en place d’un tunnel L2TP chiffré avec IPsec autentifié avec radius

Cette infrastructure a été mise en œuvre au sein de grifon afin de fournir un VPN le plus proche possible de la collecte ADSL.

Côté serveur

Le radius

Le radius sert à authentifier les utilisateurs et à donner les autorisations qui leur sont relatives (comme par exemple, quelle adresse IP ...

Lire la suite

Réplication master/master entre deux serveurs mail avec dovecot-dsync

En gros, ça sert à éviter de faire exploser votre queue de mails

Peut-être avez-vous déjà un serveur mail secondaire pour votre domaine, qui discutent entre eux avec du SMTP tout simple. Cela fonctionne très bien tant que le serveur principal n’est pas trop longtemps dans le noir, sinon ...

Lire la suite

Router son bloc IPv6 /48 pour ses VMs chez online.net

Jusqu’à aujourd’hui je n’utilisais qu’une IPv6 chez online, tout tournait sur la même machine. Puis, je me suis dit que ça serait pas mal de séparer un peu les choses, simplement parce que je ne savais pas le faire.
Je suis parti sur des containers LXC ...

Lire la suite

Installer son propre résolveur DNS pour contourner la censure du gouvernement

Contexte

Vous le savez peut-être déjà mais le gouvernement a fait voter une loi qui lui permet de censurer n’importe quel site s’il ne correspond pas à ses attentes. Feu islamic-news.info vient d’en faire les frais. La question ici n’est pas de déterminer si ce ...
Lire la suite

Le source-specific routing sous linux 3.12 et supérieur

D’abord définissons ce qu’est le source-specific routing

Le source-specific routing se traduit en français par « routage en fonction de la source ». En termes moins barbares, cela veut dire que l’on enverra nos paquets via une route différente en fonction de leur provenance. Cela sert par exemple quand ...
Lire la suite

Page 1 / 3 »