linux:dnssec

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!

zurück

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • linux/dnssec.txt
  • Zuletzt geändert: 2024-04-16 03:00
  • von dokuwikiadmin