====== DNSSEC RRs: DNSKEY, DS, RRSIG ====== DNSKEYs für .de Zone anzeigen: dig de. DNSKEY +nocomments | tee de.dnskey DS aus DNSKEY erstellen: dnssec-dsfromkey -f de.dnskey de Mit veröffentlichtem DS vergleichen: dig de. DS +short {{:lpi2:ds-dnskey.png?400|}} Ganze Kette für www.linuxhotel.de anzeigen: dig www.linuxhotel.de +trace +dnssec ====== validiert mein Resolver? ====== dig org. SOA +dnssec -> flags: ad ====== Eigene Zone signieren ====== ===== Voraussetzung ===== * öffentliche (unsignierte) Zone erstellt, wie in [[bind]] beschrieben ===== automatisch signieren mit dnssec-policy default ===== ==== Zone signieren ==== zone "example.com" { type primary; file "example.com"; dnssec-policy default; inline-signing yes; }; Konfiguration prüfen und BIND 9 neu laden: named-checkconf -z rndc reconfig === überprüfen === journalctl -fu named.service -> zeigt ''DNSKEY example.com/ECDSAP256SHA256/${CSK-ID} (CSK) is now active'', wobei ${CSK-ID} die ID des neuen Keys ist. cd /var/cache/bind ls -> zeigt die Key-Dateien rndc dnssec -status example.com -> dnskey: rumoured named-checkzone -D -f raw -j example.com ./example.com.signed -> zeigt die signierte Zone dig @localhost example.com SOA +dnssec +mu -> muss RRSIG enthalten ==== DS hinterlegen ==== named-checkzone -D -f raw -j example.com ./example.com.signed | tee ~/example.com.signed.export dnssec-dsfromkey -f ~/example.com.signed.export example.com | tee ~/ds.example.com oder dnssec-dsfromkey Kexample.com.+008+${CSK-ID}.key | tee ~/ds.example.com -> Ausgabe in der Zone des übergeordneten Servers einfügen === prüfen === dig @9.9.9.9 www.example.com +dnssec ===== von Hand signieren ===== Debian: cd /var/cache/bind mkdir keys chown bind keys key-signing key (KSK) erzeugen: (grösserer Schlüssel und KSK-Flag) ((Kann auf einer virtuellen Maschine recht lange dauern. Stichwort: Entropie. Tip: [[http://www.issihosts.com/haveged/|haveged]] )) dnssec-keygen -a RSASHA256 -b 2560 -n ZONE -K keys/ -f KSK example.com ls keys/Kexample.com.* -> Schlüssel ID-Nummer von KSK notieren (5-stellige Nummer) zone-signing key erzeugen: dnssec-keygen -a RSASHA256 -b 2048 -n ZONE -K keys/ example.com ls keys/Kexample.com.* less keys/Kexample.com.*.key -> Schlüssel ID-Nummer von ZSK notieren (5-stellige Nummer) Rechte auf den Schlüsseldateien anpassen: chown bind keys/* Öffentliche Schlüssel zu Zone hinzufügen: cat keys/Kexample.com.+008+*.key >> master/example.com Signierte Zonendatei erzeugen: (30 Tage gültig) dnssec-signzone -o example.com -k keys/Kexample.com.+008+${KSK-ID}.private master/example.com keys/Kexample.com.+008+${ZSK-ID}.private chown bind:bind master/example.com.signed less master/example.com.signed Signierte Zonendatei einbinden: zone "example.com" { … file "master/example.com.signed"; … }; Konfiguration prüfen und BIND 9 neu laden: named-checkconf -z rndc reload Testen: dig @localhost example.com SOA +dnssec +mu -> muss RRSIG enthalten ==== DS-Record hinterlegen ==== DS-Record erstellen: dnssec-dsfromkey keys/Kexample.com.+008+${KSK-ID}.key dnssec-dsfromkey keys/Kexample.com.+008+${KSK-ID}.key > ~/ds-example.com Eintrag bei Registry bzw. übergeordneter Domain hinterlegen Testen: dig @1.1.1.1 soa example.com +dnssec +mu -> ad-Flag muss gesetzt sein ===== automatisch ZSK signieren mit auto-dnssec maintain ===== Debian: cd /var/cache/bind Schritte wie bei [[#von Hand signieren]], aber signierte Zonendatei nicht mehr (selbst) erzeugen, sondern ab da folgende Schritte: Zonendatei von bind signieren lassen: zone "example.com" { … file "master/example.com"; auto-dnssec maintain; inline-signing yes; … }; Konfiguration prüfen und BIND 9 neu laden: named-checkconf -z rndc reconfig Zone (erstmalig) signieren: rndc sign example.com Testen: dig @localhost example.com SOA +dnssec +mu -> muss RRSIG enthalten rndc sync linuxhotel.de named-compilezone -f RAW -o - example.com master/example.com.signed | less ===== automatisch signieren mit dnssec-policy, ZSK und KSK ===== ==== Voraussetzung ==== * öffentliche (unsignierte) Zone vorhanden ==== Zone signieren ==== options { … }; dnssec-policy "kskzsk" { keys { ksk lifetime unlimited algorithm ecdsa256; zsk lifetime P90D algorithm ecdsa256; }; }; zone "example.com" { type primary; file "primary/example.com"; dnssec-policy "kskzsk"; update-policy local; inline-signing yes; }; Konfiguration prüfen und BIND 9 neu laden: named-checkconf -z rndc reconfig === überprüfen === journalctl -fu named.service -> zeigt ''DNSKEY example.com/ECDSAP256SHA256/${KSK-ID} (KSK) is now active'', wobei ${KSK-ID} die ID des neuen KSK ist. ls /var/cache/bind -> zeigt die Key-Dateien named-checkzone -D -f raw -j example.com example.com.signed -> zeigt die signierte Zone dig @localhost example.com SOA +dnssec +mu -> muss RRSIG enthalten ==== DS hinterlegen ==== dnssec-dsfromkey Kexample.com.+008+${KSK-ID}.key | tee ~/ds.example.com -> Ausgabe in der Zone den übergeordneten Servers einfügen ====== Doku und Links ====== * https://bind9.readthedocs.io/en/latest/dnssec-guide.html * https://internet.nl/ * file:///usr/share/doc/bind9-doc/arm/Bv9ARM.ch04.html#DNSSEC