Domain Name System absichern mit DNSSEC

Seite 8: Das kleine DNSSEC-Einmaleins

Inhaltsverzeichnis

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)