PowerDNS Resolver installieren und DNSSEC Konfiguration

DNSSEC Validierung Version < 4.1.0

The DNSSEC implementation in the PowerDNS Recursor 4.0.x is known to have deficiencies due to its original design. When doing DNSSEC validation, ensure you are running 4.1.0 or later which has a fully reworked (and correct) DNSSEC implementation, siehe PowerDNS Recursor Dokumentation.


Die PowerDNS Nameserversoftware ist in einen autoritativen und auslösenden Teil aufgeteilt. Dies unterstützt die aus Sicherheitsgründen empfohlene strikte Trennung von autoritativer und auflösender Seite. Hier wird geschrieben wie der PowerDNS recursor als Resolver installiert und eingerichtet wird. Als Beispiel dient Debian 9, aber bis auf die konkrete Paketinstallationen (dort muss gemäß des Distributionsspezifischen Paketmanager vorgegangen werden), sind die Schritte auch auf andere Linux Distributionen anwendbar.

Installationsschritte

  1. Paket installieren
  2. DNSSEC-Validierung einschalten
  3. pdns_recursor starten
  4. DNSSEC-Validierung testen


Als Beispiel dient Debian 9, aber bis die Paketinstallationen, sind die Schritte auch für andere Linux Distributionen anwendbar.


Repositories einbinden

Auf der PowerDNS repositories-Seite finden sich Repositories fur Debian, Ubuntu, CentOS und SLES für deren verschiedenen Versionen, aufgeteilt in Recursor und autoritativen PowerDNS. Die Repos für Debian 9 müssen in


/etc/apt/sources.list.d/pdns.list

deb [arch=amd64] http://repo.powerdns.com/debian stretch-rec-41 main

und


/etc/apt/preferences.d/pdns

Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600


eingetragen werden. Sowie noch den öffentlichen GPG-Schlüssel aufnehmen


curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -

Paket installieren

apt-get install pdns-recursor

DNSSEC-Validierung einschalten

Die Konfigurationsdatei /etc/powerdns/recursor.conf editieren, um die DNSSEC-Validierung einzuschalten. Diese ist default auf process-no-validate, das heißt der angefragte Nameserver wird durch Setzen des DO Flags aufgefordert, eine DNSSEC-Validierung zurück zu liefern, aber das Ergebnis wird nicht verarbeitet. Also wird kein AD Flag gesetzt.

Nun setzt man:


dnssec=validate


Wenn der Recursor schon lief, muss man ihn neu starten, um die Änderung wirksam werden zu lassen.


pdns_recursor starten

Als allow-from sollte man den gültigen IP-Bereich setzen, oder dies in der Konfiguration unter

allow-from=10.156.108.11,127.0.0.1

oder mit

allow-from-file=

festlegen.


Dann kann man den PowerDNS-Recursor als Daemon starten:

pdns_recursor


oder die Einschränkungen auf direkt auf der Kommandozeile setzen, z.B.

pdns_recursor --local-address=10.156.108.11 --allow-from=127.0.0.1/24,10.156.108.11/22 --daemon


Testen

Mittels dig testet man die Auflösung einer Domain, und kann anhand des gesetzten AD Flags die DNSSEC-Validierung überprüfen.


dig lrz.de @10.156.108.11

; <<>> DiG 9.11.1-P3 <<>> lrz.de @10.156.108.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46887
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;lrz.de.                IN    A

;; ANSWER SECTION:
lrz.de.            85055    IN    A    129.187.255.234

;; Query time: 1 msec
;; SERVER: 10.156.108.11#53(10.156.108.11)
;; WHEN: Mon Jun 04 17:29:20 CEST 2018
;; MSG SIZE  rcvd: 51


Trust Anchors

Zur korrekt DNSSEC-Validierung muss die DNSSEC-Kette vollständig validieren, d.h. dem Resolver muss auch den Trust Anchor vorliegen, der sich nicht aus dem DNS auslesen läßt, sondern lokal vorliegt.

Dies erfolgt über das Program rec_control, mit dem die Recursor-Konfiguration zur Laufzeit geändert werden kann. Mit


rec_control get-tas

Configured Trust Anchors

        19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5

        20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d


kann am sich die vorhandenen Trust Anchors pro Domäne ausgeben lassen, im Beispiel ist nur der KSK der root domain, ".",  eingetragen.


rec_control add-ta <domain> <keyid> <algorithm> <hashtype> <hash>

lassen sich zusätzliche Trust Anchors hinzufügen.


KSK rollover (für ältere Versionen bzw. zukünftig)


Der Download des KSK-Schlüssels erfolgt am besten mittels eines Pythonscripts, get_trust_anchor.py, der ICANN, und der Hash mit Algorithmus und Hashtype findet sich in der Datei ksk-as-ds.txt bzw. ksk-as-ds.txt.backup_<YYYYMMDD>_<HHMMSS>, da der KSK mit keyID 19036 in der ersten Datei landet.


cat ksk-as-ds.txt
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

cat ksk-as-ds.txt.backup_20180605_153055
. IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D


Für einen zukünftigen root KSK key rollover, bzw. wenn bei einer nicht aktuellen Version von PowerDNS-Recursor bei der neben dem aktuellen KSK 19036 und zukünfige, schon publizierte, 20326, noch nicht als Trust Anchor eingetragen ist, erfolgt das über


rec_control add-ta . 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D


Trust Anchor Update

PowerDNS unterstützt (noch) nicht root-KSK key rollovers nach RFC 5011 und lädt und speichert damit keinen neuen root KSK automatisch, siehe PowerDNS Recursor Dokumentation.



Es ist kein Inhalt mit den angegebenen Stichworten vorhanden