Hlavní navigace

Konfigurace DNSSEC validujícího resolveru

5. 1. 2009
Doba čtení: 9 minut

Sdílet

V předchozím článku jsme si ukázali principy technologie DNSSEC. Dnes se dostáváme od teorie k praxi: ukážeme si, jak nakonfigurovat DNS server, aby validoval DNSSEC podpisy a znal nejdůležitější pevné body důvěry v DNSSEC stromu. Na závěr si řekneme, co je to DLV registr a jak nám může zjednodušit život.

Protože se v dnešním díle budeme zabývat praktickou konfigurací, je důležité zmínit, jaké DNS servery budeme používat. První DNS server, pro který si ukážeme konfiguraci, bude Bind. Druhým používaným DNS serverem bude nováček na poli DNS serverů – server Unbound. Unbound je rekurzivní DNS server, který vznikl jako alternativa k DNS serveru Bind a je vyvíjen neziskovou organizací NLNet Labs. Najdete jej buď přímo ve své distribuci nebo je možné si stáhnout zdrojové kódy na adrese www.unbound.net. Ke kompilaci je zapotřebí knihovna ldns, která je buď přibalena do zdrojových kódu serveru Unbound, nebo ji najdete na adrese www.nlnetlabs­.nl/ldns/. Knihovna ldns v adresáři examples/ obsahuje i sadu ukázkových programů pro práci s DNS a DNSSEC a v adresáři drill/ je program drill, který je možné používat jako alternativu k programu dig. K úspěšnému používání DNSSEC není zapotřebí instalovat ani knihovnu ldns a ani DNS server Unbound – příslušné pasáže ve článku prostě přeskočte.

Technologie DNSSEC je podporována v různých verzích DNS serveru Bind a ve všech stabilních verzích DNS serveru Unbound. Ve všech následujících příkladech konfigurace se budu snažit ukázat konfiguraci pro všechny používané verze, pokud se konfigurace liší.

Zapínáme DNSSEC validaci

Zapnout DNSSEC validaci je ta nejjednodušší část z celého článku. Pokud používáte DNS servery Bind ve verzi 9.5 a vyšší nebo Unbound, nemusíte nic dělat. DNSSEC validace je implicitně zapnuta. Bind ve verzi 9.4 má implicitně zapnutou pouze podporu DNSSEC, ale validace je implicitně vypnuta. Bind ve verzi 9.3 má implicitně podporu DNSSEC vypnutou.

Pokud byste chtěli DNSSEC validaci explicitně zapnout/vypnout, pro server Bind 9.5 a 9.4 se jedná o dvě konfigurační volby. Konfigurační volba dnssec-enable boolean; v sekci options {}; zapíná/vypíná DNSSEC. Neznamená to nic jiného, než že DNS server posílá DNS dotazy se zapnutým příznakem DO (DNSSEC OK). Druhá konfigurační volba dnssec-validation boolean; opět v sekci options {}; zapíná/vypíná DNSSEC validaci a je platná pouze pro Bind verze 9.4 a vyšší. Bind ve verzi 9.3 zná pouze první konfigurační volbu a DNSSEC validace se nedá samostatně vypínat a zapínat.

Pro server Unbound je možné DNSSEC validaci zapnout nebo vypnout pomocí direktivy module-config: "validator iterator". Vypnutí DNSSEC validace se provede nastavením této direktivy pouze na hodnotu, tedy  module-config: "iterator".

Důvěryhodné klíče

Validující resolver nyní má povolenu validaci podpisů, nicméně neví, kterým klíčům může důvěřovat a kterým ne. Konfiguraci DNSSEC klíčů je zapotřebí provést ručně. Po ruční konfiguraci klíčů bude možné, aby validující resolver ověřoval podpisy pro všechnya doménová jména, která jsou přímo v zóně nakonfigurovaného klíče, nebo k nim vede bezpečná cesta přes DS záznamy. Tedy, pokud má validující resolver nakonfigurovaný klíč pro zónu .cz a subdoména dnssec.cz zveřejní svůj klíč pomocí DS záznamu, bude moci tento validující resolver ověřovat podpisy i v zóně dnssec.cz.

