Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
lpi2:bind-dnssec [2016/03/08 07:37] ingo_wichmann |
lpi2:bind-dnssec [2024/08/09 15:18] (aktuell) ingo_wichmann |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== dig ====== | + | ====== DNSSEC RRs: DNSKEY, DS, RRSIG ====== |
| - | Aktuelle root-keys herunterladen: | + | DNSKEYs für .de Zone anzeigen: |
| - | dig . DNSKEY | egrep -v '^($|;)' > root.keys | + | dig de. DNSKEY +nocomments | tee de.dnskey |
| - | Nameserver abfragen: | + | DS aus DNSKEY erstellen: |
| - | dig +sigchase +trusted-key=./root.keys www.isc.org A @127.0.0.1 | + | dnssec-dsfromkey -f de.dnskey de |
| - | ====== Eigenen Resolver testen ====== | + | 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 | dig org. SOA +dnssec | ||
| -> flags: ad | -> flags: ad | ||
| - | |||
| - | dig test.dnssec-or-not.net TXT @localhost | ||
| - | -> "Yes, you are using DNSSEC" | ||
| ====== Eigene Zone signieren ====== | ====== Eigene Zone signieren ====== | ||
| + | ===== Voraussetzung ===== | ||
| + | * öffentliche (unsignierte) Zone erstellt, wie in [[bind]] beschrieben | ||
| + | |||
| + | ===== automatisch signieren mit dnssec-policy default ===== | ||
| + | ==== Zone signieren ==== | ||
| + | <file txt /etc/bind/named.conf.local> | ||
| + | zone "example.com" { | ||
| + | type primary; | ||
| + | file "example.com"; | ||
| + | dnssec-policy default; | ||
| + | inline-signing yes; | ||
| + | }; | ||
| + | </file> | ||
| + | |||
| + | 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 ===== | ===== von Hand signieren ===== | ||
| Debian: | Debian: | ||
| - | cd /var/lib/named | + | cd /var/cache/bind |
| + | mkdir keys | ||
| + | chown bind keys | ||
| - | Centos: | + | 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]] )) |
| - | cd /var/named | + | |
| - | mkdir keys | + | dnssec-keygen -a RSASHA256 -b 2560 -n ZONE -K keys/ -f KSK example.com |
| - | chown named keys | + | ls keys/Kexample.com.* |
| - | zone-signing key erzeugen: | + | -> Schlüssel ID-Nummer von KSK notieren (5-stellige Nummer) |
| - | ((Kann auf einer virtuellen Maschine recht lange dauern. Stichwort: Entropie. Tip: [[http://www.issihosts.com/haveged/|haveged]])) | + | |
| - | dnssec-keygen -a RSASHA512 -b 1536 -n ZONE example.com -K keys | + | zone-signing key erzeugen: |
| + | dnssec-keygen -a RSASHA256 -b 2048 -n ZONE -K keys/ example.com | ||
| ls keys/Kexample.com.* | ls keys/Kexample.com.* | ||
| less keys/Kexample.com.*.key | less keys/Kexample.com.*.key | ||
| - | key-signing key erzeugen: | + | -> Schlüssel ID-Nummer von ZSK notieren (5-stellige Nummer) |
| - | dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE example.com -K keys | + | |
| - | ls keys/Kexample.com.* | + | Rechte auf den Schlüsseldateien anpassen: |
| + | chown bind keys/* | ||
| Öffentliche Schlüssel zu Zone hinzufügen: | Öffentliche Schlüssel zu Zone hinzufügen: | ||
| - | cat keys/Kexample.com.+008+*.key >> example.com | + | cat keys/Kexample.com.+008+*.key >> master/example.com |
| Signierte Zonendatei erzeugen: (30 Tage gültig) | Signierte Zonendatei erzeugen: (30 Tage gültig) | ||
| - | dnssec-signzone -o example.com -k keys/Kexample.com.+008+52216.private example.com keys/Kexample.com.+008+12678.private | + | dnssec-signzone -o example.com -k keys/Kexample.com.+008+${KSK-ID}.private master/example.com keys/Kexample.com.+008+${ZSK-ID}.private |
| - | less example.com.signed | + | chown bind:bind master/example.com.signed |
| + | less master/example.com.signed | ||
| - | Todo: | + | Signierte Zonendatei einbinden: |
| + | <file txt /etc/bind/named.conf.local> | ||
| + | zone "example.com" { | ||
| + | … | ||
| + | file "master/example.com.signed"; | ||
| + | … | ||
| + | }; | ||
| + | </file> | ||
| - | * Diesen Server als hidden primary konfigurieren | + | Konfiguration prüfen und BIND 9 neu laden: |
| - | * wöchentlichen cron-job zum Signieren anlegen | + | named-checkconf -z |
| + | rndc reload | ||
| - | ===== bind automatisch ZSK signieren lassen ===== | + | 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: | Debian: | ||
| - | cd /var/lib/named | + | cd /var/cache/bind |
| - | Centos: (( möglicherweise kann man das | + | Schritte wie bei [[#von Hand signieren]], aber signierte Zonendatei nicht mehr (selbst) erzeugen, sondern ab da folgende Schritte: |
| - | setenforce Permissive | + | |
| - | mit | + | |
| - | restorecon -rv /var/named | + | |
| - | vermeiden. Noch nicht gestestet )) | + | |
| - | cd /var/named | + | |
| - | setenforce Permissive | + | |
| - | mkdir keys | + | Zonendatei von bind signieren lassen: |
| - | chown named keys master | + | <file txt /etc/bind/named.conf.local> |
| + | zone "example.com" { | ||
| + | … | ||
| + | file "master/example.com"; | ||
| + | auto-dnssec maintain; | ||
| + | inline-signing yes; | ||
| + | … | ||
| + | }; | ||
| + | </file> | ||
| - | zone-signing key erzeugen: ((Kann auf einer virtuellen Maschine recht lange dauern. Stichwort: Entropie. Tip: [[http://www.issihosts.com/haveged/|haveged]])) | + | Konfiguration prüfen und BIND 9 neu laden: |
| + | named-checkconf -z | ||
| + | rndc reconfig | ||
| - | dnssec-keygen -a RSASHA512 -b 1536 -n ZONE example.com -K keys | + | Zone (erstmalig) signieren: |
| - | ls keys/Kexample.com.* | + | rndc sign example.com |
| - | less keys/Kexample.com.*.key | + | |
| - | key-signing key erzeugen: | + | Testen: |
| - | dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE example.com -K keys | + | dig @localhost example.com SOA +dnssec +mu |
| - | ls keys/Kexample.com.* | + | -> 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 ==== | ||
| + | <file txt /etc/bind/named.conf.options> | ||
| + | options { | ||
| + | … | ||
| + | }; | ||
| + | dnssec-policy "kskzsk" { | ||
| + | keys { | ||
| + | ksk lifetime unlimited algorithm ecdsa256; | ||
| + | zsk lifetime P90D algorithm ecdsa256; | ||
| + | }; | ||
| + | }; | ||
| + | </file> | ||
| + | |||
| + | <file txt /etc/bind/named.conf.local> | ||
| + | zone "example.com" { | ||
| + | type primary; | ||
| + | file "primary/example.com"; | ||
| + | dnssec-policy "kskzsk"; | ||
| + | update-policy local; | ||
| + | inline-signing yes; | ||
| + | }; | ||
| + | </file> | ||
| + | |||
| + | 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 | ||
| - | Zone signieren: | + | ==== DS hinterlegen ==== |
| - | rndc sign | + | |
| - | dig dnskey @127.0.0.1 test +short | + | dnssec-dsfromkey Kexample.com.+008+${KSK-ID}.key | tee ~/ds.example.com |
| - | dig rrsig @127.0.0.1 test +short | + | -> Ausgabe in der Zone den übergeordneten Servers einfügen |
| ====== Doku und Links ====== | ====== Doku und Links ====== | ||
| - | * http://dnssectest.sidnlabs.nl/ | + | * https://bind9.readthedocs.io/en/latest/dnssec-guide.html |
| - | * http://test.dnssec-or-not.org/ | + | * https://internet.nl/ |
| * file:///usr/share/doc/bind9-doc/arm/Bv9ARM.ch04.html#DNSSEC | * file:///usr/share/doc/bind9-doc/arm/Bv9ARM.ch04.html#DNSSEC | ||