DDoS e altri attacchi contro iptables (sicurezza anti-DDoS in iptables)

Evita un attacco Protezione con iptables Ha molti modi per farlo, in base alla dimensione del pacchetto, al limite di connessione, ecc. Qui vedremo come, in modo facile, intuitivo e ben spiegato, raggiungeremo l'obiettivo, oltre a fermare altri fastidiosi attacchi ai nostri server.

# 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

Quello che fa è contare il numero di pacchetti SYN (Avvio della connessione TCP) per ogni indirizzo IP negli ultimi 10 secondi. Se raggiunge 30, scarta quel pacchetto in modo che la connessione non venga stabilita (TCP riproverà più volte, quando scende al di sotto del limite che può essere impostato).

#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

Ecco lo script nel nostro Paste: Incolla.DesdeLinux.net (script precedente)

riferimenti:


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   KZKG ^ Gaara suddetto

    Ed è per questo che ho inserito un tutorial prima degli attacchi DDoS 😉
    Per mettere / spiegare il motivo o il problema (tutorial precedente) e anche darti la soluzione (questo tutorial) 🙂

    1.    diazepano suddetto

      perfetto.

  2.   koratsuki suddetto

    Caramelle per bambini ...

  3.   Hugo suddetto

    Buon articolo.

    I miei due centesimi:

    Nel caso dei pacchetti UDP, il flag SYN non esiste perché è un protocollo senza controllo di stato. Tuttavia, paradossalmente, gli stati NEW e ESTABLISHED esistono perché iptables porta internamente le tabelle per questo scopo.

    D'altra parte, secondo me è meglio usare una destinazione DROP invece di REJECT, per due motivi: in primo luogo, con uno scarto si sta dando informazioni a un possibile aggressore, e anche il computer sta usando parte della sua connettività per inviare notifica alla squadra in attacco.

    Un'altra cosa è che nel caso del protocollo ICMP (e in generale) è conveniente regolare sia le richieste che le risposte, perché probabilmente a un certo punto siamo interessati a eseguire il ping di noi stessi, e abilitando questa funzionalità qualcuno potrebbe utilizzare un botnet e falsificare l'indirizzo di origine per eseguire il ping di molti di questi PC compromessi senza fine, e le risposte andrebbero al nostro server, facendolo collassare se non fossero imposti limiti.

    Di solito consento i tipi ICMP 0,3,8,11 e 12 con un limite di input di uno al secondo e un burst di due o quattro massimo, e tutto il resto è lasciato a DROP.

    In realtà, ad eccezione del protocollo TCP che può essere regolato meglio, tutti gli altri dovrebbero essere protetti con una misura anti-DDoS tramite un match di tipo recente. A questo proposito, come curiosità, all'autore di questo modulo piace inserire prima l'aggiornamento e poi il set.

    Iptables è davvero molto flessibile e potente, finora l'unica cosa che mi sono proposto di fare e non l'ho ancora raggiunto (anche se sono vicino a raggiungerlo), è abilitare il modulo psd per evitare portscan, ma anche con tutto Ho imparato a conoscere questo strumento, penso di non aver ancora scalfito la superficie. 😉

    Comunque, in questo mondo devi sempre studiare.

  4.   koratsuki suddetto

    Buoni punti Hugo, in archivio per il nostro glossario: D, come sempre, imparando ...

    1.    Hugo suddetto

      A proposito, ho già fatto funzionare il modulo psd per me. Il problema era che inizialmente dipendeva da una funzionalità del kernel che era deprecata insieme a patch-o-matic, quindi è stata rimossa dai moduli incorporati in netfilter per impostazione predefinita. Quindi ora in Debian per usare l'estensione psd, prima devi fare questo:


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

      Può quindi essere utilizzato normalmente, secondo le istruzioni:

      man xtables-addons

      1.    lontano suddetto

        Hugo, perché non pubblichi un iptables.sh con i tuoi suggerimenti per migliorare lo script di questo post (che è buono) incluso psd

        grazie

  5.   Nelson suddetto

    Ottimo articolo, eccellente iptables e ottima spiegazione da @hugo. Sono sempre più convinto che ho ancora molto da imparare.

  6.   koratsuki suddetto

    Non sei solo tu, almeno io ... mi manca un milione ... 😀

  7.   Miguel Angel suddetto

    Ciao a tutti, e grazie per il contributo, ma la verità è che siamo disperati, non sappiamo cosa fare ora, e veniamo da voi per questo degli iptables che sappiamo che siete esperti di sistemi.
    Sono il leader di una comunità in Spagna di fonti di counter strike e siamo uno dei pochi che sono ancora a malapena in piedi, stiamo ricevendo attacchi costanti dalla macchina e altri attacchi a intervalli di tempo, la costante rimuove poco ma ingaggia il server poco ma quello che è del tempo fa più danni. La nostra macchina è montata su un 6.2 centesimi
    e abbiamo il tcadmin per controllare i server. Potresti farci una configurazione che possa fermare anche un po 'questo tipo di attacco, è che siamo già disperati,
    e non sappiamo a chi rivolgerci, sappiamo che ci sono due botnet, una casalinga e l'altra pagata per tempo e forza. Abbiamo quindi sopportato attacchi brutali di questo tipo per quasi un anno, se tu potessi aiutarci saremmo eternamente grati perché ora è insostenibile, adoro configurare server come hoobie, e non sono un bambino che te lo assicuro ma questo è molto per me. Se vuoi che il mio ts3 parli o qualsiasi altra cosa, mi piacerebbe che ci aiutassi, quindi pubblicheremo qui i risultati e tutto ciò che è stato risolto per il bene di molte persone, sarebbe il blog più visitato dell'anno che ti assicuro perché è incredibile come infastidisca questi attacchi ddos. Dato che abbiamo provato a configurarlo da soli e abbiamo bloccato l'accesso alla macchina, abbiamo dovuto formattarlo dal bios, quindi immagina come siamo.
    Mando un cordiale saluto. E le mie congratulazioni per il blog mancante, molte persone ne trovano uno aggiornato con questo. -Miguel Angel-

    1.    KZKG ^ Gaara suddetto

      Ciao come stai 🙂
      Scrivi alla mia email, saremo felici di aiutarti 😀 -» kzkggaara[@]desdelinux[.]netto

  8.   Arthur Shelby suddetto

    Ciao ragazzi, fino ad ora che sto lavorando, prendete questo script, molto buono tra l'altro ... solo un dubbio: il modulo "recente" non riduce le prestazioni?

    Saluti - Grazie / Chi come te?

  9.   Jose tapia suddetto

    Ottimo contributo amico mio, ti metto nei riferimenti di un video tutorial che stiamo montando, un abbraccio dal Costa Rica

  10.   Cristian Ivory Reinoso suddetto

    Ciao,

    Non è possibile utilizzare lo script su più porte?
    Ho un server di gioco e ricevo attacchi sia al web che alle porte del server di gioco.

    Saluti.