DDoS și alte atacuri vs iptables (securitate anti-DDoS în iptables)

Evitați un atac DDoS cu iptables Are multe modalități de ao face, în funcție de dimensiunea pachetului, de limita conexiunii etc. Aici vom vedea cum, într-un mod ușor, intuitiv și bine explicat, vom atinge obiectivul, precum și vom opri alte atacuri enervante pe serverele noastre.

# 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

Ceea ce face este să numere numărul de pachete SYN (Începe conexiunea TCP) pentru fiecare adresă IP din ultimele 10 secunde. Dacă ajunge la 30, aruncă acel pachet, astfel încât conexiunea nu va fi stabilită (TCP va reîncerca de mai multe ori, când scade sub limita poate fi setată).

#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

Iată scriptul din Paste: Pastă.DesdeLinux.net (scriptul anterior)

referințe:


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   KZKG ^ Gaara el a spus

    Și de aceea am pus un tutorial înainte de atacurile DDoS 😉
    Pentru a pune / explica motivul sau problema (tutorialul anterior) și, de asemenea, să vă oferim soluția (acest tutorial) 🙂

    1.    diazepam el a spus

      perfectă.

  2.   koratsuki el a spus

    Bomboane pentru copii ...

  3.   Hugo el a spus

    Articol bun

    Cei doi cenți ai mei:

    În cazul pachetelor UDP, nu există semnalizator SYN deoarece este un protocol fără control de stat. Cu toate acestea, în mod paradoxal, stările NOI și STABILITE există, deoarece iptables poartă în interior tabele în acest scop.

    Pe de altă parte, în opinia mea, este mai bine să utilizați o destinație DROP în loc de REJECT, din două motive: în primul rând, cu un refuz, se oferă informații unui posibil atacator și, de asemenea, computerul folosește o parte din conectivitatea sa pentru a trimite notificare către echipa atacantă.

    Un alt lucru este că, în cazul protocolului ICMP (și, în general), este convenabil să reglementăm atât cererile, cât și răspunsurile, deoarece probabil că suntem interesați la un moment dat să facem ping pe noi înșine și, permițând această funcționalitate, cineva ar putea folosi un botnet și falsifica adresa sursă pentru a face ping multe dintre aceste PC-uri compromise fără sfârșit, iar răspunsurile ar merge la serverul nostru, prăbușind-o dacă nu s-ar impune limite.

    Permit de obicei tipurile ICMP 0,3,8,11 și 12 cu o limită de intrare de una pe secundă și o explozie de două sau patru maximum, iar orice altceva este lăsat la DROP.

    De fapt, cu excepția protocolului TCP care poate fi reglementat mai bine, toate celelalte ar trebui protejate cu o măsură anti-DDoS printr-o potrivire de tip recent. În ceea ce privește acest lucru, ca o curiozitate, autorului acestui modul îi place să plaseze mai întâi actualizarea și apoi setul.

    Iptables este într-adevăr foarte flexibil și puternic, până acum singurul lucru pe care mi l-am propus să fac și încă nu l-am realizat (deși sunt aproape de realizare), este să activez modulul psd pentru a evita portscanurile, dar chiar și cu tot ce am învățat despre acest lucru instrument, cred că încă nu am zgâriat încă suprafața. 😉

    Oricum, în lumea asta trebuie să studiezi întotdeauna.

  4.   koratsuki el a spus

    Puncte bune Hugo, la dosar pentru glosarul nostru: D, ca întotdeauna, învățând ...

    1.    Hugo el a spus

      Apropo, am obținut deja modulul PSD pentru mine. Problema a fost că inițial depindea de o funcționalitate a nucleului care a fost depreciată împreună cu patch-o-matic, deci a fost eliminată din modulele încorporate din netfilter în mod implicit. Deci, acum în Debian pentru a utiliza extensia psd, mai întâi trebuie să faceți acest lucru:


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

      Poate fi apoi utilizat în mod normal, conform instrucțiunilor:

      man xtables-addons

      1.    departe el a spus

        Hugo, de ce nu publici un iptables.sh cu sugestiile tale pentru a îmbunătăți scriptul acestei postări (care este bine), inclusiv psd

        Mulţumiri

  5.   nelson el a spus

    Articol excelent, iptables excelente și explicații excelente de la @hugo. Devin din ce în ce mai convins că mai am multe de învățat.

  6.   koratsuki el a spus

    Nu ești singur, cel puțin eu ... îmi lipsește un milion ... 😀

  7.   Miguel Angel el a spus

    Bună ziua tuturor, și mulțumim pentru contribuție, dar adevărul este că suntem disperați, nu știm ce să facem acum și venim la voi pentru acest iptables că știm că sunteți experți în sisteme.
    Sunt liderul unei comunități din Spania cu sursă de contragrevă și suntem printre puținii care încă abia stau în picioare, primim atacuri constante asupra mașinii și alte atacuri la intervale de timp, constanta elimină puțin, dar atrage atenția server un pic, dar cel care este de timp face mai multe daune. Mașina noastră este montată pe un 6.2 centos
    și avem tcadmin pentru a controla serverele. Ne-ai putea face o configurație care ar putea opri acest tip de atac chiar și puțin, este că suntem deja disperați,
    și nu știm la cine să apelăm, știm că există două botnets, unul de casă și celălalt plătit pentru timp și forță. Am suportat astfel atacuri brutale de acest tip de aproape un an, dacă ne-ați putea ajuta, am fi veșnic recunoscători pentru că este nedurabil acum, îmi place să configurez servere precum hoobie și nu sunt un copil pe care vă asigur, dar acest lucru este foarte mult pentru mine. Dacă doriți ca ts3-ul meu să vorbească sau orice altceva, aș vrea să ne ajutați, așa că am posta aici rezultatele și tot ceea ce a fost rezolvat pentru binele multor oameni, ar fi cel mai vizitat blog al anului pe care vă asigur pentru că este incredibil modul în care deranjează aceste atacuri ddos. Întrucât am încercat să-l configurăm pe cont propriu și am blocat accesul la mașină, a trebuit să-l formatăm din bios, deci imaginați-ne cum suntem.
    Trimit un salut cordial. Și felicitările mele pentru blogul lipsă, mulți oameni găsesc unul care a fost actualizat cu acesta. -Miguel Angel-

    1.    KZKG ^ Gaara el a spus

      Buna ce mai faci 🙂
      Scrie-mi pe e-mail, vom fi bucuroși să te ajutăm 😀 -» kzkggaara[@]desdelinux[.]net

  8.   ArthurShelby el a spus

    Bună băieți, până acum că lucrez, luați acest script, foarte bun apropo ... doar o singură îndoială: modulul „recent” nu reduce performanța?

    Salutări - Vă mulțumesc / Cine vă place?

  9.   Jose tapia el a spus

    Excelentă contribuție prietene, te voi pune în referințele unui tutorial video pe care îl montăm, o îmbrățișare din Costa Rica

  10.   Cristian Ivory Reinoso el a spus

    Buna,

    Nu puteți utiliza scriptul pe mai multe porturi?
    Am un server de jocuri și primesc atacuri atât pe web cât și pe porturile serverului de jocuri.

    Un salut.