Konfigurace klíčů je velmi jednoduchá. Pro server Bind se jednotlivé klíče přidávají do samostatné sekce trusted-keys {};. Musíte přidat klíč nebo více klíčů pro každou doménu, pro kterou chcete ověřovat DNSSEC podpisy a zároveň tato doména není bezpečně delegována z nadřazené zóny, pro kterou jste klíč již přidali.

Příklad konfigurace pro zónu .cz bude vypadat takto:

trusted-keys {

"cz." 257 3 5
  "XXXXAdo9fGLzCyxz1yTlsHCT7JpHrg0q/yOlvDNg39n/gAUzg6H/5X9p
   jW6mpecJuZirIcPcRw5E7E8uR8g2ztH4uztoc/7ss01s3rTnEgXfilbd
   psEdXEuxIfhq+w6zL6PvCcE3qRSzsrc2//x/SXjWp8yeT4YY3W3kvB4Z
   g5ld0a8bAHBYo4ZY9x7a3qnqOhqunXSG8EfRPD9koUMgWCjdnFNR89L1
   5Bkzh+q1J7phTHIY5akKf3YnIB/5BnKmGBC7DimK4uSBLiBA3DLxHnvL

   ffMT5XtKKHuQ/uZ4IxHWqR2cpHz/6e2WaQvOVILwd0gk9lTCildBGjC7
   eNxOMniXXXX=" ; // nepouzivat

};

Autoři DNS serveru Unbound se snažili situaci ulehčit, takže Unbound podporuje přesně ten samý formát konfigurace. Sekci trusted-keys {}; uložíte do samostatného souboru a konfigurační direktivou trusted-keys-file: "" řeknete, ze kterého souboru má klíče načítat. Unbound podporuje i další direktivy, ale vzhledem k tomu, že se nejčastěji setkáte právě s tímto formátem, nechávám jejich studium za domácí úkol.

Výše uvedený DNSSEC klíč je opravdu jenom příklad a je schválně znehodnocen. Důležité je si uvědomit, že pokud přidáváme klíč do konfigurace DNS serveru, měli bychom ho získat nějakou bezpečnou cestou. Klíče pro zónu .cz můžete získat na stránkách www.nic.cz/dns­sec/, kde bude vždy zveřejněn aktuální klíč (klíč v tomto článku zastará), a je možné si ověřit jednak SSL certifikát stránky a jednak PGP podpis DNSSEC klíče. Další DNSSEC klíče je možné získat na webových stránkách sdružení RIPE NCC (klíče pro reverzní delegace a pro ENUM domény), na stránkách švédského doménového registru (klíč pro doménu .se) a na stránkách brazilského doménového registru.

Až dojde k podepsání kořenové zóny, bude možné tyto jednotlivé klíče z konfigurace odstranit a spravovat pouze klíče pro kořenovou zónu. Do doby, než bude kořenová zóna podepsána, je zapotřebí spravovat jednotlivé klíče. Důležité je také se přihlásit do poštovních konferencí, které jsou většinou uvedeny na stránkách s klíči, abyste byli informováni o případných změnách klíče a validace vám nepřestala fungovat. O výměnách klíčů si budeme povídat v následujících dílech seriálu, zatím bych jenom upozornil na to, že pokud máte v konfiguraci špatný klíč, není možné odpovědi od autoritativního DNS serveru správně zvalidovat, a validující resolver vyhodnotí všechny odpovědi jako špatně podepsané a na všechny dotazy z takovéto domény a všech jejich subdomén bude vracet chybový kód SERVFAIL.

Ověření funkčnosti

