DNSSEC Workshop @ DE-CIX MeetingCenter (eco)
1 Agenda und Folien
1.1 PDF Versionen der Folien und Anleitungen
1.2 DNS & DNSSEC 14.09.2023
- 10:30 Begrüssung
- 10:45 DNSSEC Anwendungen "Securing-Security"
- 11:30 Pause
- 11:45 Das kleine DNS 1x1
- 12:15 Praxis: DNS Resolver einrichten
- 12:30 Mittagspause
- 13:30 Einführung in DNSSEC
- 14:30 Praxis: DNS Server und DNS Zone einrichten
- 15:00 Pause
- 15:15 DNSSEC mit BIND 9
- 16:15 DNSSEC Key-and-Signing Policy
- 17:00 Ende Workshop Tag 1
1.3 DNS & DNSSEC 15.09.2023
- 09:00 DNSSEC Schlüsselparameter
- 10:00 NSEC oder NSEC3?
- 10:30 Pause
- 10:45 DNSSEC Betrieb
- 12:30 Mittagspause
- 13:15 DNSSEC Key-Rollover
- 14:30 Erweiterte DNS/DNSSEC Fehler-Informationen
- 15:00 Ende Workshop Tag 2
2 Allgemeine Informationen
- Diese Anleitung und die Folien finden Sie online im Internet unter https://dnssec.dane.onl
- Diese Webseite wird im Kurs regelmässig aktualisiert. Wenn Informationen hier fehlen, dann bitte die Webseite im Browser neu laden (reload) um die neuen Informationen abzurufen.
- In den Anleitungen müssen Sie die Zeichenfolge XX durch die zweistellige Teilnehmer-Nummer ersetzen. Die Teilnehmer-Nummer finden Sie in der Tabelle der Teilnehmer in diesem Dokument.
- Jeder Teilnehmer bekommt zwei Linux-Maschinen im Internet (ein primärer DNS-Server und ein DNS Resolver). Es ist je ein aktuelles Debian 12 installiert. Diese Linux-Maschinen ist per SSH (Secure-Shell) und per Web-Browser (Cockpit-Terminal) erreichbar.
3 DNS-Server VMs
- Ihr DNS-Server (autoritativ):
dns.zXX.dane.onl - Ihr DNS-Resolver:
dnsr.zXX.dane.onl - Text-Editoren auf den Servern:
emacs,vim,nano,mg(MicroEmacs) - Hilfsprogramme:
tmux,dvtm - Bash-Shell muss manuell per
bashgestartet werden
4 Hostnamen, Benutzer und Passwörter
Login via SSH (OpenSSH, Putty, Google Chrome mit SSH app) oder per Browser auf Port 443 (HTTPS) des jeweiligen Servers (z.B. https://dnsr.z01.dane.onl). Die Cockpit-Oberfläche ist mit einem selbst-signierten TLS Zertifikat abgesichert, es gibt daher die Warnung das diese Verbindung nicht "sicher" ist (der Server nicht authentisiert werden kann). In der Cockpit Web-Oberfläche auf der linken Seite das Terminal auswählen (die anderen Funktionen des Programms "Cockpit" werden wir nicht nutzen).
- Benutzername für die VMs:
user - Password:
dnssec-2023 - Root-Shell mit
sudo -sund dem Benutzer-Passwort
5 DNSSEC
5.1 Praxis: DNSSEC Signaturen
- Arbeit auf dem DNS-Resolver-Rechner
- Frage nach der DNSSEC-Signatur von
dnssec.works NS:$ dig @9.9.9.9 dnssec.works NS +dnssec +multi - Beantworten Sie diese Fragen
- Welchen Algorithmus benutzt diese Zone? Finde die Algorithmus Nummer in IANA Domain Name System Security (DNSSEC) Algorithm Numbers
- Wann läuft die Signatur ab?
- Wann ist die Signatur gültig geworden?
5.2 Praxis: DNSSEC Resolver installieren
- Installiere die DNS-Abfrage-Tools (
nslookup,dig)% apt install dnsutils - Installiere den BIND 9 DNS Server (DNSSEC Validierung ist
standardmässig angeschaltet, keine Konfiguration notwendig)
% apt install bind9 - Teste DNSSEC Validierung (AD-Flag muss angezeigt werden)
# dig @localhost eco.de +multi ; <<>> DiG 9.18.18 <<>> eco.de ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61985 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 2bd0f7a41860386e010000006502a25e783292436f13a567 (good) ;; QUESTION SECTION: ;eco.de. IN A ;; ANSWER SECTION: eco.de. 86400 IN A 46.31.121.137 ;; Query time: 3799 msec ;; SERVER: 100.64.1.254#53(100.64.1.254) (UDP) ;; WHEN: Thu Sep 14 08:04:14 CEST 2023 ;; MSG SIZE rcvd: 79
5.2.1 DNS/DNSSEC Flags in DNS-Paketen
| Flag | Beschreibung |
|---|---|
AA |
Authoritative Answer - Antwort kommt von einem DNS Server, welcher der Besitzer der Daten ist |
TC |
Truncated - DNS Antwort passt nicht in die per EDNS ausgehandelte maximale UDP Paketgrösse |
RD |
Recursion Desired - DNS Client braucht eine finale Antwort - Zwischenantworten sind nicht erwünscht |
RA |
Recursion Available - DNS Resolver bietet finale Antworten (= dies ist ein Resolver, kein authoritativer Server) |
Z |
Zero - kann nicht benutzt werden |
AD |
Authentic Data - DNSSEC Daten wurden vom DNS Resolver erfolgreich geprüft |
CD |
Checking Disabled - Für diese Anfrage die DNSSEC Prüfung ausschalten |
5.3 Praxis: DNS Server und DNS Zone einrichten
- Diese Anleitung befinden sich unter https://dnssec.dane.onl
- Die virtuelle Labormaschine verwenden (Autoritativer DNS Server):
dns.zXX.dane.onl - Als root-Benutzer arbeiten
$ sudo -s - BIND 9 auf dem authoritativen DNS Server installieren
% apt install bind9 - Prüfe das der BIND 9 Prozess gestartet ist
% systemctl status bind9 - Öffne die BIND 9 Konfigurationsdatei
/etc/named.confmit einem Text Editor. Eine primäre autoritative DNS-Zone für die DomainzXX.dane.onlist schon konfiguriert% chmod +w /etc/bind/named.conf % nano /etc/bind/named.conf - Die Zonendatei
/etc/bind/zonefile.dbschreibbar markieren (chmod +w /etc/bind/zonefile.db) und diese Datei in einem Editor öffnen. Füge im Apex der Zone (für den Basis-Domain-Namen der Zone) einen IPv6 AAAA-Record für die IPv6-Adresse des Servers hinzu. Die IPv6-Adresse lässt sich unter anderem mit dem Befehlhostname -Ianzeigen. Erhöhe die SOA-Seriennummer und speichere die Änderungen.- Beispiel AAAA-Record:
zXX.dane.onl. IN AAAA 2001:db8::1
- Beispiel AAAA-Record:
- Prüfen Sie die BIND 9-Konfigurationsdatei und die Zonen-Datei auf
Fehler
% named-checkconf -z - Wenn keine Fehler gemeldet werden, lade die neue Zone erneut in
den BIND 9 Server (über
rndc)% rndc reload zXX.dane.onl - Test, ob Ihr DNS-Server auf Anfragen für diese Zone antwortet und
die neue SOA-Seriennnummer zeigt
$ dig @::1 zXX.dane.onl SOA - Verwende einen externen DNS-Resolver (in diesem Beispiel
Quad9) oder den eigenen DNS-Resolver auf
dnsr.zXX.dane.onl, um die IPv6 Adresse aus der DNS-Zone aufzulösen$ dig @9.9.9.9 zXX.dane.onl AAAA
5.4 Praxis: Einfaches DNSSEC mit BIND 9.16 "default-policy"
- Die Verwendung der DNSSEC Policy-Konfiguration (verfügbar seit BIND 9.16) ermöglicht die einfache Implementierung von DNSSEC
- BIND erzeugt automatisch die DNSSEC-Schlüssel, signiert die Zone und hält die Signaturen aktuell
- Die Direktive
defaultbewirkt, dass die Zone mit einem einzigen kombinierten Signierschlüssel (CSK) mit dem Algorithmus ECDSAP256SHA256 signiert wird. Dieser Schlüssel hat eine unbegrenzte Lebensdauer (kein Schlüssel-Rollover).
- Wir arbeiten auf dem primären autoritativen Server
- Bearbeite die Datei
/etc/bind/named.confin einem Editor. Füge in der Zonen-Definition die Zeilednssec-policy default;undinline-signing yes;der Zonen-Definition hinzu:zone "zXX.dane.onl" { type primary; file "zonefile.db"; dnssec-policy default; inline-signing yes; }; - Prüfe die Konfiguration und starte den BIND 9 Server neu
% named-checkconf -z % systemctl start bind9
- Die Schlüssel-Dateien und weitere Zonen-Dateien sollen nun im BIND
9 Heimverzeichnis sichtbar werden
% ls -l /etc/bind % ls -l /etc/bind/keys
- Erstelle einen neuen DS Record mit
dnssec-dsfromkeyund speicher den DS-Record als Text-Datei unter/etc/bind/ds-record.txt. Der Trainer wird den DS-Record dort finden und in der Eltern-Zone veröffentlichen.dnssec-dsfromkey /etc/bind/keys/Kz08.dane.onl.+013+YYYYY.key # YYYYY gegen die ID des eigenen # Schlüssels austauschen - Teste das der DNS-Server die DNSSEC Resource Records zurückliefert
$ dig @localhost zXX.dane.onl +dnssec +multi $ dig @localhost zXX.dane.onl DNSKEY +dnssec +multi
- Frage mit
digden A-Record vonzXX.dane.onlüber einen externen DNS-Resolver an. Wird das AD-Flag angezeigt?
5.5 DNSSEC KASP
- BIND 9.16 führt eine neue Funktion mit dem Namen
dnssec-policyein, die einen weiteren Schritt in der Automatisierung überauto-dnssec maintainhinaus anbietet- Es ist wahrscheinlich, dass
dnssec-policyinline signing ersetzen wird (daher die Warnungen in neuen BIND 9 Versionen dasauto-dnssec maintainabgekündigt (deprectated) ist)
- Es ist wahrscheinlich, dass
- Wo inline oder dynamic erwarten, dass die Schlüssel mit
dnssec-keygenerstellt wurden, automatisiert diese Signiermethode die Aufgabe - Die Konfiguration einer Zone für die Verwendung von KASP (Key And
Signing Policy) kann so einfach sein wie
zone "example.net" { type primary; dnssec-policy default; ... }; - Vorteile
- Intuitiv und ein höheres Maß an Automatisierung
- Mehrere Anbieter verwenden KASP Systeme (Knot, OpenDNSSEC)
- Robust
- Keine Notwendigkeit, sich auf von Menschen hinzugefügte Metadaten zu verlassen
- Verwendung einer Key-Timing State-Machine
5.5.1 Standard BIND 9 DNSSEC Richtlinie (KASP)
- Einzelner CSK
- ECDSAP256SHA256 (Algo 13) mit unbegrenzter Lebensdauer
- RRSIG Gültigkeit 14 Tage, aufgefrischt 5 Tage vor Ablauf
- NSEC
- Schlüssel-Timings:
- DNSKEY TTL: 3600, maximale Zonen-TTL: 86400 (1 Tag)
- Sicherheitszeiten für die Veröffentlichung und das Zurückziehen von Schlüsseln: 3600 (1 Stunde)
- Ausbreitungsverzögerung: 300 (5 Minuten)
- Zeitvorgaben für die Eltern-Zone
- DS TTL: 86400 (1 Tag)
- Ausbreitungsverzögerung: 3600 (1 Stunde)
- Durch die Verwendung einer explizit definierten DNSSEC-Richtlinie
anstelle der
defaultRichtlinie verhindert die ungewollte Änderung nach Updates der BIND 9 Software
5.5.2 Eigene KASP Policy
dnssec-policy "mypolicy" {
keys {
ksk lifetime 365d algorithm rsasha256 2560; // nur Beispiele der Syntax
zsk lifetime 60d algorithm rsasha256 1536; // nicht in Produktion
csk lifetime P6MT12H3M15S algorithm 13; // verwenden!
};
};
zone "example.net" {
dnssec-policy "mypolicy";
[...]
};
keysgibt Rollen anstelle von bestimmten Schlüsseln anlifetimegibt die Dauer oderunbegrenztanalgorithmverwendet Mnemonik oder Zahl
5.5.3 Zusätzliche Konfiguration der benutzerdefinierten Richtlinie
dnssec-policy "one" {
keys {
ksk lifetime 365d algorithm rsasha256 4096;
zsk lifetime 60d algorithm rsasha256 1024;
};
dnskey-ttl 600;
publish-safety PT2H;
signatures-refresh 7d;
nsec3param iterations 0 optout no salt-length 0;
};
5.5.4 Key-and-Signing-Policy (KASP) Syntax
dnssec-policy <string> {
dnskey-ttl <duration>;
keys { ( csk | ksk | zsk ) [ ( key-directory ) ]
lifetime <duration_or_unlimited> algorithm <string> [ <integer> ]; ...
};
max-zone-ttl <duration>;
nsec3param [ iterations <integer> ] [ optout <boolean> ] [ salt-length <integer> ];
parent-ds-ttl <duration>;
parent-propagation-delay <duration>;
publish-safety <duration>;
purge-keys <duration>;
retire-safety <duration>;
signatures-refresh <duration>;
signatures-validity <duration>;
signatures-validity-dnskey <duration>;
zone-propagation-delay <duration>;
};
5.6 DNSSEC Fehlersuche
5.6.1 Überprüfung von DNS-Auflösungsproblemen
- dig
Das DNS-Namensauflösungstool
digkann verwendet werden, um die allgemeine Funktion eines DNS-Auflösers zu testen, oder um zu prüfen, ob ein Fehlerzustand bei den entfernten autoritativen DNS-Servern einer Domäne.- Test eines DNS-Resolvers über UDP
Um die allgemeine Konnektivität und Funktion eines DNS-Resolvers zu testen, kann eine Abfrage nach bekannten DNS-Daten gesendet werden, z. B. nach der Liste der Nameserver (NS-Records) der Root-Zone
".".Die Antwort sollte die Liste aller 13 Root-Nameserver im Internet (mit den Namen
a-m.root-servers.net) enthalten$ dig @IP-of-DNS-resolver NS .
- Was sind die Gründe, warum wir empfehlen, die IP-Adresse eines Resolvers anstelle seines Namen zu verwenden? Schreibe die Antwort in den Chat.
- Testen eines DNS-Resolvers über TCP
Die DNS-Resolver müssen auch über TCP erreichbar sein. Um eine Anfrage über TCP zu senden, füge das
+tcpFlag den Abfragen hinzu.$ dig @IP-of-DNS-resolver NS . +tcp
- Sie können 33% Tipparbeit sparen, indem Sie
+vcstatt+tcpverwenden. Was bewirktvc? Schauen Sie sich die Handbuchseite (man-page) fürdig(1)an. Schreiben Sie die Antworten in den Chat.
- Sie können 33% Tipparbeit sparen, indem Sie
- Testen der Erreichbarkeit aller autoritativen DNS-Server
Die Funktion
dig+nssearchfragt zuerst alle NS-Einträge für eine gegebene Domain ab und versucht dann, direkt (ohne Umweg über einen DNS-Resolver) die autoritativen DNS-Server dieser Domäne abzufragen:$ dig @IP-of-DNS-resolver example.com +nssearch
Die Funktion gibt den SOA-Eintrag der Zone aus (hier
example.com) für jeden DNS-Server aus, der eine Antwort auf die Anfrage gesendet hat, einschließlich der SOA-Seriennummer, der IPv4- und/oder IPv6-Adresse und der Round-Trip-Time (RTT) der Abfrage.Alle SOA-Seriennummern sollten dieselbe Nummer aufweisen, sonst könnte es ein Problem mit der Zonensynchronisierung über den Zonentransfer geben, was eine eine mögliche Ursache für DNS-Lookup-Probleme sein könnte.
- welche Art von DNS-Servern (autoritativ, rekursiv, primär, sekundär) sind schuld, wenn die SOA-Seriennummern einer Zone nicht synchron sind? Wer kann den Fehler beheben? Schreiben Sie die Antworten in den Chat.
- Testen der Auflösungskette
Die Funktion
+traceindigverfolgt die DNS-Namensauflösung vom Root-DNS-Server-System bis zum angeforderten Namen.$ dig @IP-of-DNS-resolver example.com +trace
Nur die allererste Abfrage zur Ermittlung der Root-Server-Adressen wird an den im Befehl angegebenen DNS-Resolver gestellt, alle anderen Abfragen werden direkt an die autoritativen DNS-Server gesendet. Diese Funktion testet und gibt einen von normalerweise vielen möglichen DNS-Auflösungspfaden aus. Ein erfolgreiche Return-Code des Befehls bedeutet nicht, dass der Auflösungspfad fehlerfrei ist, sondern nur, dass mindestens ein erfolgreicher Pfad existiert.
- Prüfung auf DNSSEC-Validierungsprobleme
Wenn eine DNS-Abfrage eine
SERVFAIL-Antwort zurückgibt, kann es sich um ein DNSSEC Validierungsproblem beim DNS-Resolver handeln, oder es kann sich um eine Art Server-Fehlfunktion auf dem DNS-Resolver oder dem entfernten autoritativen Server sein.Um nach DNSSEC-Validierungsproblemen zu suchen, kann der Administrator eine DNS-Abfrage mit dem Flag
+cd(Checking Disabled) senden. Mit diesem Flag überspringt der DNS-Auflöser die DNSSEC-Validierung und gibt die die DNS-Daten andigzurück, selbst wenn die DNSSEC-Validierung fehlschlägt.Wenn also eine DNS-Abfrage Daten zurückgibt, wenn
+cdgesetzt ist, aberSERVFAILmeldet, wenn+cdnicht gesetzt ist, deutet dies auf ein DNSSEC-Validierungs Problem. Wenn die Antwort immerSERVFAILlautet, handelt es sich um ein anderes ein anderes Problem (normalerweise nicht DNSSEC).dig @localhost fail03.dnssec.works # SERVFAIL dig @localhost fail03.dnssec.works +cd # Antwort ohne DNSSEC Validierung
- Test eines DNS-Resolvers über UDP
5.6.2 Externe Webdienste zur Überprüfung von DNS
Es gibt mehrere Webseitendienste, die DNS-Administratoren bei der Überprüfung den Zustand eines DNS-Systems helfen
- Zonemaster
Die Website Zonemaster https://zonemaster.net ist eine Zusammenarbeit zwischen der französischen TLD-Registrierungsstelle AFNIC und der schwedischen Registrierungsstelle IIS. Die Website nimmt einen Domänennamen und erstellt einen Bericht über Fehler und Best-Practice-Empfehlungen für die Einrichtung dieses Domänennamens.
- DNSViz
DNSViz https://dnsviz.net ist ein Tool zur Visualisierung des Status einer DNS-Zone. Es bietet eine visuelle Analyse der DNSSEC Authentifizierungskette für einen Domänennamen und seinen Auflösungspfad im DNS Namespace, und es listet Konfigurationsfehler auf, die das Tool entdeckt hat.
5.7 DNSSEC Probleme bei DNS Resolver Betreibern
5.7.1 Negative Trust Anchor
- DNSSEC-Validierungsprobleme werden häufig durch operative Probleme
verursacht. (abgelaufene DNSSEC-Signaturen, Inkonsistenzen
zwischen DS-Eintrag und DNSKEY KSK etc.)
- Negative Trust Anchors können verwendet werden, um die DNSSEC-Validierung für fehlerhaft konfigurierte Domains zu deaktivieren
- Negative Trust Anchors sind in RFC 7646 ("Definition and Use von DNSSEC Negative Trust Anchors") definiert.
- Negative Trust Anchors (nta) deaktivieren die DNSSEC-Validierung
für eine Domain für einen bestimmten Zeitraum
- NTAs können von Betreibern verwendet werden, wenn eine fehlerhafte Konfiguration für eine DNSSEC-signierten Zone entdeckt wird. Es sollte darauf geachtet werden dass die fehlgeschlagene DNSSEC-Validierung tatsächlich von einer Fehlkonfiguration ausgelöst wird und nicht durch einen Angriff
- Domänen mit einem NTA werden so behandelt, als gäbe es keinen Vertrauensanker für diese Domain
- NTAs werden gespeichert und bleiben auch nach einem Neustart von BIND 9 erhalten.
- BIND 9 überprüft die Domäne in regelmäßigen Abständen. Sobald die Domäne wieder erfolgreich DNSSEC validiert wurde, wird die NTA für die Domain entfernt.
- NTAs haben eine begrenzte Lebensdauer (maximal eine Woche) und verfallen automatisch.
- Beispiel: Hinzufügen eines NTA (für 60 Sekunden):
% rndc nta -l 60 fail01.dnssec.works Negative trust anchor added: fail01.dnssec.works/_default, expires 18-Aug-2016 13:52:19.000 % rndc nta -dump fail01.dnssec.works: expired 18-Aug-2016 13:52:19.000 % ls -l /var/named/_default.nta -rw-r--r--. 1 root root 44 Aug 18 13:51 /var/named/_default.nta % cat /var/named/_default.nta fail01.dnssec.works. regular 20160818115219
- Beispiel: einen NTA entfernen
% rndc nta -l 86400 fail02.dnssec.works # add a NTA for 1 day Negative trust anchor added: fail02.dnssec.works/_default, expires 19-Aug-2016 13:56:22.000 % rndc nta -dump fail02.dnssec.works: expiry 19-Aug-2016 13:56:22.000 % rndc nta -r fail02.dnssec.works # remove the NTA Negative trust anchor removed: fail02.dnssec.works/_default % rndc nta -dump # NTA is now gone
5.7.2 Praxis: einen NTA für die Domain failNN.dnssec.works einrichten
- Im Kapitel zur DNSSEC-Fehlerbehebung haben wir über die defekten
DNS-Zonen
fail01.dnssec.worksbisfail05.dnssec.worksgesprochen. - Erstellen Sie negative Trust Anchors (NTA) für
fail01bisfail03im DNSSEC-validierenden ResolverdnsrNN - Überprüfe, ob ein Client nun DNS-Daten aus diesen Zonen abrufen
kann.
$ dig @127.0.0.1 fail01.dnssec.works A - Entferne den NTA für
fail01.dnssec.works. Prüfe das die Zonen nun nicht mehr validiert undSERVFAILzurückliefert
5.7.3 Empfehlungen für Betreib von DNS Resolvern
- Stelle sicher, dass der DNSSEC-validierender Resolver DNSSEC NTA (negative trust anchor) unterstützt.
- Testen Sie die Funktion des negativen Vertrauensankers.
- Dokumentieren Sie, wie ein negativer Vertrauensanker hinzugefügt wird.
- Wenn Ihre Software das automatische Entfernen von NTAs nicht unterstützt, implementieren Sie eine Automatisierung (in Verbindung mit der Überwachung Ihres DNS-Resolvers).
- Implementieren Sie keine automatische Hinzufügung von NTAs, die Aktivierung eines NTAs sollte erst nach menschlicher Überprüfung des DNSSEC-Validierungsproblems erfolgen.
- Lesen Sie den Internet-Entwurf Recommendations for DNSSEC Resolvers Operators
5.7.4 DNSSEC Resolver und die Systemzeit
- Die DNSSEC-Validierung benötigt eine korrekt Systemzeit.
- Die DNSSEC-Signaturen haben Ablauf- und Inception-Zeiten (Beginn der Gültigkeit), welche der DNS-Resolver überprüfen muss.
- Ohne eine korrekte Zeitangabe auf dem DNSSEC-Resolver-Rechner kann die DNSSEC Validierung fehlschlagen.
- Empfehlung: Implementieren Sie eine automatische Zeitsynchronisation für den DNSSEC-Resolver (NTP, PTP)
- Stellen Sie sicher, dass die Zeitsynchronisation nicht von (DNSSEC) abhängig ist (keine zirkulären Abhängigkeiten oder Henne-Ei-Problem).
5.8 DNSSEC Neuigkeiten
5.8.1 DNS/DNSSEC error reporting
- Der IETF-Entwurf "DNS error reporting" beschreibt eine Möglichkeit für DNS Resolver-Software, um Fehlerzustände bei der DNS-Namensauflösung an den Betreiber der autoritativen DNS-Zone zu melden.
- Diese Funktion ist vergleichbar mit dem DMARC-Reporting bei E-Mails.
- Die gemeldeten Fehler basieren auf "Extended DNS Errors (EDE, RFC 8914)".
- Die Meldung erfolgt innerhalb des DNS-Protokolls.
- Der autoritative DNS-Server kann mit einer EDNS-Option die erweiterten Fehlercodes anfordern
- Der autoritative DNS-Server kann wählen, ob er nur Fehlerzustände oder auch positive Rückmeldungen (bei erfolgreicher Namensauflösung) erhalten möchte.
- Um einen Fehler zu melden, kodiert der meldende Resolver den
Fehlerbericht in den QNAME der Anfrage. Der meldende
Resolver bildet diesen QNAME durch Verkettung des
_erLabels, den erweiterten Fehlercode, den QTYPE und den QNAME, der zu dem Fehler zum Fehler führte, nochmals das_erLabel und die Domain des sendenen DNS-Resolvers - Der resultierende Domainname (QNAME) wird für die DNS-Anfrage nach einem NULL-Resource-Record verwendet, welcher den Fehler meldet.
- Die reporting agent domain unterscheidet sich normalerweise von einer Produktionsdomäne. Die reporting agent domain sollte nicht DNSSEC signiert sein, da nur die Anfragen von Nutzen sind und die Antworten nicht gesichert werden müssen.
- Der autoritative DNS-Server antwortet mit einer NODATA/NXRRSET Antwort, welche vom Resolver zwischengespeichert wird (die negative TTL dieser Antwort bestimmt das Intervall für Fehlerberichte, da neue Fehlerberichte für den gleichen Fehler werden erst nach Ablauf der TTL gesendet werden können).
- Beispiel (aus dem Entwurf des RFC-Draft-Dokuments):
- Die Domäne
broken.testwird auf einer Reihe von vertrauenswürdigen Servern gehostet. Einer dieser Server bietet eine veraltete Version an. Dieser autoritative Server hat den Schweregrad 1 und einen Reporting Agent konfiguriert:a01.reporting-agent.example. - Der Reporting Resolver ist nicht in der Lage, die den
Resource-Record für
broken.testzu validieren, da der RRSIG-Record eine abgelaufene Signatur enthält. - Der meldende Resolver konstruiert den QNAME.
_er.7.1.broken.test._er.a01.reporting-agent.exampleund löst ihn auf. Dieser QNAME zeigt an, dass der erweiterte DNS-Fehler 7 aufgetreten ist aufgetreten ist, als versucht wurde, den Typ 1 (A)-Recordbroken.testzu validieren. - Nachdem diese Anfrage bei einem der autoritativen Server
für die Domain (
a01.reporting-agent.example), stellt der Empfänger des Berichts (der Betreiber des autoritativen Servers füra01.reporting-agent.example), dass der autoritative Server für die Zonebroken.testunter einem abgelaufenen abgelaufenen Signatursatz (Extended Error 7) vom Typ A für den Domänennamenbroken.testleidet. Der Melder kann den Betreiber vonbroken.testkontaktieren, um das Problem zu beheben.
- Die Domäne
- Draft "DNS error reporting" (Ein Draft ist noch kein Standard und wird es vielleicht nie werden): https://datatracker.ietf.org/doc/draft-ietf-dnsop-dns-error-reporting/
- Dieser Entwurf wurde noch nicht in produktive DNS-Server-Software implementiert.
5.9 Migration BIND 9 DNSSEC zu einer KASP Policy
- BIND 9.16/9.18 führt eine neue (bessere) Automatisierung der DNSSEC-Signierung von DNS-Zonen ein: während in den älteren BIND 9 Versionen die Key-Rollover mittels der Meta-Daten auf den Schlüssel-Dateien automatisiert werden konnten, können die Key-Rollover nun innerhalb der BIND 9 Konfiguration in einer KASP (Key-and-Signing-Policy) definiert werden. Der BIND 9.18 führt ggf. Key-Rollover automatisiert durch.
- Zonen, welche schon vor BIND 9.16 oder BIND 9.18 mit DNSSEC abgesichert waren sollen auf das neue KASP System migriert werden, da die alte DNSSEC-Automatisierung in BIND 9 abgekündigt ist und in einer zukünftigen Version von BIND 9 (9.19-dev, 9.20-release) nicht mehr verfügbar sein wird.
- Für eine erfolgreiche Migration ist es erforderlich, eine
DNSSEC-KASP zu definieren, welche zu den bestehenden
DNSSEC-Schlüsseln in der Zone passt (Algorithmus, Anzahl Schlüssel
= CSK oder KSK/ZSK).
- Erkennt der BIND 9 beim Laden der Zone ein Differenz zwischen den existierenden Schlüsseln und der neuen Policy, so wird BIND 9 die bestehenden Schlüssel nicht mehr benutzen und stattdessen neue Schlüssel erstellen und sofort die Zone mit den neuen Schlüsseln signieren. Dies kann zu einem Total-Ausfall der Zone führen, da der DS-Record in der Eltern-Zone nicht zu KSK/CSK der Zone passt.
- Bei der Migration auf eine KASP-Konfiguration sollte die Lebensdauer der Schlüssel mit "unlimited" angegeben werden. Nach der erfolgreichen Migration kann die KASP-Konfiguration angepasst und die Lebensdauer der Schlüssel begrenzt werden.
- Es ist sinnvoll, eine Migration von einer pre-KASP Konfiguration einer Zone auf eine Zone mit DNSSEC-KASP and einer Test-Zone zu üben.
- Bei einer erfolgreichen Migration auf eine KASP-Konfiguration übernimmt der BIND 9 die bestehenden DNSSEC-Schlüssel und signiert die Zone weiterhin mit diesen Schlüsseln.
- Werden neuen Schlüssel erzeugt und für die Signierung verwendet, so war die Migration nicht erfolgreich.
- Bei der Benutzung eines hidden-primary DNS-Servers, sollte für die Aktivierung der KASP-Konfiguration die Kommunikation zwischen den aktiven Auth-Servern und dem hidden-primary unterbrochen werden, bis die erfolgreiche Migration bestätigt ist (in der Regel direkt nach dem Laden der neuen Konfiguration sichtbar).
- Bei der Benutzung einer Infrastruktur ohne hidden-primary (der Primary ist aktiver DNS-Server in der Delegation) kann der Primary-Server temporär in einen "hidden-primary" umgewandelt werden (z.B. durch ein Block von UDP/TCP Port 53 in der Firewall). Der oder die restlichen DNS-Server werden die bestehende DNSSEC-Zone ohne Unterbrechung weiter ausliefern, bis die erfolgreiche Migration bestätigt ist und die Blockade in der Firewall aufgehoben wurde.
- Beispiel einer Pre-KASP-BIND 9 DNSSEC-Konfiguration. Die Schlüssel
(ZSK/KSK) wurden manuell mit
dnssec-keygenmit dem Algorithmus RSASHA256 erstellt:options { directory "/var/named"; key-directory "keys"; }; zone "example.com" IN { type primary; file "example.com"; auto-dnssec maintain; inline-signing yes; }; - Beispiel einer KASP BIND 9 DNSSEC-Konfiguration für diese Zone:
dnssec-policy "base-dnssec" { keys { ksk lifetime unlimited algorithm RSASHA256; zsk lifetime unlimited algorithm RSASHA256; }; }; options { directory "/var/named"; key-directory "keys"; }; zone "example.com" IN { type primary; file "example.com"; dnssec-policy "base-dnssec"; inline-signing yes; }; - Eine produktive KASP-Konfiguration mit ZSK-Rollover (aber keinem automatischem KSK-Rollover):
dnssec-policy "DNSSEC-ZSK-ROLL" {
dnskey-ttl 60;
keys { ksk lifetime unlimited algorithm ECDSAP256SHA256;
zsk lifetime P30D algorithm ECDSAP256SHA256;
};
max-zone-ttl 3600;
publish-safety 1h;
purge-keys P90D;
retire-safety 1h;
signatures-refresh 5d;
signatures-validity 14d;
signatures-validity-dnskey 14d;
zone-propagation-delay 300;
};
zone "example.de" {
type primary;
inline-signing yes;
dnssec-policy "DNSSEC-ZSK-ROLL";
file "primary/example.de";
};
- Beispiel einer KASP BIND 9 DNSSEC-Konfiguration mit automatischem ZSK/KSK Rollover mittels CDS/CDNSKEY (Schweiz):
parental-agents "switch" {
130.59.31.41;
130.59.31.43;
194.0.25.39;
194.0.17.1;
194.146.106.10;
2001:620:0:ff::56;
2001:620:0:ff::58;
2001:678:20::39;
2001:678:3::1;
2001:67c:1010:2::53;
};
dnssec-policy "DNSSEC-AUTO" {
keys {
ksk lifetime P90D algorithm ecdsap256sha256;
zsk lifetime P45D algorithm ecdsap256sha256;
};
max-zone-ttl 3600;
parent-ds-ttl 600;
parent-propagation-delay 2h;
publish-safety 7d;
retire-safety 7d;
signatures-refresh 5d;
signatures-validity 15d;
signatures-validity-dnskey 15d;
zone-propagation-delay 2h;
};
zone "example.ch" {
type primary;
allow-update { key dns-update; };
allow-transfer { secondaries; };
dnssec-policy "DNSSEC-AUTO";
parental-agents {
"switch";
};
file "primary/example.ch";
};
6 DNSSEC Monitoring
- Men & Mice DNS/DNSSEC Monitoring Scripte https://github.com/menandmice-services/dns-monitoring-scripts