===== 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
https://dnssec-analyzer.verisignlabs.com/
http://dnsviz.net/
=== Wichtig ===
Nach jeder Änderung in der Zonendatei, muss diese neu signiert werden!
\\
\\
<- [[linux:linux|zurück]]