DNSsec-Signaturen überprüfen mit Bind

Tagged as DE, net, dnssec, bind

Written on

Wer einen authoritativen Nameserver betreibt sollte die eigenen Zonen mit DNSsec sichern. Hier zeige ich euch, wie ihr einen rekursiven Nameserver so einrichtet, dass der DNSsec-Signaturen prüft. Was ist der Unterschied? Authoritative Nameserver sorgen beim Besitzer einer Domain, dass diese gefunden werden kann. Rekursive Nameserver suchen für einen Internetanschluss die richtige Verbindung zu fremden Domains.

Warum soll ich DNSsec aktivieren?

Klar gibt es auch immer ein paar Nachteile:

Manche meinen ein weiterer Nachteil sei, dass die Signaturen bei DNSsec nicht im Client sondern im Nameserver des Zugangsproviders geprüft werden. Die Verbindung zwischen Provider-Nameserver und Client sei so nicht geschützt. Dieses Problem lässt sich jedoch leicht dadurch lösen, dass der Client selbst Signaturprüfungen vornimmt. Wenn er das nicht tut, kann man dies nicht dem Protokoll anlasten.

Meiner Ansicht nach überwiegen die Vorteile bei weitem.

Umkonfiguration von Bind

Wir können DNSsec bei der Namensauflösung in bind sehr einfach aktivieren. Im options-Bereich der Konfigurationsdatei müssen nur zwei Zeilen eingetragen werden:

options {
        directory "/var/cache/bind";
        
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };

        allow-recursion { 127.0.0.1; ::1; };

        dnssec-enable yes;
        dnssec-validation yes;
};

Die Einstellung „dnssec-enable“ aktiviert den grundlegenden Support für DNSsec in Bind. Die Einstellung „dnssec-validation“ aktivert, dass beim Auflösen von Domains die DNSsec-Signaturen mit angefordert und überprüft werden.

Überprüfen, ob eine Domain DNSsec unterstützt

Mit der neuen Konfiguration gehört jede Namensauflösung in eine von zwei Kategorien:

  1. Die aufgelöste Domain ist nicht mit DNSsec geschützt. Das Ergebnis ist nicht sicherer als bisher.
  2. Die aufgelöste Domain ist durch DNSsec geschützt. Das Ergebnis, das wir bekommen, wurde von Bind überprüft. Wenn die Überprüfung fehlschlägt bekommen wir das Ergebnis gar nicht mehr.

Wie können wir feststellen in welchen dieser beiden Fälle eine Namensauflösung gehört? Entweder wir installieren uns ein Plugin in den Webbrowser. Der DNSsec-Status wird dann in der Adressleiste angezeigt. (z.B. hier für Firefox, hier für Chrome und hier für den Internet Explorer).

Auch auf der Kommandozeile können wir eine Domain überprüfen. Wie für alles hat der Befehl dig auch hierfür die passende Option: +dnssec. Der Parameter lässt dig den DNSsec-Status vom Resolver anfordern. Dieser wird dann von dig mit ausgegeben. Im Header wird hierzu das Flag „ad“ angezeigt, wenn die DNSsec-Prüfung erfolgreich war:

# dig switch.ch +dnssec

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> switch.ch +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36976
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 10

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;switch.ch. IN A

;; ANSWER SECTION:
switch.ch. 60 IN A 130.59.108.97
[...]
;; Query time: 330 msec
;; SERVER: ::1#53(::1)
;; WHEN: Mon May  6 21:33:12 2013
;; MSG SIZE  rcvd: 1211

Achtung Falle: Wer so testen will, ob die eigene Zone korrekt mit DNSsec gesichert ist, kann falsche Ergebnisse bekommen. Wenn ein Nameserver eine Anfrage zu einer selbst gehosteten Domain beantwortet ist das ad-Flag nie gesetzt. Das liegt daran, dass er in diesem Fall keine Überprüfung der Signaturen durchgeführt hat. Das muss er auch nicht, da er bereits weiß, dass die Daten korrekt sind.

Wollt ihr eure eigene Zone überprüfen? Der öffentliche Nameserver von Google macht das für euch: dig example.com +dnssec @8.8.8.8 (8.8.8.8 ist eine der IP-Adressen unter denen Google öffentliche Nameserver betreibt.)


Unless otherwise credited all material Creative Commons License by Matthias Wimmer