Standards für die „Domain Name System Security Extensions (DNSSEC)“: RFC 4033, RFC 4034, RFC 4035, RFC 5011 und RFC 5155.
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
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.
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.
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
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
root@noc:/var/cache/bind/keys# chown -R bind:bind /var/cache/bind/keys/
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
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
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.
root@noc:/var/cache/bind/keys# chown -R bind:bind /var/cache/bind/
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
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.
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
Nach jeder Änderung in der Zonendatei, muss diese neu signiert werden!
← zurück