Nyní máme v konfiguraci zapnutou DNSSEC validaci a přidané klíče pro doménu .cz. Jako další krok je potřeba nezapomenout konfiguraci DNS serveru znovu načíst nebo DNS server restartovat.

Jako poslední krok je zapotřebí ověřit, že jsme vše udělali správně a náš rekurzivní DNS server se stal validujícím resolverem. Jednoduchý příklad jsme si již uvedli v minulém díle, ale není na škodu si ho ukázat znovu:

$ dig +multi +dnssec www.dnssec.cz @localhost

; <<>> DiG 9.5.0-P2 <<>> +multi +dnssec www.dnssec.cz @localhost
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61066
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.dnssec.cz.     IN A

;; ANSWER SECTION:
www.dnssec.cz.      600 IN A 217.31.205.50
www.dnssec.cz.      600 IN RRSIG A 5 3 600 20090127010003 (
                20081228010003 58773 dnssec.cz.
                rkrCtJFuRt+jCuUEnMB8eKO90DEsYXCE8QP5vn1zc1E8
                r+NS+KVUgicJ4QFdGlb8qoQYCDFE0yVdYYEc2nybn9gQ
                /cx4rKGRCZ3SAGGFLgjOnip60qI6ESlWDqGu5kvgJPGo
                wpmXsWqBd1mApd8N9DQGLiRt7U6RsRCshBnbKA4= )

;; AUTHORITY SECTION:
dnssec.cz.      600 IN NS a.ns.nic.cz.
dnssec.cz.      600 IN NS b.ns.nic.cz.
dnssec.cz.      600 IN RRSIG NS 5 2 600 20090127010003 (
                20081228010003 58773 dnssec.cz.
                ZY4WqF4SkEWUaA0Wqgu517q4yy9tZgnJe4r3DATI6ecT
                cXKIMXUjDl6Gc3jZqtw55DWVDEH5lb2jnSglLUMsBRBQ
                dm45b4r+r45x1OyP2Obtg5LjXkmVdQVTqOBmfL3hzUqt
                uoSafDmYVN0HFwqTNVfkaRotaSpvXBNXU43Z1cE= )

;; Query time: 396 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 28 18:41:23 2008
;; MSG SIZE  rcvd: 435

Místo @localhost použijte adresu vašeho resolveru. V příznacích DNS zprávy se musí objevit příznak AD.

Další možnost jak ověřit, že DNS server byl správně nakonfigurován, je dotazem na špatně podepsanou doménu. Příklad takové domény je rhybar.cz.

$ dig +dnssec +multi www.rhybar.cz @localhost

; <<>> DiG 9.4.2-P2 <<>> +dnssec +multi www.rhybar.cz @localhost
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 14766
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.rhybar.cz.     IN A

;; Query time: 115 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan  4 18:10:10 2009
;; MSG SIZE  rcvd: 42

Pro jistotu pak ještě zkontrolujte ten samý dotaz s příznakem CD při dotazování, jestli se nejedná o jinou chybu.

$ dig +cd +dnssec +multi www.rhybar.cz @localhost

; <<>> DiG 9.4.2-P2 <<>> +cd +dnssec +multi www.rhybar.cz @localhost
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58454
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.rhybar.cz.     IN A

;; ANSWER SECTION:
www.rhybar.cz.      600 IN A 217.31.205.50
www.rhybar.cz.      600 IN RRSIG A 5 3 600 20081030080058 (
                20080930080058 5172 rhybar.cz.
                XVkut4l9mw2MhodZFIOD2L57AU2u+I6wGVlK1fr6w5lo
                cFC5NIe8ukw79jYdOCH3WwFgSMscumIz1sGqRPrN/Crh
                XiU0ymFGFju9x/k10lv6SGS6lslgnZluet04CyibGQ2H
                BnwTx7qK3j+bNzxKLvjpn7DY9f+YKB8F2FtwNOc= )

