DDoS och andra attacker mot iptables (Anti-DDoS-säkerhet i iptables)

undvika en attack DDoS med iptables Det har många sätt att göra det, efter paketstorlek, efter anslutningsgräns, etc. Här kommer vi att se hur vi på ett enkelt, intuitivt och välförklarat sätt kommer att uppnå målet, samt stoppa andra irriterande attacker på våra servrar.

# 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

Vad den gör är att räkna antalet SYN-paket (TCP-anslutningen startar) för varje IP-adress under de senaste 10 sekunderna. Om den når 30, kasserar den det paketet så att anslutningen inte kommer att upprättas (TCP:n kommer att försöka igen flera gånger, när den går under gränsen kan den fastställas).

#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

Här är skriptet i vår Paste: Klistra.DesdeLinux.net (Föregående skript)

referenser:


14 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   KZKG ^ Gaara sade

    Och det är därför jag lägger en handledning före DDoS-attacker 😉
    För att sätta/förklara orsaken eller problemet (föregående handledning), och även ge dig lösningen (denna handledning) 🙂

    1.    diazepam sade

      perfekt.

  2.   koratsuki sade

    Barngodis...

  3.   Hugo sade

    Bra artikel

    Mina två cent:

    I fallet med UDP-paket existerar inte SYN-flaggan eftersom det är ett protokoll utan tillståndskontroll. Men paradoxalt nog existerar de NYA och ETABLERADE tillstånden eftersom iptables internt har tabeller för detta ändamål.

    Å andra sidan, enligt min åsikt är det bättre att använda en DROP-destination istället för en REJECT, av två anledningar: för det första, med en avvisning ger man information till en möjlig angripare, och även utrustningen använder en del av sin anslutning till skicka meddelande till den attackerande datorn.

    En annan sak är att i fallet med ICMP-protokollet (och i allmänhet) är det bekvämt att reglera både förfrågningarna och svaren, eftersom vi förmodligen någon gång är intresserade av att göra en ping själva, och genom att aktivera den här funktionen kan någon använd ett botnät och förfalska källadressen för att oändligt pinga många av dessa komprometterade datorer, och svaren skulle hamna på vår server och krascha den om inga gränser infördes.

    Jag tillåter vanligtvis ICMP-typerna 0,3,8,11 och 12 med en ingångsgräns på en per sekund och en skur på två eller fyra maximalt, och allt annat förblir i DROP.

    I verkligheten, förutom TCP-protokollet som kan regleras bättre, borde alla andra skyddas med en anti-DDoS-åtgärd genom en nyligen genomförd matchning. Om detta, som en kuriosa, gillar författaren till nämnda modul att sätta uppdateringen först och sedan setet.

    Iptables är verkligen väldigt flexibelt och kraftfullt, hittills är det enda jag har tänkt göra och fortfarande inte lyckats (även om jag är nära att uppnå det), att göra det möjligt för psd-modulen att undvika portskanningar, men även med allt jag har lärt mig om verktyget tror jag att jag inte ens har skrapat på ytan än. 😉

    Kort sagt, i den här världen måste du alltid studera.

  4.   koratsuki sade

    Bra poäng Hugo, ansökte om vår ordlista :D, som alltid, lärande...

    1.    Hugo sade

      Jag har förresten redan lyckats få psd-modulen att fungera för mig. Problemet var att det från början berodde på en kärnfunktion som föråldrades tillsammans med patch-o-matic, så den togs bort från netfilters inbyggda moduler som standard. Så nu i Debian för att använda psd-tillägget måste du först göra detta:


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

      Den kan sedan användas normalt, enligt instruktionerna:

      man xtables-addons

      1.    Alej sade

        Hugo, varför publicerar du inte en iptables.sh med dina förslag för att förbättra manuset till det här inlägget (vilket är bra) inklusive psd

        tack

  5.   nelson sade

    Utmärkt artikel, utmärkta iptables och utmärkt förklaring av @hugo. Jag är mer och mer övertygad om att jag fortfarande har mycket kvar att lära.

  6.   koratsuki sade

    Det är inte du ensam, åtminstone för mig... Jag saknar en miljon... 😀

  7.   Miguel Angel sade

    Hej alla, och tack för bidraget, men sanningen är att vi är desperata, vi vet inte vad vi ska göra nu, och vi kommer till er på grund av iptables att vi vet att ni är experter på system.
    Jag berättar att jag är ledare för en counter strike source community i Spanien och vi är en av de få som fortfarande knappt står, vi får konstanta ddo-attacker på maskinen och andra attacker med tidsintervall, den konstanta tar bort lite men saktar ner servern lite men den som är tidsinställd gör mer skada. Vår maskin är monterad på en centos 6.2
    och vi har tcadmin för att kontrollera servrarna. Du kan göra oss en konfiguration som kan stoppa den här typen av attack, även om det är lite, vi är redan desperata,
    och vi vet inte vem vi ska vända oss till, vi vet att det finns två botnät, ett hemgjort och det andra betalat för tid och styrka. Vi har uthärdat brutala attacker av den här typen i nästan ett år, om du kunde hjälpa oss skulle vi vara evigt tacksamma eftersom det redan är ohållbart, jag älskar att konfigurera servrar som hoobie, och jag är inte ett barn som jag försäkrar dig men det här är mycket för mig. Om du vill att min ts3 ska prata eller något så skulle jag älska det om du kunde hjälpa oss, så vi skulle lägga upp resultaten här och allt som löstes för många människors bästa, det skulle vara årets mest besökta blogg, jag försäkrar dig om det eftersom det är otroligt hur irriterande dessa ddos-attacker är. Eftersom vi försökte konfigurera den på egen hand och blockerade åtkomst till maskinen var vi tvungna att formatera den från bios så föreställ dig hur vi är.
    Jag skickar en hjärtlig hälsning. Och mina gratulationer till den saknade bloggen gör många till en som uppdaterades med den här. -Miguel Angel-

    1.    KZKG ^ Gaara sade

      Hej hur mår du 🙂
      Skriv till min mejl, vi hjälper dig gärna 😀 -» kzkggaara[@]desdelinux[.]netto

  8.   ArthurShelby sade

    Hej killar, tills nu när jag jobbar använde jag det här skriptet, mycket bra förresten... Jag har bara en fråga: minskar inte den "senaste" modulen prestandan?

    Hälsningar – Tack / Vem gillar dig?

  9.   Jose tapia sade

    Utmärkt bidrag min vän, jag kommer att sätta dig i referenserna till en instruktionsvideo som vi håller på att sammanställa, en kram från Costa Rica

  10.   Cristian Ivory Reinoso sade

    Hej,

    Jag kan inte använda skriptet på flera portar?
    Jag har en spelserver och jag får attacker på både webb- och spelserverportar.

    En hälsning.