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
- Paket installieren
- DNSSEC-Validierung einschalten
- pdns_recursor starten
- DNSSEC-Validierung testen
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.
Related articles
Es ist kein Inhalt mit den angegebenen Stichworten vorhanden