DNSSEC: PowerDNS für den Root-Key-Rollover vorbereiten
Ab dem 11. Juli bekommt die DNS-Root-Zone einen neuen kryptografischen Schlüssel. Das kann validierende DNS-Resolver vor Probleme stellen, denn ohne den neuen Key können sie signierte DNS-Antworten nicht validieren. Dieser Beitrag zeigt, wie man den PowerDNS-Recursor aktuallisiert.
PowerDNS-Recursor ist ein moderner und skalierbarer DNS-Resolver, der gemäß der GNU Public License veröffentlicht worden ist. Er gehört nicht zu den besonders verbreiteten DNS-Resolvern, aber Internet-Service-Provider setzen ihn gern wegen seines Funktionsumfangs ein. Wie man BIND9, Unbound und andere gängige Resolver aktuallisiert, sofern sie es nicht selbst schaffen, haben wir ausführlich im kostenpflichtigen c’t-Beitrag „DNSSEC: Handreichungen für den Key-Rollover der Root-Zone“ beschrieben.
Der PowerDNS-Recursor validiert signierte DNS-Antworten seit der Version 4.0.0, die im Juli 2016 erschienen ist. Der Vertrauensanker, also der Key der Internet-Root-Zone, ist ungewöhnlicherweise fest im Code eingebaut.
Es gibt verschiedene Wege, den Vertrauensanker zu aktuallisieren ? nur für den automatischen Schlüsseltausch gemäß RFC 5011, dafür eignet sich PowerDNS-Recursor nicht. Die Vertrauensanker werden grundsätzlich manuell verwaltet. Die einfachste Methode, den neuen Root-Key in den PowerDNS-Recursor zu bekommen, besteht darin, ihn auf die aktuelle Version 4.0.5 zu aktuallisieren (Juni 2017). Ab der Version 4.0.5 enthält er den Schlüssel mit der Key-ID 20326.
Sollte ein Update nicht möglich sein, kann man den neuen Vertrauensanker über eine Lua-Konfigurationsdatei in den Code des DNS-Resolvers einbringen. Dazu muss PowerDNS-Recursor mit Lua-Support übersetzt worden sein. Ob das der Fall ist, kann man mit diesem Befehl auslesen:
pdns_recursor --version
Das Kommando liefert eine Ausgabe wie diese:
Jun 26 13:55:16 PowerDNS Recursor 4.0.5 (C) 2001-2016 PowerDNS.COM BV
Jun 26 13:55:16 Using 64-bits mode. Built using gcc 4.8.5 20150623 (Red Hat 4.8.5-11) on Jun 25 2017
21:46:02 by root@centos-512mb-fra1-01.
Jun 26 13:55:16 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it according to the terms of the GPL version 2.
Jun 26 13:55:16 Features: openssl lua
In der ersten Zeile ist die aktuelle Programm-Version aufgeführt. In der letzten steht, dass das Binary mit Lua-Support kompiliert worden ist.
Wie man dem Executable einen neuen DNSSEC-Vertrauensanker einimpft, beschreibt die PowerDNS-Dokumentation. Verkürzt kann man sagen: Man trägt den DS-Record-Hash des neuen Keys in einer Lua-Konfigurationsdatei ein; sie lässt sich wie ein übliches Lua-Skript ausführen. Der Inhalt der Datei sieht so aus:
-- ICANN root July 2017
addDS('.', "20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D")
Den Pfad zur Datei (hier pdns_recursor.lua
genannt) kann man in der PowerDNS-Konfiguration /etc/recursor.conf
eintragen oder ihn beim Start des Programms als Parameter auf der Kommandozeile angeben:
/sbin/pdns_recursor --dnssec=validate \
--lua-config-file=/etc/pdns_recursor/pdns_recursor.lua
Die Änderungen werden nach einem Neustart des Resolvers aktiv. Ein Neustart des Resolvers ist aber nicht immer wünschenswert, denn dabei würde der DNS-Cache gelöscht werden. Ist das bei Ihnen der Fall, können Sie den neuen Vertrauensanker mit diesem Befehl zur Laufzeit in den DNS-Resolver einimpfen:
rec_control add-ta . 20326 8 2 \
E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
Der Befehl liefert diese Antwort: Added Trust Anchor for . with data 20326 8 2
E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
Der neue Vertrauensanker befindet sich nun aber nur im laufenden PowerDNS-Prozess der betreffenden Maschine ? die Änderung wird nicht gespeichert und ist bei einem Neustart des Resolvers verloren. Tragen Sie daher den neuen Key zusätzlich wie oben beschrieben in die Konfigurationsdatei ein.
Mit dem Befehl rec_control get-tas
lässt sich abfragen, welche Vertrauensanker PowerDNS-Recursor gerade verwendet. Ab dem 11. Juli und spätestens zum 11. Oktober 2017 sollte der Befehl den Schlüssel mit der ID 20326 anzeigen:
rec_control get-tas
Die Ausgabe des Befehls lautet:Configured Trust Anchors:
.
19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
Der Schlüssel mit der ID 19036 ist der alte, also der allererste Key der DNS-Root-Zone. Der mit der ID 20326 ist der zweite und neue.