DDoS i altres atacs vs iptables (Seguretat anti-DDoS en iptables)

Evitar un atac DDoS amb iptables té moltes maneres de fer-se, per grandària de paquets, per límit de connexions, etc. Aquí veurem com, d'una manera fàcil, intuïtiva i ben explicada aconseguirem l'objectiu, així com aturar altres molestos atacs als nostres servers.

# 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

El que fa és comptar el nombre de paquets SYN (inici de connexió TCP) Per a cada adreça IP en els últims 10 segons. Si arriba a 30 descarta aquest paquet pel que no s'ha d'establir la connexió (el TCP tornarà a intentar diverses vegades, quan baixi de el límit es pot establir).

#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

Aquí tenen l'script al nostre Paste: Enganxa.DesdeLinux.net (Script anterior)

referències:


14 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   KZKG ^ Gaara va dir

    I aquest és el per què vaig posar un tutorial abans d'atacs DDoS 😉
    Per posar / explicar el motiu o problema (tutorial anterior), ia més donar-li a vostès la solució (aquest tutorial) 🙂

    1.    diazepan va dir

      perfecte.

  2.   Koratsuki va dir

    El caramel dels nens ...

  3.   Hugo va dir

    Bon article.

    Els meus dos centaus:

    En el cas dels paquets UDP no existeix el flag SYN perquè és un protocol sense control d'estat. No obstant això, paradoxalment sí que hi ha els estats NEW i ESTABLISHED perquè iptables porta internament unes taules per a aquest fi.

    D'altra banda, al meu entendre és millor utilitzar una destinació DROP en lloc de REJECT, per dues raons: en primer lloc, amb un reject un està donant informació a un possible atacant, ia més l'equip està utilitzant part de la seva connectivitat per enviar la notificació a l'equip atacant.

    Una altra cosa és que en el cas de el protocol ICMP (i en general) convé regular tant les sol·licituds com les respostes, perquè probablement ens interessi en algun moment fer un ping nosaltres, i a l'habilitar aquesta funcionalitat, algú podria utilitzar una botnet i falsejant la direcció d'origen fer un ping interminable a moltes d'aquestes PC compromeses, i les respostes anirien a parar al nostre servidor, colapsándolo de no imposar-límits.

    Jo sòl permetre els tipus ICMP 0,3,8,11 i 12 amb un límit d'entrada d'un per segon i una ràfega de dos o quatre com a màxim, i tota la resta queda en DROP.

    En realitat, excepte el protocol TCP que es pot regular millor, tots els altres convé protegir-los amb una mesura anti DDoS mitjançant una coincidència tipus recent. A propòsit d'això, com a curiositat, a l'autor d'aquest mòdul us agrada col·locar primer el update i després el set.

    Iptables realment és molt flexible i potent, fins ara l'únic que m'he proposat fer i encara no ho he aconseguit (encara que estic a prop aconseguir-ho), és habilitar el mòdul psd per evitar els portscans, però fins i tot amb tot el que he après sobre aquesta eina, considero que ni tan sols he tractat una part superficial encara. 😉

    En fi, que en aquest món sempre cal estudiar.

  4.   Koratsuki va dir

    Bons punts Hugo, arxivat per al nostre glossari: D, com sempre, aprenent ...

    1.    Hugo va dir

      Per cert, ja vaig aconseguir que em funcionés el mòdul psd. El problema era que inicialment depenia d'una funcionalitat de l'nucli que va quedar obsoleta juntament amb patch-o-matic, per la qual cosa van treure dels mòduls integrats en netfilter per defecte. De manera que ja està a Debian per fer servir l'extensió psd, abans cal fer això:


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

      Després pot utilitzar normalment, segons les instruccions:

      man xtables-addons

      1.    allunyar va dir

        Hugo, perquè no publiques XNUMX iptables.sh amb els suggeriments teves per millorar l'script d'aquest post (que és bo) incloent psd

        Gràcias

  5.   nelson va dir

    Exelente article, exelente el iptables i excel·lent l'explicació de @hugo. Cada vegada estic més convençut que encara em falta muucho per aprendre.

  6.   Koratsuki va dir

    No ets tu sol, al meu almenys ... Em cal un milió ... 😀

  7.   Miguel Angel va dir

    Hola a tots, i gràcies per l'aportació, però la veritat estem desesperat no sabem que fer ja, i vam acudir a vostès per això de les iptables que sabem que sou experts en sistemes.
    Els comento sóc líder d'una comunitat d'Espanya de counter strike source i som unes de les poques que seguim amb prou feines dempeus, estem rebent a la màquina atacs ddos ​​constants i per intervals de temps altres atacs, el constant treu poc però lagea el servidor una mica però el que és de temps fa mes mal. La nostra màquina aquesta muntada en un centos 6.2
    i tenim el tcadmin per controlar els servidors. Vostès podrien fer-nos una confguracion que pogués aturar aquest tipus d'atacs encara que sigui una mica és que estem desesperats ja,
    i no sabem a qui recórrer sabem que són de dos botnet 3 casolana i una altra de pagament per temps i força. Portem així gairebé un any aguantant atacs brutals d'aquest tipus, si poguessin ajudar-nos estariem eternament agraïts perquè és insostenible ja, a mi m'encanta configurar servidors com hoobie, i no sóc un nen això els hi asseguro però això és molt per a mi. Si volen la meva TSXNUMX per parlar o qualsevol cosa m'encantaria que poguessin ajudar-nos així posteariamos aqui els resultats i tot el que fossin resolent per al bé de moltíssimes persones, seria el bloc més visitat de l'any això l'hi asseguro perquè és increhible com fastigueja aquests atacs ddos. Ja que nosaltres intentem configurar pel nostre compte i bloquegem l'accés a la màquina que vam haver de formatar des de la bios així que imaginense com estem.
    Els envio una cordial salutació. I les meves felicitacions pel bloc que falta li fa a molta gent un que estigués actualitzat com aquest. -Miguel Angel-

    1.    KZKG ^ Gaara va dir

      Hola què tal 🙂
      Escriu-me al meu email, t'ajudem amb molt de gust 😀 -» kzkggaara[@]desdelinux[.]net

  8.   ArthurShelby va dir

    Hola nois fins ara que estic chambeando ocupi aquest script, molt bo per cert ... només un dubte: ¿El mòdul «recent» no minva el rendiment?

    Salutacions - Gràcies / Qui com vostès?

  9.   Jose Tàpia va dir

    Excel·lent aportació meu amic, et pondre a les referències d'un vídeo tut que estem muntat, una abraçada des de Costa Rica

  10.   Cristian Ivori Reinoso va dir

    Hola,

    No puc fer servir l'script en diversos ports?
    Tinc un servidor deun joc i rebut atauqes tant a la web com als ports de servidor de el joc.

    Una salutació.