Vyvarujte sa útoku DDoS s iptables Existuje mnoho spôsobov, ako to urobiť, podľa veľkosti paketu, limitu pripojenia atď. Tu uvidíme, ako ľahkým, intuitívnym a dobre vysvetleným spôsobom dosiahneme cieľ a zastavíme ďalšie nepríjemné ú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
Čo to robí, je spočítať počet paketov SYN (TCP pripojenie sa spustilo) pre každú adresu IP za posledných 10 sekúnd. Ak dosiahne 30, zahodí tento paket, takže sa spojenie nenadviaže (TCP sa pokúsi niekoľkokrát, keď klesne pod limit, ktorý je možné nastaviť).
#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
Tu je skript v našej paste: Vložiť.DesdeLinux.net (predchádzajúci skript)
Referencias:
- Pokus o zastavenie DDoS (Fórum ElHacker.net)
- Ako sa vyhnúť útoku DDoS a ako ho zažiť na skutočných serveroch? (Fórum ElHacker.net)
- Skript s podmienkami (MaliByte.net)
- Veľmi dobrý príklad (LinuxGuruz.org)
- Prevencia útoku DDoS (LinuxSecurity.com)
- Kalenie zásobníka TCP / IP, aby sa zabránilo útokom (SecurityFocus.com)
A to je dôvod, prečo som dal DDoS útokom tutoriál 😉
Uviesť / vysvetliť dôvod alebo problém (predchádzajúci tutoriál) a tiež vám dať riešenie (tento tutoriál) 🙂
perfektné.
Detský cukrík ...
Dobrý článok.
Moje dva centy:
V prípade paketov UDP neexistuje príznak SYN, pretože ide o protokol bez riadenia stavu. Paradoxne však existujú NOVÉ a ZOSTAVENÉ stavy, pretože iptables interne prenáša tabuľky na tento účel.
Na druhej strane je podľa môjho názoru lepšie použiť miesto DROP miesto ODMIETNUTIE, a to z dvoch dôvodov: po prvé, pri odmietnutí poskytuje informácie možnému útočníkovi a tiež počítač využíva časť svojej konektivity na odosielanie oznámenie útočiacemu tímu.
Ďalšia vec je, že v prípade protokolu ICMP (a všeobecne) je vhodné regulovať požiadavky aj odpovede, pretože pravdepodobne máme v určitom okamihu záujem pingovať sami seba a povolením tejto funkcie môže niekto použiť botnet a sfalšovať zdrojovú adresu na ping mnohých z týchto kompromitovaných počítačov bez konca a odpovede by sa dostali na náš server, ktorý by sa zbalil, keby neboli stanovené žiadne limity, a zbalili by ho.
Zvyčajne povoľujem typy ICMP 0,3,8,11 a 12 so vstupným limitom jeden za sekundu a výbuch dvoch alebo štyroch max. A všetko ostatné je ponechané na DROP.
Vlastne, s výnimkou protokolu TCP, ktorý je možné lepšie regulovať, by všetky ostatné mali byť chránené pomocou opatrenia proti DDoS prostredníctvom nedávnej zhody typu. Z tohto dôvodu, ako zaujímavosť, autor tohto modulu rád umiestni najskôr aktualizáciu a až potom sadu.
Iptables je naozaj veľmi flexibilný a výkonný, zatiaľ jediná vec, ktorú som navrhol urobiť a ešte som ju nedosiahol (aj keď som blízko k jej dosiahnutiu), je umožniť modulu psd vyhnúť sa portom, ale aj pri všetkom Dozvedel som sa o tomto nástroji, myslím, že som ešte ani len nepoškriabal povrch. 😉
V každom prípade, na tomto svete musíte vždy študovať.
Dobré body, Hugo, k nášmu slovníku: D, ako vždy, učenie sa ...
Mimochodom, modul psd som už dostal, aby pracoval pre mňa. Problém bol v tom, že spočiatku závisel od funkcionality jadra, ktorá bola zastaraná spolu s patch-o-matic, takže bola štandardne odstránená zo zabudovaných modulov v netfilteri. Takže aby ste teraz v Debiane mohli používať rozšírenie psd, musíte to urobiť najskôr:
aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
module-assistant auto-install xtables-addons-source
Potom sa môže normálne používať podľa pokynov:
man xtables-addons
Hugo, prečo nezverejníš iptables.sh so svojimi návrhmi na zlepšenie skriptu tohto príspevku (čo je dobré) vrátane psd
vďaka
Vynikajúci článok, vynikajúce iptables a vynikajúce vysvetlenie od @hugo. Čoraz viac som presvedčený, že sa musím ešte veľa učiť.
Nie si to sám, aspoň ja ... chýba mi milión ... 😀
Ahojte všetci a ďakujem za príspevok, ale pravdou je, že sme zúfalí, nevieme, čo máme robiť teraz, a prichádzame k vám kvôli tejto tabuľke iptables, o ktorej vieme, že ste odborníkmi na systémy.
Som vodcom španielskej komunity zdrojov Counter Strike a sme jedni z mála, ktorí stále sotva stoja, dostávame neustále útoky zo stroja a ďalšie útoky v časových intervaloch, konštanta odstraňuje málo, ale servera uráža trochu, ale ten, ktorý je čas, spôsobí väčšie škody. Náš stroj je namontovaný na 6.2 centos
a máme tcadmin na kontrolu serverov. Mohli by ste nám urobiť konfiguráciu, ktorá by tento typ útoku mohla čo i len trochu zastaviť, to znamená, že sme už zúfalí,
a nevieme, na koho sa obrátiť, vieme, že existujú dva botnety, jeden domáci a druhý platený za čas a silu. Trváme tak brutálne útoky tohto typu už takmer rok, ak by ste nám mohli pomôcť, boli by sme vám večne vďační, pretože to je teraz neudržateľné, rád konfigurujem servery ako hoobie a nie som dieťa, o ktorom vás ubezpečujem, ale toto je pre mňa veľa. Ak chcete, aby môj ts3 hovoril alebo čokoľvek, bol by som rád, keby ste nám pomohli, aby sme sem zverejnili výsledky a všetko, čo bolo vyriešené pre blaho mnohých ľudí, bol by to najnavštevovanejší blog roka, o ktorom vás ubezpečujem, pretože je neuveriteľné, ako to tieto útoky otravuje. Pretože sme sa to pokúsili nakonfigurovať sami a zablokovať prístup k zariadeniu, museli sme ho naformátovať z biosu, tak si predstavte, ako sa máme.
Posielam srdečný pozdrav. A gratulujem k chýbajúcemu blogu, veľa ľudí nájde ten, ktorý bol aktualizovaný týmto. -Miguel Angel-
Ahojte ako sa máte 🙂
Napíšte mi na môj email, radi vám pomôžeme 😀 -» kzkggaara[@]desdelinux[.]netto
Ahojte chlapci, až doteraz pracujem, vezmite si tento skript, mimochodom veľmi dobrý ... len jedna pochybnosť: Neznižuje "nedávny" modul výkon?
Zdravím - ďakujem / Kto ťa má rád?
Vynikajúci príspevok môj priateľ, uvediem vás v odkazoch na inštruktážne video, ktoré montujeme, objatie z Kostariky
Dobrý deň,
Nemôžete použiť skript na viacerých portoch?
Mám herný server a dostávam útoky na web aj na porty herného servera.
Pozdrav.