zirkus mit dnssec-tools, rollerd, donuts

mit dnssec muss man sich beschaeftigen. soviel war schon klar. eingerichtet ist der ganze kram relativ schnell… aber dann will der key rollover auch gelernt sein. ich habe absichtlich kurze gueltigkeitszeitraeume eingestellt, um das ein wenig zu ueben.

bei den dnssec-tools gibts den nuetzlichen “rollerd“, der sich um das signieren von zonen und den key rollover kuemmert.

die grundlegende einrichtung bzw konfiguration von rollerd ist easy und wird an genuegend stellen beschrieben. nur haben die in debian wheezy eingesetzten versionen ein paar eigenheiten und fehler, mit denen man umgehen muss.

zuerst mal ist die standardeinstellung in der datei configdatei /etc/dnssec-tools/dnssec-tools.conf auf NSEC statt NSEC3 eingestellt. ist doof, denn das funktioniert mit dem ganzen rest zusammen nicht mehr. zonen lassen sich weder neu signieren noch der rollerd starten. die auftretende fehlermeldung ist eigentlich garkeine:

root@ns01:~# **************************************** here: www. meinetestzoneblabla.de.

keine weiteren, verwertbaren ausgaben im logfile. debugginglevel etc. nach oben geschraubt… trotzdem nichts. wenn man die richtigen suchbegriffe waehlt, findet man vielleicht auch was dazu. ich habs mehr durch zufall gefunden auf der suche nach einem anderen problem.

um also NSEC3 zu verwenden erstmal im configfile einschalten:

usensec3        yes

wenn man bis dahin schon alles konfiguriert und NSEC verwendet hatte, ist wie folgt vorzugehen:

Als erstes löscht man aus allen krf-Dateien den rollmgr-Eintrag, welcher auf rollerd verweist.
Danach stellt man in /etc/dnssec-tools/dnssec-tools.conf den Wert usensec3 auf yes.
Man signiert nun alle Zonen einmal per Hand mit zonesigner.
Danach kann man den rollerd wieder starten.

dann hat rollerd noch eine kleinen bug. im log taucht immer wieder auf:

Oct 27 05:00:38 2015: <command>: unable to send message to blinkenlights; turning off display

gibt auch nen bugreport dazu. die loesung ist ein kleiner patch:

patch 
--- rollerd.orig	2013-09-30 12:12:20.000000000 +0100
+++ rollerd	2013-09-29 17:50:28.000000000 +0100
@@ -7021,7 +7022,7 @@
 	#
 	# Don't try anything if we aren't connected to a display program.
 	#
-	#return if(!$display);
+	return if(!$display);
 	return if(fileno(DISPLAY) == -1);
 
 	#

ein weiterer, ganz fieser bug ist, dass rollerd statt der serial im zonefile den hostnamen “hochzaehlt”. am anfang eines zonefiles steht der SOA kram:

$TTL 3600
@  IN  SOA ns01.meinetestzoneblabla.de. zonemaster.meinetestzoneblabla.de. ( 
     2015080317       ; serial, todays date + todays serial #
     7200              ; refresh, seconds
     900              ; retry, seconds
     604800              ; expire, seconds
     86400 )            ; minimum, seconds
[…]

nachdem rollerd am werk war, steht da:

$TTL 3600
@  IN  SOA ns02.meinetestzoneblabla.de. zonemaster.meinetestzoneblabla.de. ( 
[…]

ein workaround ist es, den zeilenumbruch zu entfernen und die serial mit in die SOA zeile zu nehmen:

$TTL 3600
@  IN  SOA ns01.meinetestzoneblabla.de. zonemaster.meinetestzoneblabla.de. ( 2015080317  ; serial, todays date + todays serial #
     7200              ; refresh, seconds
     900              ; retry, seconds
     604800              ; expire, seconds
     86400 )            ; minimum, seconds
[…]

weiter gehts mit den fehlern… diesmal ists nicht der rollerd, sondern ein anderes programm namens “donuts” aus den dnssec-tools. normalerweise ueberprueft man damit die signierten dns zonen. allerings spuckts in meinem falle seit der verwendung eines TLSA records in der zone folgenden fehler:

WARNING: failed to read pri.meinetestzoneblabla.de.signed for an unknown reason
unrecognized type for _15._tcp.meinetestzoneblabla.de.
_25._tcp.meinetestzoneblabla.de.	3600	IN TLSA	3 1 1 (
, line 104

irgendwo habe ich einen hinweis gefunden, dass es am fehlenden TLSA eintrag in dem (sehr alten) Net::DNS perl modul liegen soll… also husch auch noch eingefuegt (der typ 52 ist fuer tlsa und fehlte):

'DHCID'     => 49,      # RFC4701
'NSEC3'     => 50,      # RFC5155
'NSEC3PARAM' => 51,     # RFC5155
'TLSA'      => 52,      # RFC6698
# 52-54 are unassigned
'HIP'       => 55,      # RFC5205
'NINFO'     => 56,      # non-standard

leider war dieser eingriff nicht von erfolg gekroent und ich haenge immernoch an dieser stelle. macht aber erstmal nichts, da der rest funktioniert und donuts “nur” zur ueberpruefung auf fehler dient. ich werde hier wieder berichten, wenn ich eine brauchbare loesung gefunden habe.

bei so viel schlechtem ist auch etwas gutes an dem debian paket dran. in den meisten howtos ist beschrieben, dass bei den dnssec-tools kein init script fuer rollerd dabei ist. beim debian paket allerdings schon. man muss nur seine startparameter fuer den daemon in die /etc/default/rollerd eintragen.
in meinem falle (fuer die testphase:)

DAEMON_OPTS="-rrfile /etc/bind/all.rollrec -directory /etc/bind -loglevel tmi -sleep 60"

und dann kann man wie ueblich auch den daemon starten…

/etc/init.d/rollerd start

so…. das macht natuerlich alles keinen spass, wenn nur die haelfte klappt. also ein bischen weiter probieren. 😉

wenn man eine aenderung in einer zone macht, erkennt der rollerd das und fuehrt ein “re-sign” durch:

wenn man eintrage ins zonefile macht, erkennt rollerd das, setzt die serial eins rauf und signiert die zone neu.

Oct 26 20:04:55 2015: meinetestzoneblabla.de: zonefile modified; re-signing
Oct 26 20:04:55 2015: meinetestzoneblabla.de: executing "/usr/sbin/zonesigner -rollmgr rollerd -dtconfig /etc/dnssec-tools/dnssec-tools.conf  -zone meinetestzoneblabla.de -krf meinetestzoneblabla.de.krf -signonly pri.meinetestzoneblabla.de pri.meinetestzoneblabla.de.signed"
Oct 26 20:04:55 2015: meinetestzoneblabla.de: executing "/usr/sbin/zonesigner -rollmgr rollerd -dtconfig /etc/dnssec-tools/dnssec-tools.conf  -zone meinetestzoneblabla.de -krf meinetestzoneblabla.de.krf -signonly pri.meinetestzoneblabla.de pri.meinetestzoneblabla.de.signed"
Oct 26 20:04:55 2015: meinetestzoneblabla.de: rollerd signed zone

aufgrund der einstellung “roll_loadzone 1” in der /etc/dnssec-tools/dnssec-tools.conf sollte dann eigentlich der bind auch einen reload machen… aber es ist irgendwie nicht mein tag.

also manuell hinterher:

rndc reload

das wars dann erstmal fuer heute… bald werde ich mehr berichten.

28. October 2015 by sd
Categories: Uncategorized | Leave a comment

Leave a Reply

Required fields are marked *