DNSsec mit Bind9
Standards für die „Domain Name System Security Extensions (DNSSEC)“: RFC 4033, RFC 4034, RFC 4035, RFC 5011 und RFC 5155.
Entropie zur Schlüsselgenerierung
Um genügend Entropie für die Erzeugung der Schlüssel zur Verfügung zu haben, sollte z.B. „haveged“ installiert werden. Bei aktuellen Distributionen sollte dies allerdings nicht mehr unbedingt notwendig sein:
root@noc:~# apt install haveged root@noc:~# haveged
Einstellungen für Bind
dnssec-validation ist seit BIND Version 9.8 default auf yes, sollte aber für das Management des root-key (/var/cache/bind/managed-keys.bind) in /etc/bind/named.conf auf dnssec-validation auto gestellt werden.
Ferner sollte mit der Option key-directory für die Schlüssel ein eigenes Verzeichnis angegeben werden, in denen BIND beim Signierten nach gültigen DNSKEYs sucht.
root@noc:~# less /etc/bind/named.conf options { .... key-directory "/var/chache/bind/keys"; dnssec-validation auto; dnssec-lookaside auto; ... }; root@noc:~# mkdir -p /var/cache/bind/keys/ root@noc:~# chown -R bind:bind /var/chache/bind/keys/
Danach BIND mit
root@noc:~# systemctl restart bind9
neu starten.
Zone-signing Keys erstellen
Mit dnssec-keygen wird ein Zone-signing-key-Paar aus öffentlichem (.key) und privatem (.private) Schlüssel erzeugt
Der „haveged“-Daemon erzeugt eine große Entropy in /dev/random.
Alternativ kann auch das „non-blocking“ pseudo-random device /dev/urandom verwendet werden. Hierbei sinkt jedoch die Sicherheit etwas.
Zone Signing Key (ZSK) generieren
root@noc:/var/cache/bind/keys# dnssec-keygen -3 -a RSASHA512 -b 2048 -n ZONE -r /dev/random hackerbruecke.net Generating key pair.......+++++ ...............................................+++++ Khackerbruecke.net.+010+09558 * "-3" aktiviert NSEC3 * "-a RSASHA512" bestimmt den Typ der Signatur (muss wegen "-3" kompatibel sein! RSASHA256, RSASHA512, ECCGOST, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 und ED448 stehen zur Auswahl) * "-b" gibt die gewünschte Blockgröße an * "-n" spezifiziert den Nametyp wie ZONE, HOST, USER * "-r" wählt das Random-Device aus
Key Signing Key (KSK) generieren
root@noc:/var/cache/bind/keys# dnssec-keygen -3 -a RSASHA512 -b 4096 -n ZONE -r /dev/random -f KSK hackerbruecke.net Generating key pair........................................................++++ .................................................................................................++++ Khackerbruecke.net.+010+48817 * "-3" aktiviert NSEC3 * "-a RSASHA512" bestimmt den Typ der Signatur (muss wegen "-3" kompatibel sein! RSASHA256, RSASHA512, ECCGOST, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 und ED448 stehen zur Auswahl) * "-b" gibt die gewünschte Blockgröße an * "-n" spezifiziert den Nametyp wie ZONE, HOST, USER * "-r" wählt das Random-Device aus * "-f KSK" setzt das Flag im KEY/DNSKEY record
Owner und Rechte auf Schlüssel setzen
root@noc:/var/cache/bind/keys# chown -R bind:bind /var/cache/bind/keys/
Zone signieren
Im praktischen Betrieb werden Zonen nicht per Hand auf der Kommandozeile signiert. Zum einmaligen Signieren per Hand verwenden, kann aber dnssec-signzone verwendet werde:
root@noc:/var/cache/bind/keys# dnssec-signzone -S -o hackerbruecke.net /var/cache/bind/hackerbruecke.zone * "-S" aktiviert "smart signing", d.h. es wird im in /etc/bind/named.conf angegebenen key directory nach Schlüsseln gesucht, die zum Signieren verwendet werden * "-o hackerbruecke.net" gibt die Zone mit dem Namen "hackerbruecke.net" als Origin an, nach der in der Datei /var/cache/bind/hackerbruecke.zone gesucht wird
DS Resource Record im Parent veröffentlichen
Wenn die Zone online geht, muss noch der DS RR im Parent eingetragen werden. Dank „smart signing“ hat dnssec-signzone für uns diesen schon für den verwendeten KSK erstellt.
root@noc:/var/cache/bind/keys# ls -lthr total 16K -rw------- 1 root root 3.3K Apr 7 16:35 Khackerbruecke.net.+010+48817.private -rw-r--r-- 1 root root 964 Apr 7 16:35 Khackerbruecke.net.+010+48817.key -rw------- 1 root root 1.8K Apr 7 16:36 Khackerbruecke.net.+010+09558.private -rw-r--r-- 1 root root 618 Apr 7 16:36 Khackerbruecke.net.+010+09558.key
Signieren der Zone
for key in `ls Khackerbruecke.net.*.key` do echo "\$INCLUDE /var/cache/bind/keys/$key">> /var/cache/bind/hackerbruecke.zone done dnssec-signzone -3 `head -c 512 /dev/random | sha1sum | cut -b 1-16` -z -H 330 -K /var/cache/bind/keys -t -o hackerbruecke.net /var/cache/bind/hackerbruecke.net
Durch das Signieren wird eine neue Zonendatei mit dem Suffix „.signed“ erzeugt.
Owner und Rechte der Zonefiles setzen
root@noc:/var/cache/bind/keys# chown -R bind:bind /var/cache/bind/
Zone veröffentlichen
root@noc:/var/cache/bind/keys# vim /etc/bind/named.conf zone hackerbruecke.net { type master; file "/var/cache/bind/hackerbruecke.net.zone.signed"; allow-transfer { "slaves"; }; notify yes; };
BIND neu starten:
root@noc:/var/cache/bind/keys# systemctl restart bind9
DNSsec-Schlüssel beim Registrar bekanntgeben
Für die Aktivierung ist die Angabe des richtigen KSK von großer Bedeutung.
Die Zone höher muss die Delegation Signer Ressource Records (DS-RR) für die darunterliegende Zone eintragen. Sind die DS-RR eine Zone höher eingetragen, kann die Zone nun verifiziert werden.
Testen
root@noc:/var/cache/bind/keys# dig hackerbruecke.net dnskey +noall +answer +multiline root@noc:/var/cache/bind/keys# dig A www.hackerbruecke.net +dnssec
Wichtig
Nach jeder Änderung in der Zonendatei, muss diese neu signiert werden!
← zurück