Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: Josef 10. 07. 2014, 17:42:06
-
iptables -I INPUT -p tcp --dport 80 -m limit --limit 1/min --limit-burst 10 -j ACCEPT
Da se tohle pravidlo vylozit takto?
Vsechny pozadavky co jdou na 80 port, kterych je do deseti za minut povol ... vsechno co je nad zakaz... da se to tak vysvetlit?
-
Myslím, že to znamená, že z paketů na tcp/dport/80 se na prvních 10 uplatní toto pravidlo, tj. ACCEPT, a pro další se toto pravidlo uplatní v průměru na jeden za minutu. Na ostatní tcp/dport/80 pakety se uplatní v pořadí následující pravidlo, případně výchozí politika chainu INPUT. Tam asi chcete mít DROP nebo REJECT.
-
A ještě by se slušilo dodat, že pokud je cílem omezovat počet spojení namísto počtu paketů, chce to ještě buď před toto pravidlo přidat obecné povolení paketů ve stavu ESTABLISHED, nebo k tomuto pravidlu přidat -m state --state NEW.
-
Funguje to nasledovne ...
limit urcuje jak casto se uplatni pravidlo
burst je defakto takova vyjimka z nej
=> rikas, ze se pravidlo uplatni 1x za minutu, ale ze kazdou minutu akceptujes 10paketu zcela bez omezeni. 11ctej to tudiz posle uz na dalsi pravidlo v rade, protoze to uz bude prekrocen ten 1/min
Kdybys tam mel limit 3/min ... tak to funguje tak, ze 3x za minutu akceptujes 10 paketu (respektive 1x kazdych 20s).
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html
Jinak tohle pouzivat na cokoli jinyho nez omezeni logovani je hodne blbej napad.
-
Kdybys tam mel limit 3/min ... tak to funguje tak, ze 3x za minutu akceptujes 10 paketu (respektive 1x kazdych 20s).
Ale tak to přeci není, je to i v tom odkazu: Also, every twenty minutes which passes without matching a packet, one of the burst will be regained; if no packets hit the rule for 100 minutes, the burst will be fully recharged; back where we started.
Tzn, že --limit-burst je zásobník či buffer. Po jeho zaplnění se nic nepřijme. --limit je pak pravidlo, které odmazává jeden paket ze zásobníku za daný čas (2/min - 2 za minutu)
-
Jop mas recht ... ja to necet cely ... ;D burst plati pro celej interval.
Kazdopadne to nic nemeni na tom, ze neni dobrej napad to pouzivat na nic jinyho nez logovani, aznto to zpusobuje nefunkcnost a defakto self dos.
-
Kazdopadne to nic nemeni na tom, ze neni dobrej napad to pouzivat na nic jinyho nez logovani, aznto to zpusobuje nefunkcnost a defakto self dos.
Jsou i rozumná využití, např.
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT
-
Diky za vysvetleni. No rekneme, ze mam stranku, ktera nacita z 10 databazi hromadu dat a ted mi nkedo drzi F5 to je tak trosk DOS attack. ....
Jak tohle muzu pomoci iptables limitovat?
-
Sice je to offtopic, ale nebolo by efektivnejsie blokovat to na strane aplikacie? Blokovat to cez FW je uplne netransparentne voci klientovi, ten nemusi vobec chapat v com je problem... Prejde ku konkurencii lebo "sluzba nie je stabilna".
-
Sice je to offtopic, ale nebolo by efektivnejsie blokovat to na strane aplikacie?
Jo, bingo!
-
Jasne ale rad bych pochopil iptables ... reknem, ze to nebude 80/443 ale 3389, 1723 atd...
-
Diky za vysvetleni. No rekneme, ze mam stranku, ktera nacita z 10 databazi hromadu dat a ted mi nkedo drzi F5 to je tak trosk DOS attack. ....
Jak tohle muzu pomoci iptables limitovat?
Takže především je potřeba bezpodmínečně povolit již navázaná spojení, protože zahazování jejich paketů může situaci jen zhoršit, nikdy zlepšit.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Pak je potřeba povolit nová spojení s patřičným limitem. Asi bych v tomto případě volil limit per IP adresa, na což se náramně hodí modul hashlimit:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-upto 1/min \
--hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name Muj_limit -j ACCEPT
A nakonec, aby to celé mělo nějaký smysl, musí být zajištěno zahození všeho, co není povoleno, třeba politikou chainu:
iptables -P INPUT DROP
Já bych ale doporučil odmítnutá spojení specificky odmítat ICMP rejectem, ať má nebohý klient šanci se dozvědět, co je špatně:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j REJECT
-
Diky za vysvetleni. No rekneme, ze mam stranku, ktera nacita z 10 databazi hromadu dat a ted mi nkedo drzi F5 to je tak trosk DOS attack. ....
Jak tohle muzu pomoci iptables limitovat?
Pomocí iptables nijak, protože iptables nevidí dovnitř komunikace a nevědí, že zrovna v tomhle spojení bude klient požadovat tu stránku s 10 databázemi. Navíc HTTP umožňuje jedním spojením posílat víc požadavků, takže vůbec není jisté, že držení F5 bude znamenat nová a nová spojení.
Limitovat to můžete jedině na straně aplikace, a ještě lepší je nelimitovat to, ale data kešovat, takže dotaz na nová data do databáze se provede jenom tak často, jak vy určíte.
-
Diky za vysvetleni. No rekneme, ze mam stranku, ktera nacita z 10 databazi hromadu dat a ted mi nkedo drzi F5 to je tak trosk DOS attack. ....
Jak tohle muzu pomoci iptables limitovat?
Takže především je potřeba bezpodmínečně povolit již navázaná spojení, protože zahazování jejich paketů může situaci jen zhoršit, nikdy zlepšit.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Pak je potřeba povolit nová spojení s patřičným limitem. Asi bych v tomto případě volil limit per IP adresa, na což se náramně hodí modul hashlimit:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-upto 1/min \
--hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name Muj_limit -j ACCEPT
A nakonec, aby to celé mělo nějaký smysl, musí být zajištěno zahození všeho, co není povoleno, třeba politikou chainu:
iptables -P INPUT DROP
Já bych ale doporučil odmítnutá spojení specificky odmítat ICMP rejectem, ať má nebohý klient šanci se dozvědět, co je špatně:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j REJECT
Jenom bych se potreboval jeste zeptat na tohle
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-upto 1/min \
--hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name Muj_limit -j ACCEPT
moc si nedovedu prelozit tuhle cast " --hashlimit-upto 1/min --hashlimit-burst 10" - pokud je za minutu prijmes vic jak 10 packetu s hlavickou NEW, pak reject?
-
V tomhle konkrétním případě budou zaříznuta nová spojení z dané zdrojové IP adresy, která přicházejí častěji než jednou za minutu. Přičemž počáteční zásoba je deset spojení. Tedy pokud do toho někdo bude neustále tlouct, podaří se mu nejdřív 10 spojení v řadě a pak jedno další každou minutu.
-
A nelze to spis nastavit tak, ze pokud to za minutu tukne 10x tak do uplynuti 60 sec, nova spojeni zahazuje a po uplynuti toho casu se to obnovi zpet na tech 10?
-
A nelze to spis nastavit tak, ze pokud to za minutu tukne 10x tak do uplynuti 60 sec, nova spojeni zahazuje a po uplynuti toho casu se to obnovi zpet na tech 10?
Da se nastavit cokoli ... nastavis interval na vic minut pripadne v ramci intervalu definujes vic "regulernich" pokusu. Samo muzes prosacovat rosireni iptables, ruznych nastroju najdes habakuk ... a v nejhorsim muzes pouzit zcela obecny filtry (to ale bude pomaly).
Jen bacha na vec, nektery veci generujou tak nejak "od prirody" vic new paketu (nejspis pro sychr ...), trebas RDP vpohode 3 (na jeden login). Ja sem trebas resil to, ze uzasny M$ vytvor (terminal server) byl temer dokonale odrovnan (100% zatizeni 4 jader) nekolika malo (neuspesnymi) pokusy o login/minuta (nebylo to vic nez 10, asi vic ani nestiha ... ;D). Takze sem tam nastavil 5x NEW/15 minut/ip (sem si tak rek, ze na kratsi dobu se nikdo pripojovat nebude - z logu) ... a pak resil, proc jim nejde login, kdyz 1x zvorou heslo.