Domain Name System absichern mit DNSSEC
Seite 8: Das kleine DNSSEC-Einmaleins
Das kleine DNSSEC-Einmaleins
Erste Schritte mit DNSSEC kann man auch im heimischen LAN üben. Im Weiteren erklären wir, wie man den sehr weitverbreiteten DNS-Server BIND für DNSSEC aufsetzt. Da DNSSEC in ersten BIND-Versionen nicht oder nur fehlerhaft unterstützt wird, setzen wir mindestens Version 9.4.2 voraus. Wir gehen davon aus, dass eine Zone namens example1.com eingerichtet ist, die Zonendatei im Verzeichnis /etc/bind liegt und example1.com heißt. Die Zonendatei kann beispielsweise so aussehen:
$TTL 1W
@ IN SOA ns1.example1.com. mail.example.com. (
2007100801 ; serial
28800 ; refresh (8 Stunden)
7200 ; retry (2 Stunden)
604800 ; expire (1 Woche)
39600 ; minimum (11 Stunden)
)
example1.com. IN NS ns1.nameserver1.tld.
example1.com. IN NS ns2.nameserver2.tld.
example1.com. IN MX 10 mx1.mailserver1.tld.
example1.com. IN MX 20 mx2.mailserver2.tld.
example1.com. IN A 1.2.3.4
www CNAME example1.com.
ns1 IN A 2.3.4.5
ns2 IN A 3.4.5.6
mx1 IN A 7.8.9.10
mx2 IN A 11.12.13.14
Öffnen Sie eine Shell und wechseln Sie in das Verzeichnis /etc/bind. Für einige der Befehle sind Administratorrechte erforderlich. Zunächst wird ein Zone Signing Key erzeugt, dann der Key Signing Key (ZSK und KSK). Bind bringt dafür das Program dnssec-keygen mit:
dnssec-keygen -a RSASHA1 -b1024 -e -n ZONE example1.com
dnssec-keygen -a RSASHA1 -b1024 -e -n ZONE -f KSK example1.com
Die beiden Befehle erzeugen je zwei 1024 Bit lange private und öffentliche Schlüssel, also insgesamt vier (z. B. Kexample1.com.+005+42768.key und Kexample1.com.+005+42768.private). Der Dateiname beginnt grundsätzlich mit einem K (für Key). Nach dem Domain-Namen folgt eine dreistellige Zahl, die den verwendeten Algorithmus identifiziert. Den Inhalt der .key-Dateien kann man beispielsweise mit less anzeigen lassen; er sollte etwa so aussehen:
example1.com. IN DNSKEY 257 3 5
AQPEAo5p4+7iyM3QuNGf80f7EEqlblR+avRH88XIb7wo3bNI2KKv2hCrXoOAPkXGiV0Dob/EAMQ99Je+zSoMHyYx
Als Nächstes müssen die Schlüssel zur Zonendatei hinzugefügt werden:
cat K*.key >> example1.com
Nun signiert man die Zone mit den Schlüsseln:
dnssec-signzone -s now+0 -e now+2419200 -o example1.com -k Kexample1.com.+005+15342 example1.com \ Kexample1.com.+005+63344
Wenn alles fehlerfrei ablief, liegt im Ordner /etc/bind/ eine Datei namens example1.com.signed. Nun müssen Sie bind mitteilen, diese Zonendatei zu benutzen. Dazu wird in /etc/named.conf die Zeile
file "/etc/bind/example1.com";
durch
file "/etc/bind/example1.com.signed";
ersetzt und in der gleichen Datei im Bereich Options
dnssec-enable yes;
eingefügt. Nach dem Speichern startet man bind neu und hat dann eine per DNSSEC abgesicherte Zone. Die ersten Zeilen einer solchen Zonendatei sehen beispielsweise so aus:
; File written on Tue Apr 8 16:37:43 2008
; DNSSEC_signzone version 9.3.2
example1.com. 604800 IN SOA ns1.example1.com.
mail.example.com. (
2007100801 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
39600 ; minimum (11 hours)
)
604800 RRSIG SOA 5 2 604800
20080506143743 ( 20080408143743 63344 example1.com.
byogQ0rgEP3etDtrwoi+QWWRBMwwIUhlE1YY
BR54rJal0O1KDLSVoVMWDsv8ey68z+ROKNgW
fZqNbAsJR1sWVQ== )
604800 NS ns1.nameserver1.tld.
Ein einfaches Verfahren, um die Antworten einer DNSSEC-gesicherten Zone zu überprüfen, liefert das Kommando dig:
dig dnssec.se any
Es sollte eine Liste von DNS-Records liefern, darunter auch RRSIG, NSEC und DNSKEY – daran erkennt man, dass die abgefragte Domain DNSSEC-Einträge hat. Der Befehl
dig @a.ns.se dnssec.se DS
liefert die bei der Registry hinterlegten Schlüsseldaten. Der Server http://dnscheck.iis.se/ kann auch dnssec überprüfen, leider nur auf Englisch. Erschrecken Sie mal Ihren Admin:
http://dnscheck.iis.se/? time=1209996669&id=695&view=basic
Siehe auch:
- DNSsec Walker: Automatisches Zone-Walking auf DNSSEC-Servern
- Unbound: Validierender DNS-Server als Alternative zu Bind
(dz)