Můj malý svět

Obrať obličej k slunci
a stíny budou padat za tebe
  • Stop Heuréce
  • Zkušenosti s firmami
  • Jak na vlastní DNS cache s ochranou DNSSEC

    Mít vlastní DNS cache (správně nazývaný jako rekurzivní DNS server) je cestou k nezávislosti na vrtoších svého ISP. Po 15. červenci navíc i cestou, jak si zajistit bezpečnost DNS a nefalšovanost získávaných odpovědí.

    15. července 2010 totiž došlo k slavnostnímu zveřejnění klíče ke kořenové zóně, která je tak nyní zabezpečená mechanismem DNSSEC. To znamená, že pro domény nejvyšší úrovně bg., br., cat., cz., na., tm. a uk. (což je současná množina – postupně se samozřejmě bude rozrůstat) budeme vždy dostávat pouze pravé údaje, pokud DNS cache server, na který jsme připojeni, podporuje mechanismus DNSSEC a má nastavený veřejný klíč kořenové zóny.

    Jenže to ve většině případů bohužel neplatí. Rekurzivní DNS servery poskytovatelů připojení jsou často ve velmi bídném stavu, jsou pomalé a mají výpadky. Načítání webové stránky www.abclinuxu.cz mi tak trvalo cca 12 vteřin, což není málo. Pro motivaci uvedu, že po zprovoznění vlastní DNS cache toto načítání zrychlilo 4 násobně, tedy čekání se zkrátilo na pouhé 3 vteřiny. (Nejednalo se tedy o čekání na stažení stránky či jejích prvků – to probíhalo vcelku rychle –, ale o čekání na odpověď od DNS serveru poskytovatele.)

    Rekurzivních DNS serverů je celá řada. Já se rozhodoval především mezi djbdns a unboundem. S prvním jsem totiž již měl zkušenosti z minulosti, avšak dnes již naprosto ztratil krok s vývojem DNS – téměř nezvládá IPv6 a už vůbec ne DNSSEC, a proto jsem ho vyřadil. Unbound jsem našel přes doporučení na blogu CZ.NICu a posléze zjistil, že oproti široce rozšířenému BINDu je to skvělá alternativa.

    Instalace byla jednoduchá, jelikož se unbound nachází v repozitáři mé distribuce. Ale i kdy nebyl, kompilace není nikterak složitá. U konfigurace jsem čekal, že nebude tak jednoduchá jako u djbdns (kde se prakticky nic nekonfiguruje), nicméně jsem byl překvapen, že konfigurační soubor je velice jednoduchý a přehledný. Zmíním tedy jen několik důležitých momentů.

    interface jsem nastavil na ::1 (což je lokální adresa v IPv6 zápisu), jelikož nehodlám poskytovat DNS cache i někomu jinému, ale chci ji mít jenom pro sebe na svém notebooku. V takovém případě se může docela hodit volba prefetch: yes, která zaručí, že záznamy, jejichž platnost má tak tak vypršet, unbound v předstihu obnoví a já tak nebudu zasažen případným prodlouženým čekáním, až bych chtěl na takové adresy přistupovat.

    Co se týče DNSSECu, o němž jsem se zmiňoval hned na začátku, potřebujeme získat otisk veřejného klíče. Jelikož na něm bude padat důvěryhodnost celého DNSSEC mechanismu, je potřeba získat ho bezpečnou cestou. Otisk ve formátu DS záznamu, který budeme potřebovat, se nachází v tomto XML souboru: https://data.iana.org/root-anchors/root-anchors.xml (zde je zabezpečení zajištěno prostřednictvím SSL TLS). Z dat v tomto souboru sestavte takovýto řádek:

    . IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
    

    Je to snadné. Tento řádek pak uložme do souboru /etc/unbound/root.ds. Nyní již stačí jen správně nastavit samotný unbound, aby bral tento záznam v potaz. Zařídí se to volbou auto-trust-anchor-file: "root.ds". Tím, že jsme zvolili auto-trust-anchor-file místo pouhého trust-anchor-file jsme si ušetřili mnoho práce do budoucna – unbound totiž bude tento soubor aktualizovat za nás, takže se již nebudeme muset zabývat budoucími rotacemi klíčů v kořenové zóně, což je potěšujcí. :c)

    Aby naše práce měla smysl, odstraníme z /etc/resolv.conf všechny záznamy a vložíme jeden nový:

    nameserver ::1
    

    Je třeba při tom dbát na to, aby nám tento soubor nic neupravovalo, protože kdyby se zde objevil záznam pro DNS server, který neprovádí validaci DNSSECem, byla by naše snaha o bezpečí k ničemu. Zda vše funguje, jak má, ověříme jednoduše:

    $ dig +adflag www.nic.cz

    Dostaneme řadu údajů, ale zaměřme se na dva. Zaprvé úplně dole musí být tento řádek:

    ;; SERVER: ::1#53(::1)
    

    Který zaručuje, že odpověď pochází z našeho nového rekurzivního serveru. Dále potřebujeme vědět, že bylo provedeno ověření pravosti záznamů mechanismem DNSSEC. Jeden z řádků hlavičky by měl začínat tímto řetězcem:

    ;; flags: qr rd ra ad;
    

    Přičemž důležitá jsou písmena ad (authentic data). Máte to také tak? Tak přistupme k poslednímu testu:

    $ dig +adflag www.rhybar.cz

    Dostali jste nějaké odpovědi (IP adresy)? :c) Pokud ano, někde se stala chyba a je potřeba si celý postup znovu projít a vše zkontrolovat. Pokud ne, máte jistotu, že jste nyní chráněni proti podvrženým DNS odpovědím.

    Ještě bych chtěl upozornit na jednu věc. Všimněte si, že když zadáte dvakrát po sobě ten samý dig příkaz, tak v prvním máte například Query time: 578 msec, kdežto v druhém už je Query time: 0 msec. A to je právě to, co DNS cache dělá. Napoprvé si vyžádá odpověď ze serverů v Internetu, ale napodruhé již použije uložená (cachovaná) data z minulých dotazů a nemusí se už nikde znovu ptát. Proto nám práci v internetu tak zrychluje. :c)

    Zaškatulkováno v kategoriích: GNU/Linux, Internet a Síťování | 17. července 2010

    Komentáře

    Jak přidat komentář? E-mailem! :·) Na komentare -zavináč- mujmalysvet -tečka- cz – do předmětu „Komentář: Jak na vlastní DNS cache s ochranou DNSSEC“. Připojit můžete i svou přezdívku a domovskou stránku.