Zabezpečení DNS
Obsah
Co je to?
V poslední době se na internetu rozmáhají tzv. "DNS Amplification" útoky. Ty prakticky spočívají v zesílení toku pomocí otevřených DNS resolverů. Je samozřejmě snaha se tomuto vyvarovat, protože to poškozuje celé hkfree - v případě útoku pocházejícího z našeho rozsahu nás může cílová síť odstřihnout (naroutovat náš prefix do null), takže se do ní nedostaneme a mohou s tím být jenom problémy.
Útok je ve zkratce popsaný na http://www.lupa.cz/clanky/denial-of-service-utoky-reflektivni-a-zesilujici-typy/ . Spoustu informací dá i google na heslo "dns amplification attack"
Jak se tomu vyvarovat?
Je nutné si dát pozor na DNS cache a rekurzivní resolvery na zařízeních s veřejnou IP. Například Voyage linux má defaultně puštěný dnsmasq, který v případě dostupné veřejné IP právě rekurzivní resolver poskytuje. Ten potom kdokoliv z internetu může využít.
Týká se to mne?
Jestli máš na routeru veřejnou IP a DNS server, je to možné. Vyzkoušet to lze příkazem
dig @89.248.IP.ADRESA +time=1 seznam.cz A
z linuxového PC mimo hkfree, nebo na stránce
http://kotec.bkralik.cz/free_pruditko/test.php?ip=89.248.IP.ADRESA
Pokud výsledkem bude timeout (connection timed out), je vše OK. Pokud výsledkem bude přeložená IP adresa seznamu, je to problém a je nutné ho řešit.
Jak to zakázat?
Mikrotik
Pokud máte na mikrotiku veřejnou IP a zároveň zaplé "Allow remote requests" v IP/DNS, je nutné přidat následující pravidla
/ip firewall filter add action=drop chain=input dst-port=53 protocol=udp src-address-list=!povolene add action=drop chain=input dst-port=53 protocol=tcp src-address-list=!povolene /ip firewall address-list add address=10.107.0.0/16 list=povolene add address=89.248.240.0/20 list=povolene add address=192.168.0.0/16 list=povolene add address=169.254.0.0/16 list=povolene add address=172.16.0.0/12 list=povolene add address=127.0.0.0/8 list=povolene
Stačí otevřít terminál ve winboxu, vložit do text něj a dát enter.
Linux
Voyage Linux a dnsmasq
Voyage má v základu automaticky zaplý DNS server DNSMasq. Pokud ho nevyužíváte, stačí ho vypnout nastavením "ENABLED=0" v /etc/default/dnsmasq a provedením /etc/init.d/dnsmasq stop
BIND
Teoreticky stačí nastavit
acl corpnets { 192.168.0.0/16; 10.0.0.0/16; 89.248.240.0/20; }; options { allow-query { any; }; allow-recursion { corpnets; }; };
což povolí rekurzivní dotazy pouze z vnitřní IP
Linux obecně (iptables)
iptables -N DNS_CHECK iptables -A DNS_CHECK -s 192.168.0.0/16 -j RETURN iptables -A DNS_CHECK -s 10.0.0.0/16 -j RETURN iptables -A DNS_CHECK -s 89.248.240.0/20 -j RETURN iptables -A DNS_CHECK -s 127.0.0.0/8 -j RETURN iptables -A DNS_CHECK -s 172.16.0.0/12 -j RETURN iptables -A DNS_CHECK -s 169.254.0.0/16 -j RETURN iptables -A DNS_CHECK -j DROP
iptables -A INPUT -p tcp --dport 53 -j DNS_CHECK iptables -A INPUT -p udp --dport 53 -j DNS_CHECK
a nebo je možnost pouze limitovat počet dotazů za sekundu, například podle
http://falkhusemann.de/blog/2012/07/iptables-dns-query-limiting-with-burst-rate/