Do konfiguracji bind-a, w sekcji „options” dodajemy:
options { dnssec-enable yes; // Dla bind-a 9.16 i nowszego DNSSEC jest zawsze wlaczony i nie dajemy tej linii // Od bind-a 9.18 opcja "dnssec-enable" nie jest akceptowana dnssec-validation auto; }
Strefę konfigurujemy następująco (będzie automatycznie podpisywana przez bind-a):
zone "example.com" { type master; file "/usr/local/etc/namedb/example.com"; key-directory "/usr/local/etc/namedb/keys"; auto-dnssec maintain; inline-signing yes; };
Potrzebujemy dwóch kluczy: ZSK i KSK. Generowanie:
mkdir -p /usr/local/etc/namedb/keys chown bind:bind /usr/local/etc/namedb/keys
cd /usr/local/namedb/keys dnssec-keygen -a RSASHA256 -3 -b 1536 -n ZONE example.com dnssec-keygen -f KSK -a RSASHA256 -b 2048 -3 -n ZONE example.com chown bind:bind *
Jak już mamy utworzone klucze, rekonfigurujemy bind-a:
rndc reload rndc reconfig
I wczytujemy klucze oraz podpisujemy je:
rndc loadkeys example.com rndc signing -NSEC3PARAM 1 0 10 auto example.com
Jeśli mamy poprawną konfigurację, bind powinien zwrócić nam rekordy DNSKEY:
dig @localhost dnskey example.com
;; ANSWER SECTION: example.com. 86400 IN DNSKEY 257 3 8 AwEAAbmua8F5rlG/z2vgzrYfqH/xp1q6TqHIAbidNZ8O/CNNiR5Gg1R3 qg0zkKwX9e2lQ7XPtfhlzzDvtfYxOFAslFQaW7Bb8Dh1Er74QueX70zY HUP+2miGzOnxtWNV34QRYkEl3vCforUrbYrlrFiie2yOJuxM9pGjG1YQ fVlsmzIH2BvgX9Mf7I7o2sCtUWe/xS0hDn8zEkUSSw3Gbc36an+hvuR8 oQRM4t47QXk78Gr0nE7GiS2ojYBEjMfHx4q4gBVlrWX3s07snzEDOj3H JLlNFnShM5QnhKbKMGnjR947w1+m5FmFqaQizTY2A+BYfMaabYcN/UWF DlkGAqEQUIk= example.com. 86400 IN DNSKEY 256 3 8 AwEAAammYGhih6yLnd22wmmKs+5CsfLhfX1z/R5ywIm17cuM92RMWZfk RApTRTAGY2QbYKGWNMxypQZlIAB5JCwzlYD8r08MkDfLRuh2Hevq54lM z9xKtVbZV/qzP/8Mk9LZHpRPq6maT9On95LyjaDfTFzbrppjGJsP4BgY pbxPIQmutgqQdUdxm2STqgVT5fn9OlLkAGlfdikuNY5eBRFRksUYtybq eelIiwdqrQ9jCyYMCYl/28hDAvXaylG9F2X0DQ==
Dla klucza KSK trzeba utworzyć rekord DS i wpisać go do domeny u rejestratora:
dig @localhost dnskey example.com | dnssec-dsfromkey -f - example.com
example.com. IN DS 64517 8 2 79A10CF14E48325CF5547342ED680BB47A61DA5E870F4B6D1442F2F73563249B
Wpis ten ma na celu weryfikację naszego klucza KSK, który podpisuje nasz ZSK.
Sprawdzenie z CLI czy nasza domena działa prawidłowo:
delv example.com
; fully validated example.com. 85845 IN A 1.2.3.4 example.com. 85845 IN RRSIG A 8 3 86400 20220808230247 20220714173719 45093 example.com. hz26agJUMjqy3RaSQtboem4LsLnH9UpCbWHTSlxYNo7zXRYqA1xDQl72 l2CypW/yCRWhRzcQymre6Zd6NHI6OiA1lUKNFZpUK+k8JgXG+mHOK3io 23mViZhNnBTfrp3YeFuwLbSIeag7pXBbYnpR75mZUeBpKdrPeBUyJjGz ktduhASqHAVbZBhFyeCZPkwqZWYovtgy61WdkR9lHb1TU8z3wTSzJ+6C AXOT+myCinKkwQ9J1NFFoXim2RI0tvKN
Sprawdzenie online:
Według aktualnej (14.07.2022) dokumentacji bind-a, zalecana jest wymiana kluczy:
Procedury wymiany przedstawione są w dokumentacji:
Wyszukujemy aktualny klucz ZSK dla domeny:
cd /usr/local/etc/namedb/keys grep 256 Kexample.com*.key
Ustawiamy datę wygaśnięcia (-I) obecnego klucza na 1 miesiąc do przodu oraz jego skasowania (-D) na 2 miesiące do przodu:
dnssec-settime -I 20230921 -D 20231021 Kexample.com.+008+53115
Generujemy nowy klucz, który zostanie użyty po wygaśnięciu obecnego klucza (jako parametr podajemy obecny klucz, który będzie zastąpiony):
dnssec-keygen -S Kexample.com.+008+53115
Wyszukujemy aktualny klucz KSK dla domeny:
cd /usr/local/etc/namedb/keys grep 257 Kexample.com*.key
Ustawiamy datę wygaśnięcia (-I) obecnego klucza na 1 miesiąc do przodu oraz jego skasowania (-D) na 2 miesiące do przodu:
dnssec-settime -I 20230921 -D 20231021 Kexample.com.+008+59507
Generujemy nowy klucz, który zostanie użyty po wygaśnięciu obecnego klucza (jako parametr podajemy obecny klucz, który będzie zastąpiony):
dnssec-keygen -S Kexample.com.+008+59507
Odczytujemy nowy rekord DS z nowego klucza i wpisujemy go do WHOIS-a:
dnssec-dsfromkey -a SHA-256 Kexample.com.+008+01435.key
Miesiąc po tym jak nowy klucz zacznie działać, można wywalić stary z WHOIS-a.