;; AUTHORITY SECTION:
rhybar.cz.      14369 IN NS b.ns.nic.cz.
rhybar.cz.      14369 IN NS a.ns.nic.cz.
rhybar.cz.      600 IN RRSIG NS 5 2 600 20081030080058 (
                20080930080058 5172 rhybar.cz.
                XNIBK/CmsKZsw6lT2iAa5g+TLOVxPx39N7vOxqW5lafa
                C56EuCZxUEmZT6ECvU/WzvQIqE1vqN4X6N/Z+5QTXKM3
                zcT+UhayyiLNRNwdlkmG0xo/+bYACj85lhyB3UGJ+vpR
                Wg2VVJOy9RLMyIka/S7nVYpgKUZFAZuxue6K17o= )

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan  4 18:10:36 2009
;; MSG SIZE  rcvd: 435

DLV registr

Protože v současnosti podporuje DNSSEC jen velmi málo TLD registrů a správa individuálních klíčů ve větším množství není reálná, vznikl alternativní způsob správy DNSSEC klíčů pro jednotlivé podepsané domény. DLV registr je podepsaná zóna, která obsahuje speciální DLV záznamy, které jaksi suplují neexistující DS záznamy v nadřazené zóně. Validující resolver, který je nakonfigurovaný pro funkci s DLV registrem, se nejprve podívá do nadřazené zóny, zda tato obsahuje DS záznam, a pokud jej tam nenajde, zkusí se podívat, zdali neexistuje DLV záznam v DLV registru pro doménové jméno, které vznikne spojením původního dotazu a názvu DLV registru. Pokud ano, bude takovýto záznam použit pro ověření důvěryhodného klíče pro ověřovaný podpis. DLV registr technicky může provozovat kdokoliv, ale prakticky se používá pouze DLV registr provozovaný společností ISC – dlv.isc.org. Příklad DLV záznamu v tomto registru by mohl vypadat takto:

dnssec.cz.dlv.isc.org.  1800 IN DS 17398 5 1 (
                    BBDDDD272C4D81EF941C722CEF79A848B543502D )

Konfigurace DLV registru není nikterak složitá. Nejprve musíte nakonfigurovat důvěryhodný klíč pro DLV registr (ten najdete na stránkách www.isc.org/op­s/dlv/ včetně kompletního příkladu konfigurace) a následně do sekce options {}; přidáte direktivu dnssec-lookaside string trust-anchor string;. Výsledná konfigurace bude vypadat takto:

options {
  dnssec-lookaside "." trust-anchor dlv.isc.org.;
};

trusted-keys {
  "dlv.isc.org." 257 3 5 "AwEA...FsJm=“;
};

Nezapomeňte konfigurace znovu načíst a ověřit, že validace funguje. Ověření můžete například provést tak, že z konfigurace odstraníte klíč pro doménu .cz, a vyzkoušíte příklady uvedené výše.

Konfigurace pro server Unbound vypadá následovně:

server:
           dlv-anchor-file: <nazev_souboru>

V souboru, na který ukazuje konfigurace, jsou obsaženy všechny aktuální klíče ve formátu RR záznamů – buď DS nebo DNSKEY.

root_podpora

Na závěr dnešního dílu bych pro jistotu zopakoval dvě důležité věci – nakonfigurované klíče je zapotřebí získat nějakou bezpečnou cestou a pokud zapnete DNSSEC validaci, je zapotřebí hlídat změny v klíčích. Nejlépe tak, že se přihlásite do poštovní konference dnssec-announce@lists.nic.cz. V příštím díle seriálu o DNSSEC si ukážeme opačnou stranu – konfiguraci autoritativního DNS a podepisování jednotlivých zónových souborů.


Autor je technickým ředitelem sdružení CZ.NIC.

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

Autor článku

Autor je vedoucím výzkumu Laboratoří CZ.NIC, z.s.p.o. a studentem FSS MU. Zajímá se o DNS, DNSSEC, Linux.