Zabezpečení DNS

Z HKfree wiki
Verze z 13. 11. 2013, 01:09, kterou vytvořil Bkralik (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

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. Proto je potřeba omezit přístup na ip adresy pouze z vnitřní sítě a nebo alespoň nasadit rate-limiting

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.107.0.0/16; 89.248.240.0/20; };
 options {
   allow-query { any; };
   allow-recursion { corpnets; };
 };

což povolí rekurzivní dotazy pouze z vnitřní IP. Kdo má rozjetej Bind, tak určitě není lama a ví jak to řešit lépe než bkralik :-)...

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.107.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/


Pokud budete mít dotaz nebo si myslíte, že to dělám blbě, napište. Bkralik