DNS
Sebastian Kunec, 359587(@)mail.muni.cz
Obsah
História
- DNS vynašiel Paul Mockapetris v roku 1983
- súčasná špecifikácia RFC 1034 a RFC 1035
- pôvodne každý počítač získal súbor HOSTS.TXT od SRI (dnes SRI International), ktorý obsahoval tabuľku mapovaní názvov na adresy
- dodnes v podobe /etc/hosts používaný a prehľadávaný ako prvý (možnosť zmeny v /etc/nsswitch.conf)
Ako funguje DNS
- správa doménových mien počítačov a ich IP adries
- umožňuje preklad doménového mena na IP adresu (priamy preklad) a opačne (reverzný preklad)
- základná internetová služa
- prevádzkovaná nad transportným protokolom TCP/UDP, port 53
- uvádza poštové servery (MX záznam) akceptujúce poštu pre danú doménu
Doménové meno sa skladá z častí (domén, subdomén) oddelených bodkou.
Doména môže obsahovať znaky "A-Z", "a-z", "0-9", "-" a "_".
TTL (Time To Live) je čas, počas ktorého klient považuje informáciu o doménach/adresách za platnú. Po uplynutí tohto času si opäť obnovuje informácie z DNS.
Stromové riešenie
- každú časť stromu môže spravovať iný server
- distribuovaná správa domén
- domény najvyššej úrovne (top-level domains, TLD) spravujú koreňové DNS servery
com edu ... cz
/ \ | \
/ \ | \
google sun washington muni
/ | | / \
www www www fi esf
/ \
www www
Typy DNS
- Primárny DNS server
- obsahuje a obsluhuje údaje o doméne a je pre danú doménu autoritatívny
- odpovede sú vždy aktuálne a platné
- odkazy na DNS servery domény sú uložené v nadradenom DNS serveri
- ukazovatele na DNS servery druhej úrovne ("mojadomena.sk") sú uložené v DNS pre doménu najvyššej úrovne (".sk").
- upozornuje svoje sekundárne DNS servery pri zmene záznamov
- Sekundárny DNS server
- záložný DNS server pre doménu
- kopíruje údaje o doménach z primárneho DNS servera
- primárny DNS server má niekoľko sekundárnych DNS serverov, vždy však najmenej jeden.
- Cachovací
- slúži ako vyrovnávacia pameť systému pre sníženie záťaže a zrychlenie odozvy
- uchováva výsledky a medzivýsledky dotazov pokiaľ nevyprší ich platnosť
- Root
- koreňový server
- ktorý pozná adresy autoritatívnych serverov všetkých domén 1. úrovně (TLD)
Riešenie dotazu pre "server.mojadomena.sk
"
Koncový počítač má v operačnom systéme definové DNS servery.
V unix-like systémoch je to /etc/resolv.conf.
Dotaz sa môže riešiť rekurzívne alebo nerekurzívne.
Rekurzívne sa správajú zvyčajne lokálne servery, kvoli záťaži.
Nerekurzívne sa správajú napr. koreňové servery, tie len odkazujú na servery v stromovej štruktúre pod nimi.
- počítač kontaktuje váš DNS server
- ak je váš DNS server primárnym DNS serverom pre doménu
"
mojadomena.sk
", obslúži požiadavku a vráti IP adresu
- ak je váš DNS server sekundárnym DNS serverom pre doménu
"
mojadomena.sk
", poskytne údaje o adrese
"server.mojadomena.sk
" zo svojej kópie zónového súboru.
- ak váš DNS server používa nadradené DNS servery,
kontaktuje ich a odovzdá im požiadavku. Toto sa
opakuje pre všetky DNS servery, ktorými požiadavka prechádza.
- ak DNS nemá definované nadradené servery, kontaktuje náhodne vybraný koreňový DNS
server a získa adresu DNS servera pre doménu "
sk
"
- DNS server kontaktuje DNS server pre doménu "
sk
" a získa
adresu DNS servera pre doménu "mojadomena.sk
"
- DNS server kontaktuje DNS server domény "
mojadomena.sk
"
a získa adresu pre záznam "server.mojadomena.sk
"
- odpoveď sa vracia postupne cez všetky DNS servery až na počitač,
z ktorého bola vyslaná
Typy DNS záznamov
- SOA (Start Of Authority)
Syntax:
<doména> [<ttl>] [<trieda>] SOA <nameserver> <admin> (
<serial>
<refresh>
<retry>
<expire>
<minimum> )
doména: meno domény
trieda: pre Internet vždy "IN"
nameserver: DNS server, na ktorom je uložený zónový súbor pre doménu
admin: adresa správcu DNS. Znak "@" sa nahrádza znakom "."
serial: sériové číslo v tvare "YYYYMMDDxx",
- kde YYYY predstavuje rok
- MM mesiac, DD deň poslednej zmeny a xx je číslo zmeny
- Pri každej zmene zónového súboru treba zvýšiť toto číslo, inak sa zmeny neprejavia v sekundárnych DNS serveroch
refresh: určuje interval, v akom si má sekundárny DNSserver obnovovať údaje z primárneho DNS servera (v sekundách, RFC 1033 odporúča: 3600)
retry: určuje interval, v ktorom sa má sekundárny nameserver pokúšať opätovne spojiť s primárnym DNS serverom po tom, ako pri spojení nastala chyba (v sekundách, RFC 1033 odporúča: 600)
expire: určuje platnosť údajov na sekundárnom DNS serveri v prípade, že sa mu nepodarí aktualizovať údaje z primárneho DNS servera (v sekundách, RFC 1033 odporúča: 3600000)i
minimum: minimálna hodnota TTL (v sekundách, RFC 1033 odporúča: 86400)
NS (Name Server): určuje DNS servery pre definovanú doménu
Každá doména musí mať najmenej jeden NS záznam
Syntax:
<doména> [<ttl>] [<trieda>] NS <server>
MX (Mail Exchanger)
určuje server ktorý prijíma poštu adresovanú na adresy "pouzivatel@mojadomena.sk"
na zistenie, kam sa má pošta doručiť
Syntax:
<doména> [<ttl>] [<trieda>] MX <priorita> <server>
A (Address)
Záznam "A" (Address) určuje IP adresu pre server definovaný jeho menom. Servery uvedené ako "NS" a "MX", ktoré sú súčasťou vašej domény, musia mať záznam typu "A" (nie CNAME)!
Syntax:
<server> [<ttl>] [<trieda>] A <adresa>
CNAME (Canonical Name)
umožňuje vytvoriť alias pre server, ktorý už má "A" záznam, čiže niekoľko záznamov môže byť asociovaných s tou istou IP adresou. Toto sa používa pre definíciu serverov s menami "www", "mail" a podobne.
Syntax:
<alias> [<ttl>] [<trieda>] CNAME <server>
PTR (Pointer)
Záznamy "PTR" umožňujú reverzný preklad (z IP adresy na doménové meno počítača). Tieto záznamy môžete použiť iba v špeciálnej doméne "in.addr-arpa".
Syntax:
<špeciálnemeno> [<ttl>] [<trieda>] PTR <meno>
Resolver a jeho konfigurácia
Používa sa na konfiguráciu prístupu klienta k DNS.
Súbor definuje ktoré DNS serverz použiť.
Umiestnenie /etc/resolv.conf
- search fi.muni.cz
- nameserver 10.0.0.1
- nameserver fd00:dead:beef::1
BIND
Najpopulárnejší DNS server, obsahuje zónové súbory.
Vyvýjaný už od 1985. Súčasná verzia 9.9.2-P1.
Do súboru named.conf sú naincludovány súbory: named.rfc1912.zones, v ktorom sú definované zóny
a /etc/named.root.key kde je DNS kľúč pre root zónu.
typy zón:
- master - hlavná kópia zóny, spravovaná primárnym serverom
- slave - záložna kópia spravovaná sekundárním serverem, priebežne aktualizovaná.
- forward - presmerovanie
- hint - zoznam koreňových serverov
- Bind inštalácia (CentOS): yum -y install bind bind-libs bind-utils
- Spustenie / restart služby: /etc/init.d/named start / restart
- Opätovné načítanie konfiguračných súborov: /etc/init.d/named reload
- Konfigurácia: /etc/named.conf
Ukážka definice zóny
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
Príklad zónového súboru:
$ORIGIN domena.cz.
@ IN SOA @ root.domena.cz. (2002101000 3H 15M 2W 1D)
IN NS ns ; autoritativne name servery
IN NS ns.provider.cz.
IN MX 0 mailserver.domena.cz.
www IN A 12.34.56.78 ; info. o pocitacoch
ftp IN A 12.34.56.79 ; v tejto domene
news IN CNAME odyseus.domena.cz.
...
Reverzný záznam pre podsieť 12.34.56.0:
$ORIGIN 56.34.12.in-addr.arpa.
@ IN SOA @ root.domena.cz. (2002101000 3H 15M 2W 1D)
IN NS ns.domena.cz.
IN NS ns.provider.cz.
78 IN PTR www.domena.cz.
79 IN PTR ftp.domena.cz.
...
Prehľad DNS serverov a ich vlastností
Nástroje - overenie funkčnosti
- dig resolver
- Header
- QUESTION SECTION
- ANSWER SECTION
- AUTHORITY SECTION - odpovedajúce DNS servery
- ADDITIONAL SECTION - IP k DNS serverom
- host - na komunikáciu s DNS serverom a umožňuje prístup k záznamov v DNS
- drill
- whois
- nslookup
Bezpečnosť
BIND by nemal byť spúšťaný pod root užívateľom.
Chrootovaním dosiahneme to, že bind je "uväznený" v určitom adresári, takže nemôže pristupovať alebo čítať súbory mimo tohoto adresára.
Je dobré tiež umiestniť ho do samostatného koreňového adresára /chroot/named.
Inštalácia zahŕňa aj vytvorenie užívateľa named.
DNSSEC
Zavádza asymetrickú krypotografiu pre zaručenie integrity a autenticity prijatých odpovedí.
Držiteľ domény vygeneruje súkromný a verejný klúč.
Jednotlivé domény svojím privátnym kľúčom podpisujú svoje záznamy.
Ich verejný klúč je následne podpísan nadradenou doménou.
Do options BINDu stačí pridať dva riadky: dnssec-enable yes; dnssec-validation yes;
BIND od verzie 9.5 má DNSSEC zapnutý implicitne.
Útoky na DNS
- odpovědi DNS serveru jsou obvykle řádově větší než dotazy
- DNS servery jako spolehlivé zesilovače
- dotaz s falešnou adresou odesílatele, miery ve skutečnosti na oběť útoku
- cieľom -> co největší odpověď (typ dotazu ANY)
- dotazujeme se na meno, které je začátkem zóny (tzv. apex)
- doména chráněna DNSSECem zabezpečí velkého zesílení použitím dotazu na DNSKEY, ke kterému server navíc přidá podpisy.
Obrana
- obmedzit zbytečně mnoho TXT záznamů
- i perfektně nastavenou doménu je možné zneužít k zesílení s faktorem 5 až 15
- některé DNS servery (například Knot DNS) nabízejí možnost na dotazy typu ANY neodpovídat a stejně se chová i známá služba Google Public DNS
- filtrování zdrojových adres (provozovatel koncové sítě by na hraničních směrovačích měl propouštět ven do internetu pouze takové zdrojové adresy, které jsou koncové síti přiděleny)
- omezit počet DNS serverů
- existuje modul do netfiltru zvaný xt_dns, který dokáže klasifikovat UDP DNS dotazy podle druhu
- omezení četnosti dotazů pre danú IP adresu pomocí hashlimit
nasledujúce pravidlá vložíme do iptables
# iptables -N dns_udp
# iptables -A INPUT -p udp --dport 53 -j dns_udp
# iptables -A dns_udp -m hashlimit --hashlimit-above 25/sec \
--hashlimit-burst 100 --hashlimit-mode srcip \
--hashlimit-name DoS-DNS -j DROP
# iptables -A dns_udp -j ACCEPT
Stav pre danú IP adresu nájdeme v /proc/net/ipt_hashlimit/DoS-DNS.
Hashlimit a IPv6
Hashlimit dokáže také pracovat se sdíleným vědrem pro určitý společný prefix.
Utočník by mohl generovat pro každý dotaz jinou adresu z 64bitového prefixu.
Obrana přidáním volby --hashlimit-srcmask 64, samozřejmě při použití ip6tables
Literatura