Zabezpečení DNS: Porovnání verzí
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
Řádek 6: | Řádek 6: | ||
== Jak se tomu vyvarovat? == | == 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. | 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? == | == Týká se to mne? == | ||
Řádek 41: | Řádek 42: | ||
Teoreticky stačí nastavit | Teoreticky stačí nastavit | ||
− | acl corpnets { 192.168.0.0/16; 10. | + | acl corpnets { 192.168.0.0/16; 10.107.0.0/16; 89.248.240.0/20; }; |
options { | options { | ||
allow-query { any; }; | allow-query { any; }; | ||
Řádek 47: | Řádek 48: | ||
}; | }; | ||
− | což povolí rekurzivní dotazy pouze z vnitřní IP | + | 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 |
Aktuální verze z 13. 11. 2013, 01:09
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. 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