Vyhněte se útoku DDoS s iptables Má mnoho způsobů, jak to udělat, podle velikosti paketu, omezení připojení atd. Zde uvidíme, jak snadným, intuitivním a dobře vysvětleným způsobem dosáhneme cíle a zastavíme další otravné útoky na naše servery.
# Iptables
IPT="/sbin/iptables"
ETH="eth0"
#Todo el tráfico syn
$IPT -P INPUT DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -P OUTPUT DROP
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A OUTPUT -m state --state INVALID -j DROP
$IPT -P FORWARD DROP
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A FORWARD -i lo -o lo -j ACCEPT
#Cuando sube la carga
$IPT -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable
#La que mejor va
$IPT -N syn-flood
$IPT -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
$IPT -A syn-flood -j LOG --log-prefix "SYN flood: "
$IPT -A syn-flood -j DROP
#Igual que el de arriba pero muy raw
$IPT -N syn-flood
$IPT -A INPUT -i eth0:2 -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
#Descartar paquetes mal formados
$IPT -N PKT_FAKE
$IPT -A PKT_FAKE -m state --state INVALID -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
$IPT -A PKT_FAKE -f -j DROP
$IPT -A PKT_FAKE -j RETURN
#Syn-flood
$IPT -N syn-flood
$IPT -A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN
$IPT -A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN -A syn-flood -j LOG --log-prefix "SYN FLOOD " --log-tcp-sequence --log-tcp-options --log-ip-options -m limit --limit 1/second
$IPT -A syn-flood -j DROP
#Requiere módulo "recent"
modprobe ipt_recent
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP
# explicación:
# Se añade cada ip que se conecte a la tabla de recent
# Por por cada ip en la tabla de recent si hace mas de x hits en x segundos, se dropea.
$IPT -I INPUT -p tcp --syn -m recent --set
$IPT -I INPUT -p tcp --syn -m recent --update --seconds 10 --hitcount 30 -j DROP
#UDP Flood
$IPT -A OUTPUT -p udp -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -p udp -m limit --limit 100/s -j ACCEPT
$IPT -A OUTPUT -p udp -j DROP
Počítá počet paketů SYN (Spuštění připojení TCP) pro každou adresu IP za posledních 10 sekund. Pokud dosáhne 30, zahodí tento paket, takže připojení nebude navázáno (TCP se pokusí několikrát, když klesne pod limit, který lze nastavit).
#Evitando Layer7 DoS limitando a 80 la máxima cantidad de conexiones
$IPT -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min --hashlimit-burst 80 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j DROP
#Permitir el ping, pero a 1 paquete por segundo, para evitar un ataque ICMP Flood
$IPT -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
$IPT -A INPUT -p icmp -j DROP
#Evitando que escaneen la máquina
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,RST SYN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,RST FIN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,FIN FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,URG URG –j DROP
Zde je skript v našem Paste: Vložit.DesdeLinux.net (předchozí skript)
reference:
- Pokus o zastavení DDoS (Fórum ElHacker.net)
- Jak se vyhnout útoku DDoS a jak ho zažít na skutečných serverech? (Fórum ElHacker.net)
- Skript s podmínkami (MaliByte.net)
- Velmi dobrý příklad (LinuxGuruz.org)
- Zabránění útoku DDoS (LinuxSecurity.com)
- Kalení zásobníku TCP / IP, aby se zabránilo útokům (SecurityFocus.com)
A proto jsem před útoky DDoS dal tutoriál 😉
Vysvětlit / vysvětlit důvod nebo problém (předchozí tutoriál) a také vám dát řešení (tento tutoriál) 🙂
perfektní.
Dětská cukrovinka ...
Dobrý článek.
Moje dva centy:
V případě UDP paketů příznak SYN neexistuje, protože se jedná o protokol bez řízení stavu. Paradoxně však existují stavy NEW a ESTABLISHED, protože iptables interně přenáší tabulky pro tento účel.
Na druhou stranu je podle mého názoru lepší použít místo DROP místo ODMÍTNUTÍ cíl, a to ze dvou důvodů: za prvé, s odmítnutím poskytuje informace možnému útočníkovi a také počítač používá část své konektivity k odesílání oznámení útočícímu týmu.
Další věc je, že v případě protokolu ICMP (a obecně) je vhodné regulovat jak požadavky, tak odpovědi, protože nás pravděpodobně v určitém okamžiku zajímá ping, a povolením této funkce může někdo použít botnet a zfalšovat Ze zdrojové adresy proveďte nekonečný ping na mnoho z těchto kompromitovaných počítačů a odpovědi by šly na náš server a sbalily by je, kdyby nebyly stanoveny žádné limity.
Obvykle povoluji typy ICMP 0,3,8,11 a 12 se vstupním limitem jeden za sekundu a výbuch maxima dvou nebo čtyř a vše ostatní je ponecháno na DROP.
Ve skutečnosti, kromě protokolu TCP, který lze lépe regulovat, by všechny ostatní měly být chráněny pomocí anti-DDoS opatření pomocí nedávné shody typu. Z tohoto důvodu autor tohoto modulu jako zvědavost rád umístí nejprve aktualizaci a poté sadu.
Iptables je opravdu velmi flexibilní a výkonný, zatím jediná věc, kterou jsem navrhoval udělat a dosud jsem toho nedosáhl (i když jsem blízko k jeho dosažení), je umožnit modulu psd vyhnout se portcanům, ale i se vším, co jsem se o tom naučil nástroj, myslím, že jsem povrch ještě nepoškrábal. 😉
V tomto světě musíte vždy studovat.
Dobré body, Hugo, ke spisu pro náš glosář: D, jako vždy, učení ...
Mimochodem, už jsem dostal modul psd, aby pro mě pracoval. Problém spočíval v tom, že to původně záviselo na funkčnosti jádra, která byla zastaralá spolu s patch-o-matic, takže byla ve výchozím nastavení odstraněna z vestavěných modulů v netfilteru. Chcete-li tedy v Debianu použít rozšíření psd, musíte to udělat nejdříve:
aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
module-assistant auto-install xtables-addons-source
Poté jej lze normálně použít podle pokynů:
man xtables-addons
Hugo, proč nezveřejníte iptables.sh se svými návrhy na vylepšení skriptu tohoto příspěvku (což je dobré) včetně psd
díky
Vynikající článek, vynikající iptables a vynikající vysvětlení od @hugo. Stále více jsem přesvědčen, že se musím ještě hodně učit.
Nejsi to ty sám, alespoň já ... chybí mi milion ... 😀
Ahoj všichni a děkuji za příspěvek, ale pravdou je, že jsme zoufalí, nevíme, co dělat teď, a přijdeme k vám kvůli této tabulce iptables, o které víme, že jste odborníky na systémy.
Jsem vůdcem španělské komunity protiútoku a jsme jedni z mála, kteří stále sotva stojí, dostáváme neustálé útoky ze stroje a další útoky v časových intervalech, konstanta málo odstraňuje, ale zneklidňuje server trochu, ale ten, který je čas, způsobí větší škody. Náš stroj je namontován na 6.2 centu
a máme tcadmin k ovládání serverů. Mohli byste z nás udělat konfiguraci, která by tento typ útoku mohla i trochu zastavit, je to, že už jsme zoufalí,
a nevíme, na koho se obrátit, víme, že existují dva botnety, jeden domácí a druhý placený za čas a sílu. Trváme tedy brutální útoky tohoto typu téměř rok, pokud byste nám mohli pomoci, byli bychom věčně vděční, protože je to nyní neudržitelné, rád konfiguruji servery jako hoobie a nejsem dítě, o kterém vás ujišťuji, ale to je pro mě hodně. Pokud chcete, aby můj ts3 mluvil nebo cokoli jiného, rád bych vám pomohl, abychom zde zveřejnili výsledky a vše, co bylo vyřešeno pro dobro mnoha lidí, byl by to nejnavštěvovanější blog roku, o kterém vás ujišťuji, protože je neuvěřitelné, jak tyto útoky obtěžuje ddos. Protože jsme se to pokusili nakonfigurovat sami a zablokovali jsme přístup ke stroji, museli jsme to naformátovat z biosu, takže si představte, jak se máme.
Posílám srdečný pozdrav. A gratuluji k chybějícímu blogu, mnoho lidí najde ten, který byl aktualizován tímto. -Miguel Angel-
Ahoj jak se máš 🙂
Napište na můj email, rádi vám pomůžeme 😀 -» kzkggaara[@]desdelinux[.]síť
Ahoj kluci, až dosud pracuji, vezměte si tento skript, mimochodem velmi dobrý ... jen jedna pochybnost: Nesnižuje modul «recent» výkon?
Zdravím - děkuji / Kdo vás má rád?
Vynikající příspěvek, příteli, uvedu vás do odkazů na výukové video, které připevňujeme, objetí z Kostariky
Dobrý den,
Nemůžete použít skript na více portech?
Mám herní server a dostávám útoky na web i na porty herního serveru.
Pozdrav.