DDoS i drugi napadi na iptables (Anti-DDoS sigurnost u iptablesima)

Izbjegnite napad DDoS con iptables Ima mnogo načina za to, prema veličini paketa, ograničenju veze, itd. Ovdje ćemo vidjeti kako ćemo na jednostavan, intuitivan i dobro objašnjen način postići cilj, kao i zaustaviti druge dosadne napade na naše servere.

# 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

Ono što radi je da broji broj SYN paketa (Početak TCP veze) za svaku IP adresu u posljednjih 10 sekundi. Ako dostigne 30, odbacuje taj paket tako da se veza neće uspostaviti (TCP će pokušati ponovo nekoliko puta, kada padne ispod granice koju se može uspostaviti).

#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

Evo skripte u našoj Paste: Zalijepi.DesdeLinux.net (prethodna skripta)

Reference:


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   KZKG ^ Gaara rekao je

    I zato sam stavio tutorijal prije DDoS napada 😉
    Da postavim/objasnimo razlog ili problem (prethodni tutorijal), a također i damo rješenje (ovaj tutorijal) 🙂

    1.    diazepam rekao je

      perfektno.

  2.   koratsuki rekao je

    dječiji slatkiši...

  3.   hugo rekao je

    Dobar članak.

    moja dva centa:

    U slučaju UDP paketa, SYN zastavica ne postoji jer je to protokol bez kontrole stanja. Međutim, paradoksalno, stanja NEW i ESTABLISHED postoje jer iptables ima interne tabele za ovu svrhu.

    S druge strane, po mom mišljenju bolje je koristiti DROP destinaciju umjesto REJECT, iz dva razloga: prvo, kod odbijanja se daje informacija mogućem napadaču, a računar također koristi dio svoje povezanosti za slanje obavještenje napadačkom timu.

    Druga stvar je da je u slučaju ICMP protokola (i općenito) preporučljivo regulirati i zahtjeve i odgovore, jer ćemo u jednom trenutku vjerovatno biti zainteresirani da sami pingujemo, a omogućavanjem ove funkcionalnosti neko bi mogao koristiti botnet i falsifikovanje izvorne adrese stvaraju beskonačan ping za mnoge od ovih kompromitovanih računara, a odgovori bi završili na našem serveru, urušavajući ga ako ograničenja nisu bila nametnuta.

    Obično dozvoljavam ICMP tipove 0,3,8,11 i 12 sa ograničenjem unosa od jednog u sekundi i rafalom od dva ili najviše četiri, a sve ostalo je DROP.

    Zapravo, osim TCP protokola, koji se može bolje regulisati, svi ostali bi trebali biti zaštićeni anti-DDoS mjerom koristeći nedavno podudaranje tipa. S tim u vezi, kao kuriozitet, autor pomenutog modula voli da prvo postavi ažuriranje, a zatim set.

    Iptables je zaista vrlo fleksibilan i moćan, do sada jedino što sam zacrtao, a još nisam postigao (iako sam blizu toga), je da omogućim psd modulu da izbjegne skeniranje portova, ali čak i sa svim Saznao sam o ovom alatu, smatram da još nisam ni zagrebao. 😉

    U svakom slučaju, u ovom svijetu uvijek morate učiti.

  4.   koratsuki rekao je

    Dobre tačke Hugo, arhivirano za naš pojmovnik :D, kao i uvijek, učenje…

    1.    hugo rekao je

      Inače, već sam uspio natjerati psd modul da radi za mene. Problem je bio u tome što je u početku ovisio o funkcionalnosti kernela koja je zastarjela zajedno sa patch-o-maticom, pa je uklonjena iz modula ugrađenih u netfilter po defaultu. Dakle, sada u Debianu da biste koristili psd ekstenziju, prvo morate učiniti ovo:


      aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
      module-assistant auto-install xtables-addons-source

      Nakon toga se može normalno koristiti prema uputstvu:

      man xtables-addons

      1.    daleko rekao je

        Hugo, zašto ne objaviš iptables.sh sa svojim prijedlozima za poboljšanje skripte u ovom postu (što je dobro) uključujući psd

        hvala

  5.   Nelson rekao je

    Odličan članak, odličan iptables i odlično objašnjenje od @hugo. Postajem sve uvjereniji da moram još puno toga naučiti.

  6.   koratsuki rekao je

    Nisi samo ti, bar nisam ja... Nedostaje mi milion... 😀

  7.   Miguel Angel rekao je

    Pozdrav svima, i hvala vam na doprinosu, ali istina je da smo očajni, ne znamo šta da radimo sada, i dolazimo kod vas zbog ove stvari iptables jer znamo da ste sistemski stručnjaci.
    Kažem vam, ja sam vođa zajednice izvora za kontra strike u Španiji i mi smo jedni od rijetkih koji još jedva stoje, primamo stalne ddos ​​napade na mašinu i druge napade u vremenskim intervalima, konstantno jedan oduzima malo, ali malo umanjuje server ali onaj koji ima vremena pravi više štete. Naša mašina je montirana na centos 6.2
    i imamo tcadmin za kontrolu servera. Možete nam napraviti konfiguraciju koja bi mogla zaustaviti ovu vrstu napada makar i malo, već smo očajni,
    a ne znamo kome da se obratimo, znamo da su sa dva botnet-a, jedan domaći a drugi plaćen od vremena i sile. Trpimo brutalne napade ovog tipa skoro godinu dana, ako nam možete pomoći bili bismo vam vječno zahvalni jer je to već neodrživo, volim da postavljam servere kao hoobie, a nisam dijete, uvjeravam vas, ali ovo je mnogo za mene. Ako želite da moj ts3 priča ili bilo šta, volio bih da nam pomognete kako bismo ovdje objavili rezultate i sve što su rješavali za dobrobit mnogih ljudi, to bi bio najposjećeniji blog godine, u to vas uvjeravam jer je nevjerovatno koliko su ovi napadi dosadni. Pošto smo pokušali da ga sami konfigurišemo i blokirali pristup mašini, morali smo da ga formatiramo iz biosa, pa zamislite kako smo.
    Šaljem srdačan pozdrav. I moje čestitke za blog koji nedostaje čini mnoge ljude jednim koji je ažuriran poput ovog. -Miguel Angel-

    1.    KZKG ^ Gaara rekao je

      Zdravo kako si 🙂
      Pišite mi na mejl, rado ćemo vam pomoći 😀 -» kzkggaara[@]desdelinux[.]net

  8.   ArthurShelby rekao je

    Zdravo ljudi, dok ne radim na ovoj skripti, vrlo dobra usput... samo jedno pitanje: ne smanjuje li "nedavni" modul performanse?

    Pozdrav – Hvala / Kome se sviđate?

  9.   Jose tapia rekao je

    Odličan doprinos prijatelju, staviću te u reference video tutorijala koji kreiramo, zagrljaj iz Kostarike

  10.   Cristian Marfil Reinoso rekao je

    zdravo,

    Ne mogu li koristiti skriptu na više portova?
    Imam server za igre i primam napade i na web i na portove servera igara.

    A pozdrav.