Hlavní navigace

Knot DNS: další funkce související s DNSSEC

9. 2. 2022
Doba čtení: 16 minut

Sdílet

 Autor: Depositphotos
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 souvisejí.

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ě.

CS24_early

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.

(Původně vyšlo na blogu CZ.NIC.)

Byl pro vás článek přínosný?

Autor článku

Vystudoval softwarové inženýrství na Fakultě jaderné a fyzikálně inženýrské ČVUT v Praze. V Laboratořích sdružení CZ.NIC má na starosti vývoj projektu Knot DNS, jehož je členem od roku 2012.