DNS Security: DNSSEC, DoT & DoH (Artikel 333)
Absicherung der Namensauflösung unter Linux. Erfahren Sie alles über DNS-over-TLS (DoT), DNS-over-HTTPS (DoH) und wie Sie lokale Resolver gegen Manipulation und Spionage schützen.
# DNS Security: Den Vertrauensanker im Web sichern
TL;DR / Management Summary DNS ist eines der ältesten und unsichersten Protokolle des Internets (Standard: Port 53 UDP, unverschlüsselt). Ein Senior Admin weiß, dass DNS-Antworten manipuliert (Spoofing) oder mitgelesen werden können. In diesem Modul implementieren wir moderne Schutzmaßnahmen: DNSSEC zur Verifizierung der Antwort-Integrität, sowie DNS-over-TLS (DoT) und DNS-over-HTTPS (DoH) zur Verschlüsselung der Anfragen. Wir machen den DNS-Resolver zum “Private Investigator”, dem niemand etwas vormachen kann.
# 1. Einführung & Architektur
Die Bedrohungen: Hijacking & Sniffing.
- DNSSEC: Signiert DNS-Zonen kryptografisch. Stellt sicher, dass die IP, die Sie erhalten, wirklich vom Inhaber der Domain stammt.
- DoT / DoH: Verschlüsselt den Weg vom Client zum Resolver. Verhindert, dass ISPs oder Angreifer im WLAN sehen, welche Webseiten Sie aufrufen.
# Die Architektur-Optionen (Mermaid)
graph TD
A[Linux Host] --> B{Resolver Strategy}
B -->|Classic| C[UDP 53: Unencrypted]
B -->|Privacy| D[DoT Port 853: TLS Tunnel]
B -->|Stealth| E[DoH Port 443: HTTPS]
D/E --> F[Privacy DNS: Quad9 / Cloudflare / AdGuard]
C --> G[Standard ISP DNS]
F -->|Verify| H[DNSSEC Validation]
# 2. DNS-over-TLS mit systemd-resolved
Verschlüsselung leicht gemacht.
In modernen Systemen (Arch, Ubuntu, SLES) kann der Standard-Resolver DoT nativ.
Datei: /etc/systemd/resolved.conf
[Resolve]
DNS=9.9.9.9#dns.quad9.net
DNSOverTLS=yes
DNSSEC=yes
FallbackDNS=1.1.1.1#cloudflare-dns.com
#dns.quad9.net: Der Hostname ist für das Zertifikats-Matching bei TLS zwingend nötig.
# 3. Der eigene Security-Resolver: Unbound
Maximale Kontrolle.
In Enterprise-Umgebungen setzen wir oft Unbound als lokalen, validierenden Resolver ein.
# Installation & Hardening
sudo apt install unbound # Debian
sudo dnf install unbound # RHEL
Datei: /etc/unbound/unbound.conf
server:
# Nur auf localhost lauschen
interface: 127.0.0.1
# DNSSEC Validierung aktivieren
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Schutz vor Cache Poisoning
harden-glue: yes
harden-dnssec-stripped: yes
# Privatsphäre
qname-minimisation: yes
# 4. Day-2 Operations: Validierung der Kette
Wissen, dass es funktioniert.
# DNSSEC Test
Nutzen Sie delv (Domain Entity Lookup & Validation):
delv @127.0.0.1 google.com
# Achten Sie auf den String: "; fully validated"
# TLS Check
Prüfen Sie mit tcpdump, ob noch Pakete auf Port 53 (unverschlüsselt) das System verlassen:
sudo tcpdump -i eth0 port 53
# Wenn DoT aktiv ist, sollte hier im Idealfall Stille herrschen.
# 5. Troubleshooting & “War Stories”
Wenn die Sicherheit den Zugriff blockiert.
# Story 1: “Der Time-Drift Blackout”
Symptom: Plötzlich lassen sich keine Webseiten mehr aufrufen. dig liefert SERVFAIL.
Ursache: Die Systemzeit des Servers ist falsch. Da DNSSEC-Signaturen einen Zeitstempel haben, werden sie als ungültig verworfen, wenn die lokale Uhr zu weit abweicht.
Lösung: NTP fixen (Artikel 334). Ohne korrekte Zeit bricht DNSSEC das gesamte Internet des Servers.
# Story 2: “Das Captive Portal Dilemma”
Symptom: Ein Admin-Laptop mit erzwungenem DoH/DoT verbindet sich im Hotel-WLAN, aber kein Internet geht.
Ursache: Das Hotel-WLAN muss den User erst auf eine Login-Seite leiten. Da der Browser nur verschlüsseltes DNS zu einem globalen Server versucht, der lokale Hotel-DNS-Server (der den Redirect macht) aber ignoriert wird, schlägt die Umleitung fehl.
Lösung: Nutzen Sie DNSOverTLS=opportunistic für mobile Geräte, um in unverschlüsselte Netze zurückzufallen, bis der Login erfolgt ist.
# 6. Fazit & Empfehlung
- Zentralisierung: Nutzen Sie in großen Netzen einen zentralen, gehärteten Unbound-Cluster.
- Privacy: Aktivieren Sie DoT auf jedem Server. Es verhindert, dass Metadaten über Ihre Infrastruktur im Netz “lecken”.
- Wahl: Quad9 (9.9.9.9) ist oft die beste Wahl für Admins, da es bösartige Domains bereits auf DNS-Ebene filtert.
# Anhang: Cheatsheet
| Aufgabe | Befehl / Tool |
|---|---|
| DNSSEC Prüfung | delv <domain> |
| resolved Status | resolvectl status |
| DNSSEC Status | resolvectl statistics |
| Unbound Config Test | unbound-checkconf |
| DoH Test | curl -H "accept: application/dns-json" "https://dns.google/resolve?name=..." |
| DNS Root-Anker update | unbound-anchor |
| Cache flushen | resolvectl flush-caches |