V předchozím dílu jsme si představili základy fungování a provozu DNSSEC na serveru Knot DNS. Dnes navážeme popisem některých dalších funkcí tohoto serveru, které s DNSSEC souvisí.
Automatická propagace záznamu DS
Při prvotním zprovoznění DNSSEC nebo při výměně klíče KSK je třeba vložit odpovídající DS záznam do nadřazené zóny. Vedle pasivního přístupu, při kterém se publikují záznamy CDNSKEY a CDS v naší zóně a čeká se, až se nadřazená zóna sama aktualizuje, Knot DNS nabízí možnost aktivního vložení nového záznamu DS do nadřazené zóny přes dynamické DNS (tzv. DDNS). Tuto funkci nazýváme DS push. Zřejmým požadavkem je, že nadřazená zóna podporuje DDNS. Funkce DS push je zejména vhodná v situacích, kdy zónu i nadřazenou zónu spravuje stejný subjekt (ne nutně na stejném serveru).
Pro ukázku si nejprve nakonfigurujeme další zónu letters.xdp.cz., která je podřazená již existující zóně xdp.cz.. Na primárním serveru vytvoříme zónový soubor /var/lib/knot/letters.xdp.cz.zone s obsahem:
$ORIGIN letters.xdp.cz. $TTL 300 @ SOA ns1.xdp.cz. knot-dns.nic.cz. 1 36000 600 864000 300 NS ns1.xdp.cz. NS ns2.xdp.cz. alpha.letters.xdp.cz. PTR xn--mxa. beta.letters.xdp.cz. PTR xn--nxa. epsilon.letters.xdp.cz. PTR xn--qxa. omega.letters.xdp.cz. PTR xn--bya.
A do zónového souboru /var/lib/knot/xdp.cz.zone přidáme tzv. delegaci, která odkazuje část DNS podstromu do jiné zóny. V našem případě je provozována na stejných serverech:
letters.xdp.cz. NS ns1.xdp.cz. letters.xdp.cz. NS ns2.xdp.cz.
Dále v konfiguračním souboru primárního serveru nastavíme novou zónu:
zone: - domain: letters.xdp.cz. notify: secondary acl: acl_secondary
A obdobně i na sekundárním serveru:
zone: - domain: letters.xdp.cz. master: primary acl: acl_primary journal-content: none
Po potvrzení změn na obou serverech příkazem sudo systemctl reload knot máme zprovozněnou novou nepodepsanou zónu.
Než na ní zapneme DNSSEC, povolíme na primárním serveru u nadřazené zóny DDNS. Protože se v našem případě jedná o komunikaci v rámci samotného serveru, použijeme adresu localhostu ::1 (bude jak zdrojová, tak i cílová). Dále omezíme množinu záznamů, které lze takto měnit. Konkrétně povolíme jen DS záznamy s vlastníkem letters.xdp.cz.:
remote: - id: remote_ds_push address: ::1 key: key.xdp.cz. acl: - id: acl_ds_push remote: remote_ds_push action: update update-owner: name update-owner-name: letters.xdp.cz. update-type: DS zone: - domain: xdp.cz. ... zonefile-sync: 0 acl: [ acl_secondary, acl_ds_push ] ...
Použití DDNS v kombinaci s nastaveným zonefile-load: difference-no-serial přináší menší komplikaci, neboť bychom při úpravě zónového souboru přišli o vkládaný záznam DS. Proto jsme zapnuli automatickou synchronizaci zónového souboru (zonefile-sync: 0).
Nyní již zapneme podepisování na nové zóně. Funkce samotného DS push spočívá v nastavení položky ds-push, která udává popis vzdáleného serveru, na který se bude posílat požadavek na změnu záznamu DS:
submission: - id: submission_5m check-interval: 5m parent: [cznic, cloudflare] policy: - id: sub_policy propagation-delay: 60s ksk-submission: submission_5m ds-push: remote_ds_push zone: - domain: letters.xdp.cz. ... dnssec-signing: on dnssec-policy: sub_policy
Po potvrzení nového nastavení vidíme v logu, jak se DNSSEC postupně probouzí k životu:
Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: notice: [letters.xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, ready, active+ Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing started Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, successfully signed Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-26T15:45:15+0100 Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] notify, outgoing, remote 2001:1488:ac15:ff30::29@53, serial 2 Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34102, started, serial 1 -> 2 Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34102, finished, 0.00 seconds, 1 messages, 2311 bytes Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DDNS, processing 1 updates Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DNSSEC, successfully signed Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DNSSEC, next signing at 2022-01-25T12:37:03+0100 Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DDNS, finished, serial 2022011900 -> 2022011901, 0.02 seconds Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS push, outgoing, remote ::1@53, success Jan 19 15:45:15 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] zone file updated, serial 2022011900 -> 2022011901 Jan 19 15:45:16 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] notify, outgoing, remote 2001:1488:ac15:ff30::29@53, serial 2022011901 Jan 19 15:45:16 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34104, started, serial 2022011900 -> 2022011901 Jan 19 15:45:16 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34104, finished, 0.00 seconds, 1 messages, 885 bytes Jan 19 15:50:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative Jan 19 15:55:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: positive Jan 19 15:55:15 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2606:4700:4700::1111@53, KSK submission check: positive Jan 19 15:55:15 ns1.xdp.cz knotd[319094]: notice: [letters.xdp.cz.] DNSSEC, KSK submission, confirmed Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, active Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing started Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, successfully signed Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-26T15:45:15+0100 Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] notify, outgoing, remote 2001:1488:ac15:ff30::29@53, serial 3 Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34106, started, serial 2 -> 3 Jan 19 15:55:16 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] IXFR, outgoing, remote 2001:1488:ac15:ff30::29@34106, finished, 0.00 seconds, 1 messages, 1130 bytes
První část výpisů popisuje vygenerování prvních klíčů, podepsání zóny a transfer na sekundární server. Druhá část se týká DS push a transferu nadřazené zóny. A zbytek je detekce přítomnosti DS záznamu v nadřazené zóně a přechod klíče KSK ze stavu ready.
Zména algoritmu podepisování
S tím, jak se vyvíjejí a zastarávají podepisovací algoritmy, může být občas potřeba ho změnit. Taková změna se opět neobejde bez výměny klíčů, která probíhá v několika krocích (viz RFC 6781). Přestože se jedná o jeden z nejsložitějších zásahů do provozu DNSSEC, s Knot DNS to lze provést velmi snadno.
Pro ukázku změníme podepisovací algoritmus z ECDSAP256SHA256 na Ed25519 u nově přidané zóny. Zde je vhodné upozornit, že podpora DNSSEC s algoritmy Ed25519 a Ed447 není ještě v Internetu dostatečně rozšířena (viz například prezentace od Geoff Huston)! Ještě jsme nedávno narazili na problém, který komplikuje použití algoritmu Ed447 např. v aktuální Fedoře Rawhide.
Jediné, co je potřeba, je nastavení nového algoritmu místo výchozí hodnoty:
policy: - id: sub_policy algorithm: ed25519 ...
A potvrdit změny v konfiguraci pomocí sudo systemctl reload knot. Když server zjistí tuto změnu, zahájí rollover algoritmu. Díky dříve nastavenému DS check a DS push proběhne celá výměna plně automaticky. Její průběh je zobrazen zjednodušeným výpisem logu:
Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, algorithm rollover started Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, active Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, active+ Jan 20 09:24:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-20T09:30:28+0100 Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, active Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, public, active+ Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK, public, active+ Jan 20 09:30:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-20T09:36:28+0100 Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: notice: [letters.xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active+ Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, active Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, public, active Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK, public, ready, active+ Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-26T20:25:35+0100 Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DDNS, processing 1 updates Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DNSSEC, next signing at 2022-01-25T12:37:03+0100 Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] DDNS, finished, serial 2022011901 -> 2022012000, 0.04 seconds Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS push, outgoing, remote ::1@53, success Jan 20 09:36:28 ns1.xdp.cz knotd[319094]: info: [xdp.cz.] zone file updated, serial 2022011901 -> 2022012000 Jan 20 09:41:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: positive Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DS check, outgoing, remote 2606:4700:4700::1111@53, KSK submission check: positive Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: notice: [letters.xdp.cz.] DNSSEC, KSK submission, confirmed Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, public, active+ Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK, public, active+ Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, public, active Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK, public, active Jan 20 09:46:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-20T09:51:28+0100 Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256, active+ Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, public, active Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK, public, active Jan 20 09:51:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-20T09:57:28+0100 Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, signing zone Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 38116, algorithm ECDSAP256SHA256 Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 58926, algorithm ECDSAP256SHA256, KSK Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45046, algorithm ED25519, public, active Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, key, tag 45032, algorithm ED25519, KSK, public, active Jan 20 09:57:28 ns1.xdp.cz knotd[319094]: info: [letters.xdp.cz.] DNSSEC, next signing at 2022-01-27T09:24:28+0100
První a poslední fáze výměny může být matoucí, neboť jsou v zóně navíc podpisy RRsetů (kromě DNSKEY) i pomocí nepublikovaného klíče ZSK. To je však ochrana proti možným problémům u resolverů, jejichž implementace se řídí přísnějším výkladem RFC 4035.
Důkazy neexistence
Jednou z funkcí zabezpečení DNSSEC je prokazování, že dotazované doménové jméno nebo typ záznamu neexistuje v dané zóně. K tomuto účelu slouží záznamy typu NSEC. Když se všechna doménová jména v zóně seřadí, tak záznam NSEC popisuje dvě nejbližší existující doménová jména a dále určuje všechny existující typy záznamů pro dané doménové jméno (tzv. bitmapa). Sada všech NSEC záznamů v zóně tvoří uzavřený řetěz:
letters.xdp.cz. NSEC alpha.letters.xdp.cz. NS SOA RRSIG NSEC DNSKEY alpha.letters.xdp.cz. NSEC beta.letters.xdp.cz. PTR RRSIG NSEC beta.letters.xdp.cz. NSEC epsilon.letters.xdp.cz. PTR RRSIG NSEC epsilon.letters.xdp.cz. NSEC omega.letters.xdp.cz. PTR RRSIG NSEC omega.letters.xdp.cz. NSEC letters.xdp.cz. PTR RRSIG NSEC
Například když se dotážeme na neexistující jméno delta.letters.xdp.cz., dostaneme odpověď:
$ kdig @ns1.xdp.cz +dnssec +nocrypto +noopt delta.letters.xdp.cz PTR ;; ->>HEADER<<- opcode: QUERY; status: NXDOMAIN; id: 54175 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 0; AUTHORITY: 6; ADDITIONAL: 1 ;; QUESTION SECTION: ;; delta.letters.xdp.cz. IN PTR ;; AUTHORITY SECTION: letters.xdp.cz. 300 IN SOA ns1.xdp.cz. knot-dns.nic.cz. 10 36000 600 864000 300 beta.letters.xdp.cz. 300 IN NSEC epsilon.letters.xdp.cz. PTR RRSIG NSEC letters.xdp.cz. 300 IN NSEC alpha.letters.xdp.cz. NS SOA RRSIG NSEC DNSKEY letters.xdp.cz. 300 IN RRSIG SOA 15 3 300 20220203085728 20220120072728 45046 letters.xdp.cz. [omitted] beta.letters.xdp.cz. 300 IN RRSIG NSEC 15 4 300 20220203082428 20220120065428 45046 letters.xdp.cz. [omitted] letters.xdp.cz. 300 IN RRSIG NSEC 15 3 300 20220203084628 20220120071628 45046 letters.xdp.cz. [omitted] ;; Received 524 B ;; Time 2022-01-20 17:55:21 CET ;; From 2001:1488:ac15:ff30::28@53(UDP) in 9.4 ms
První NSEC záznam dokazuje neexistenci jména delta.letters.xdp.cz. a druhý NSEC záznam dokazuje neexistenci jména *.letters.xdp.cz., ze kterého by se mohlo expandovat dotazované jméno.
Z výše uvedeného plyne, že lze takto snadno vyčíst obsah zóny, což vedlo ke vzniku nového typu záznamu – NSEC3. Hlavním rozdílem od záznamu NSEC je, že doménová jména jsou v zahašované podobě. Nový záznam má ještě několik parametrů:
- Sůl – volitelná data, která jsou dalším vstupem do hašování. Názory ohledně přínosu se různí,
- Iterace – počet opakování hašování. Považováno za překonané a doporučená hodnota je 0,
- Opt-Out – signalizace, že záznam NSEC3 může pokrývat nepodepsané delegace. Použití pouze pro speciální případy (velké zóny).
Nastavení NSEC3 se opět nachází v sekci policy. Jeho zapnutí a nastavení počtu extra iterací na 0 obnáší přidání dvou voleb:
- id: sub_policy ... nsec3: on nsec3-iterations: 0
Ve výchozím nastavení se používá náhodně generovaná osmibajtová sůl, která se mění každých 30 dnů. Poznamenejme, že v Knot DNS od verze 3.2 bude výchozím nastavením počtu extra iterací také 0. Po potvrzení nové konfigurace se zóna přepodepíše s následujícím řetězem NSEC3 záznamů:
02pvtkmkn56bjueun26dc7d50f6jmv2t.letters.xdp.cz. NSEC3 1 0 0 922AB96E6C40EE2A 78kvurif1856prkcandr26ceip2o61b8 PTR RRSIG 78kvurif1856prkcandr26ceip2o61b8.letters.xdp.cz. NSEC3 1 0 0 922AB96E6C40EE2A igrn9p28tdgv0bbvhodbp4knshusqo0l PTR RRSIG igrn9p28tdgv0bbvhodbp4knshusqo0l.letters.xdp.cz. NSEC3 1 0 0 922AB96E6C40EE2A opaphr1jkpt58m709gj8foionou5h5fk PTR RRSIG opaphr1jkpt58m709gj8foionou5h5fk.letters.xdp.cz. NSEC3 1 0 0 922AB96E6C40EE2A uamcpkplossbj8luskb4tl9qmhmbed18 NS SOA RRSIG DNSKEY NSEC3PARAM uamcpkplossbj8luskb4tl9qmhmbed18.letters.xdp.cz. NSEC3 1 0 0 922AB96E6C40EE2A 02pvtkmkn56bjueun26dc7d50f6jmv2t PTR RRSIG
Nově vypadá odpověď na dotaz na neexistující jméno delta.letters.xdp.cz. následovně:
$ kdig @ns1.xdp.cz +dnssec +nocrypto +noopt delta.letters.xdp.cz PTR ;; ->>HEADER<<- opcode: QUERY; status: NXDOMAIN; id: 32508 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 0; AUTHORITY: 8; ADDITIONAL: 1 ;; QUESTION SECTION: ;; delta.letters.xdp.cz. IN PTR ;; AUTHORITY SECTION: letters.xdp.cz. 300 IN SOA ns1.xdp.cz. knot-dns.nic.cz. 11 36000 600 864000 300 opaphr1jkpt58m709gj8foionou5h5fk.letters.xdp.cz. 300 IN NSEC3 1 0 0 922AB96E6C40EE2A uamcpkplossbj8luskb4tl9qmhmbed18 NS SOA RRSIG DNSKEY NSEC3PARAM igrn9p28tdgv0bbvhodbp4knshusqo0l.letters.xdp.cz. 300 IN NSEC3 1 0 0 922AB96E6C40EE2A opaphr1jkpt58m709gj8foionou5h5fk PTR RRSIG 02pvtkmkn56bjueun26dc7d50f6jmv2t.letters.xdp.cz. 300 IN NSEC3 1 0 0 922AB96E6C40EE2A 78kvurif1856prkcandr26ceip2o61b8 PTR RRSIG letters.xdp.cz. 300 IN RRSIG SOA 15 3 300 20220203171527 20220120154527 45046 letters.xdp.cz. [omitted] opaphr1jkpt58m709gj8foionou5h5fk.letters.xdp.cz. 300 IN RRSIG NSEC3 15 4 300 20220203171527 20220120154527 45046 letters.xdp.cz. [omitted] igrn9p28tdgv0bbvhodbp4knshusqo0l.letters.xdp.cz. 300 IN RRSIG NSEC3 15 4 300 20220203171527 20220120154527 45046 letters.xdp.cz. [omitted] 02pvtkmkn56bjueun26dc7d50f6jmv2t.letters.xdp.cz. 300 IN RRSIG NSEC3 15 4 300 20220203171527 20220120154527 45046 letters.xdp.cz. [omitted] ;; Received 804 B ;; Time 2022-01-20 20:34:24 CET ;; From 2001:1488:ac15:ff30::28@53(UDP) in 13.8 ms
Obsah této odpovědi je složitější než v případě NSEC a případné zájemce odkážeme na RFC 7129
Přestože se může zdát NSEC3 jako dostatečné opatření proti vyčtení obsahu zóny, motivovaným útočníkům zabrání pouze proti zjištění těžko predikovatelných doménových jmen. Bohužel kromě přímého podepisování odpovědí není lepšího standardizovaného řešení.
Podepisování odpovědí
Předpodepsání zóny je vhodné pro většinu případů. Pro úplnost si ale ukážeme jak funguje podepisování odpovědí (tzv. online signing). Tuto funkci poskytuje modul onlinesign. Dočasně odstavíme automatické podepisování a nastavíme modul se stejným nastavením DNSSEC a vynutíme schéma dvou klíčů KSK a ZSK (modul ve výchozím nastavení používá jeden CSK) a díky tomu se použijí současné klíče.
policy: - id: sub_policy ... single-type-signing: false mod-onlinesign: - id: online_test policy: sub_policy zone: - domain: letters.xdp.cz. ... # dnssec-signing: on # dnssec-policy: sub_policy ... module: mod-onlinesign/online_test
Protože modul očekává nepodepsanou zónu, odstraníme ještě ze zónového souboru všechny záznamy, které souvisí s DNSSEC (DNSKEY, NSEC3PARAM, RRSIG a NSEC3) a potvrdíme novou konfiguraci příkazem sudo systemctl reload knot.
Pozor, tímto jsme rozbili synchronizace mezi primárním a sekundárním serverem, neboť podepisování odpovědí se musí provádět na obou serverech! To ale vyžaduje složitější nastavení, jako je synchronizace klíčů. Rovněž je vhodné používat manuální správu klíčů.
Nyní, když se dotážeme na existující záznam, jsou potřebné DNSSEC záznamy vygenerované pro každou odpověď:
$ kdig @ns1.xdp.cz +dnssec +nocrypto +noopt alpha.letters.xdp.cz PTR ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 62589 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 1 ;; QUESTION SECTION: ;; alpha.letters.xdp.cz. IN PTR ;; ANSWER SECTION: alpha.letters.xdp.cz. 300 IN PTR α. alpha.letters.xdp.cz. 300 IN RRSIG PTR 15 4 300 20220204150608 20220121133608 45046 letters.xdp.cz. [omitted] ;; Received 180 B ;; Time 2022-01-21 16:06:08 CET ;; From 2001:1488:ac15:ff30::28@53(UDP) in 9.3 ms
Zajímavější jsou pak negativní odpovědi:
$ kdig @ns1.xdp.cz +dnssec +nocrypto +noopt delta.letters.xdp.cz PTR ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 9104 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 0; AUTHORITY: 4; ADDITIONAL: 1 ;; QUESTION SECTION: ;; delta.letters.xdp.cz. IN PTR ;; AUTHORITY SECTION: letters.xdp.cz. 300 IN SOA ns1.xdp.cz. knot-dns.nic.cz. 13 36000 600 864000 300 delta.letters.xdp.cz. 300 IN NSEC \000.delta.letters.xdp.cz. A AAAA RRSIG NSEC letters.xdp.cz. 300 IN RRSIG SOA 15 3 300 20220204150710 20220121133710 45046 letters.xdp.cz. [omitted] delta.letters.xdp.cz. 300 IN RRSIG NSEC 15 4 300 20220204150710 20220121133710 45046 letters.xdp.cz. [omitted] ;; Received 366 B ;; Time 2022-01-21 16:07:10 CET ;; From 2001:1488:ac15:ff30::28@53(UDP) in 8.9 ms
Zde si můžete všimnout triku, kdy se v záznamu NSEC pro delta.letters.xdp.cz. jako následující doménové jméno vygeneruje binárně nejbližší možné jméno (s vysokou pravděpodobností neexistující) \000.delta.letters.xdp.cz., díky čemuž se neprozradí, jaké je následující existující jméno v zóně.
Tímto uzavřeme povídání o DNSSEC a věříme, že jeho nasazení už nebude obávaný strašák, ale běžná rutina.