Grundsätzliche Inbetriebnahme von DNSSEC
- bind & chroot
- DNSSEC: Keys erstellen
- DNSSEC: Zone signieren
- DNSSEC: Output beim Restart
- Nochmal: die Zone signen
- Mögliche Fehler
In den WordPress-Entwürfen habe ich wieder einmal ein Howto entdeckt, das ich geschrieben, aber nicht zu 100% vollendet hatte. Es ist zwar schon etwas älter, hilft dem einen oder anderen aber ggf. ja doch weiter – weshalb ich gleich mal auf Publizieren klicken werde…
bind & chroot
Als erstes installieren wir das Paket bind9
, im nächsten Schritt dann noch dnsutils
– denn ohne dig
oder nslookup
kommen wir grundsätzlich nicht weit.
$ apt-get install bind9
$ apt-get install dnsutils
$/etc/init.d/bind9 stop
Den bind9
konfigurieren, damit er chrooted
läuft:
## file: "/etc/default/bind9"
OPTIONS="-u bind -t /var/named"
RESOLVCONF=yes
Wir haben also soeben definiert, dass der bind9 seine Umgebung in /var/named
haben soll. Dieses Verzeichnis sowie alle anderen benötigten müssen nun erst einmal erstellt und mit den korrekten Rechten versehen werden:
$ mkdir -p /var/named/etc
$ mkdir /var/named/dev
$ mkdir -p /var/named/var/cache/bind
$ mkdir -p /var/named/var/run/bind/run
$ mknod /var/named/dev/null c 1 3
$ mknod /var/named/dev/random c 1 8
$ chmod 666 /var/named/dev/null /var/named/dev/random
$ chown -R bind:bind /var/named/var/*
Mittels apt-get
wurde das Paket in die üblichen Pfade installiert. Nun muss dafür gesorgt werden, dass der Dienst in /var/named
auch seine Konfiguration findet, die per default ja in /etc
herumliegt. Damit hier nichts schiefgeht, kopieren wir die Konfiguration nach /var/named
und setzen anschließend einen Symlink nach /etc
:
$ mv /etc/bind /var/named/etc
$ chown -R bind:bind /var/named/etc/bind
$ ln -s /var/named/etc/bind /etc/bind
Im letzten Schritt muss die Konfiguration des syslogd
so angepasst werden, dass bind9
ihn weiterhin benutzen kann:
## file: "/etc/default/syslogd"
SYSLOGD="-a /var/lib/named/dev/log"
Zuletzt werden zuerst der sysklogd
und anschließend der bind9
neu gestartet:
$ /etc/init.d/sysklogd restart
$ /etc/init.d/bind9 restart
Auf eventuelle Fehlerausgaben in den Logs achten! Bis hierhin ist das Setup nichts Unübliches und eigentlich nichts, was man nicht schon einmal gemacht hätte; die DNSSEC-spezifischen Schritte folgen nun.
DNSSEC: Keys erstellen
Die grundsätzlichen Schritte zur DNS-Konfiguration möchte ich hier nicht erläutern – hierzu gibt es massenhaft Dokumentation im Netz. Wir gehen nun davon aus, dass uns die Domain example.com
gehört und wir für diese Domain eine Konfiguration erstellt haben.
$ dnssec-keygen -a DSA -b 768 -n ZONE example.com
Die resultierenden Files heißen
-
Kexample.com.+003+44994.key
und Kexample.com.+003+44994.priv
DNSSEC: Zone signieren
$ dnssec-signzone example.com
Dieser Vorgang nimmt Zeit in Anspruch – abhängig von der Anzahl der Einträge bis zu mehrere Stunden. Das resultierende File heißt in unserem Falle example.com.signed
und muss anstelle des bisherigen example.com
in die /etc/named.conf
eingebunden werden; anschließend den Restart des bind9
nicht vergessen.
DNSSEC: Output beim Restart
Jan 22 14:36:34 alert named[25208]: loading configuration from '/etc/bind/named.conf'
Jan 22 14:36:34 alert named[25208]: zone example.com/IN: loaded serial 2009012202 (signed)
Jan 22 14:36:34 alert named[25208]: zone c.b.a.in-addr.arpa/IN: zone serial unchanged
Jan 22 14:36:34 alert named[25208]: zone c.b.a.in-addr.arpa/IN: loaded serial 2009012202
Jan 22 14:36:34 alert named[25208]: zone example.com/IN: sending notifies (serial 2009012202)
Und nicht vergessen (in named.conf.options
): dnssec-enable yes;
:D Jetzt können (und sollten) Testabfragen initiiert werden:
$ dig @127.0.0.1 +dnssec example.com SOA
; <<>> DiG 9.3.4-P1.1 <<>> @127.0.0.1 +dnssec example.com SOA
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50821
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;example.com. IN SOA
;; ANSWER SECTION:
example.com. 7200 IN SOA dns.example.com. root.example.com. 2009012202 86400 7200 604800 172800
example.com. 7200 IN RRSIG SOA 3 2 7200 20090221122154 20090122122154 44994 example.com. BGtUEm6uwbtbv6MSEcLxT6xJlEAVEstEYWdZz63WYpar/v102e2gCXs=
;; AUTHORITY SECTION:
example.com. 7200 IN NS ns.nameserver.net.
example.com. 7200 IN RRSIG NS 3 2 7200 20090221122154 20090122122154 44994 example.com. BEICtkQ6JIiTGof0WFwQgdB/V9eXkmZC5Z6TxjX7ySmcvk66Dxm0fZ0=
;; ADDITIONAL SECTION:
ns.nameserver.net. 172585 IN A m.n.o.p
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jan 22 15:09:59 2009
;; MSG SIZE rcvd: 378
Auf die RRSIG-Ausgabe achten!
Nochmal: die Zone signen
$ dnssec-signzone -v 20 -o example.com example.com Kexample.com.+003+22333
dnssec-signzone: using 2 cpus
dnssec-signzone: debug 1: no_references: delete from rbt: 0x51fc00 example.com
dnssec-signzone: debug 1: calling free_rbtdb(.)
dnssec-signzone: debug 1: done free_rbtdb(.)
dnssec-signzone: debug 1: no_references: delete from rbt: 0x51ebd0 example.com
dnssec-signzone: debug 1: calling free_rbtdb(.)
dnssec-signzone: debug 1: done free_rbtdb(.)
dnssec-signzone: example.com/NSEC:
dnssec-signzone: signing with dnskey example.com/DSA/22333
dnssec-signzone: host1.example.com/NSEC:
dnssec-signzone: signing with dnskey example.com/DSA/22333
dnssec-signzone: host2.example.com/SOA:
dnssec-signzone: signing with dnskey example.com/DSA/22333
dnssec-signzone: example.com/NS:
dnssec-signzone: signing with dnskey example.com/DSA/22333
dnssec-signzone: example.com/MX:
dnssec-signzone: signing with dnskey example.com/DSA/22333
dnssec-signzone: example.com/DNSKEY:
dnssec-signzone: signing with dnskey example.com/DSA/22333
...
Mögliche Fehler
-
dnssec-signzone: failed to find keys at the zone apex: not found
→ im Zonen-File einfügen:$include (Keyfile).key
-
dns_master_load: /etc/bind/zone.example.com:1: Kzone.example.com.+003+61750.key: file not found
→ hier den vollständigen Pfad zur Datei angeben. -
/etc/bind/Kzone.example.com.+003+61750.key:1: no TTL specified; zone rejected Jan 22 13:47:01 alert named[24137]: zone example.com/IN: loading master file /etc/bind/zone.example.com: no ttl
→ erst die TTL, dann das$include
mit dem Key angeben.
Hintergrundbild: 2448x 2448px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten