Intentando detener un ataque DDoS

Iniciado por el-brujo, 25 Agosto 2006, 11:12 AM

0 Miembros y 1 Visitante están viendo este tema.

xDie

Los paquetes llegan al servidor igual, estas en la misma
Licence to kill!

l337*

CitarEjemplo de ataque SYN_RECV o SYN Flooding al Apache (puerto 80).

192.168.0.3 es la ip del servidor apache y 192.168.0.105 es la ip del "atacante".


Código:
tcp        0      0 192.168.0.3:80          192.168.0.5:60808     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60761     SYN_RECV   
tcp        0      0 192.168.0.3:80          192.168.0.5:60876     SYN_RECV 
.
.
.

la ip del atacante seria 192.168.0.5 que no?

Dr.SysCrack

Exelente manual muy completo y es el primer foro que veo un manual haci muy bien explicado

sa1u2
Clickea donde dice Revolution Hack

Artikbot

#23
Felicidades, el-brujo, un tuto de putísima madre  :D :D


Salu2!



Monto ordenadores a medida, me ajusto a todo tipo de presupuestos. Contáctame para más información.
Sólo para España peninsular y Baleares

Sk9ITk5Z

Pues despues de tanto tiempo y aun sirve el manual te sacaste undiez el-brujo...
Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.

ViperDoom

muy buen material ...
Una dudita: Un amigo tiene un server de mu, y es muy comun que jugadores de otros mu servers traten de tumbar los servers de la competencia por medio de ataques DoS, con el programa turbina; y los ataques se realizan generalmente al puerto 44405. Como puedo detectar y detener un ataque en un windows server?
desde ya muchaas gracias!
"De todo lo que he perdido, lo que mas extraño es mi mente" ~ Ozzy Osbourne


Artikbot

con TurbinaS? Pues estudia el patrón de ataque (fácil de econtrar) y crea una regla que filtre todas las conexiones de ese tipo.



Monto ordenadores a medida, me ajusto a todo tipo de presupuestos. Contáctame para más información.
Sólo para España peninsular y Baleares

juato4

#27
Hola!.

La verdad me está ayudando muchisimo tu post. la verdad es que no se si estoy recibiendo un DDOS, pero supongo que si.

Me escanean con el famoso DFIND, hasta que el apache supera el MaxConnections... el problema que tengo es que la version de iptables que tengo es vieja y no puedo usar algunos comandos, actualizar demandaria tambien la kernel a lo que no se puede actualmente.

La verdad no se que hacer, porque banneo ips con iptables, he usado el modulo mod_limitipconn.c pero no se si está funcionando, sinceramente.

ahora, cuando le doy al comando que tu expones:

miservidor:/etc/apache2# netstat -an | grep :80 | awk '{ print $5 }' | awk -F: '{ print $1 }' | sort | uniq -c | sort -n
     1 200.119.153.3
     2 190.67.192.160
     3 200.80.241.2
     4 189.180.73.116
   150
]

el numero de conexiones a veces no concuerda con las conexiones por IP, a veces el numero que ahora dice 150, está en 600 y solo hay 2 o 3 ip conectadas con 3 conexiones abiertas.

que puede ser?.

Saludos y espero que sepas que puede estar pasando!.

tecasoft

wenas gente, queria saber de este codigo que me explicarán un poco pork hay opciones que no termino de entender sobre todo el  modulo recent como hago esto correctamente. ademas tendria que escribir todo el codigo tal cual¿?

y que conflictos puede haber con esto¿? ya que estoy montando (debian), un apache,vsftpd,ssh,sendmail

Citar# todo el trafico syn
-P INPUT DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A INPUT -m state --state INVALID -j DROP
-P OUTPUT DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A OUTPUT -m state --state INVALID -j DROP
-P FORWARD DROP
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
-A FORWARD -m state --state INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A FORWARD -i lo -o lo -j ACCEPT

# sube las cargas pero muchos wwww buena señal
-A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable

# la que mejor va
-N syn-flood
-A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
-A syn-flood -j LOG --log-prefix "SYN flood: "
-A syn-flood -j DROP

# igual que el de arriba pero muy bestia
-N syn-flood
-A INPUT -i eth0:2 -p tcp --syn -j syn-flood
-A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
-A syn-flood -j DROP

-A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit
1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit
--limit 1/sec -j ACCEPT

# no es muy efectivo
-A INPUT -s 0/0 -p tcp --syn --source-port 1000:5000
--destination-port 80 -j DROP

# no es muy efectivo
-A INPUT -p tcp -m tcp --dport 80 --sport 1000:5000 --tcp-flags SYN SYN -j DROP

# Descartar paquetes mal formados

-N PKT_FAKE
-A PKT_FAKE -m state --state INVALID -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
-A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
-A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
-A PKT_FAKE -f -j DROP
-A PKT_FAKE -j RETURN

# syn-flood
-N syn-flood
-A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
-A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
-A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN
-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
-A syn-flood -j DROP

# By pepel. Requiere módulo "recent"
-A INPUT -p tcp --dport 80 -m state --state NEW -m recent   --set
-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.


iptables -I INPUT -p tcp –syn -m recent –set
iptables -I INPUT -p tcp –syn -m recent –update –seconds 10 –hitcount 30 -j DROP

Lo que hace es contar el número de paquetes SYN (inicio de conexión TCP) para
cada dirección IP en los últimos 10 segundos. Si llega a 30 descarta ese paquete por
lo que no se establecerá la conexión (el TCP volverá a intentar varias veces,
cuando baje del límite podrá establecerse).
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

tecasoft

este es el script que voy probando pero termina de funcionar, si quito la ultima linea no funciona. asi que no se que e escrito mal, os lo agradezco, es que me estoy volviendo loco, gracias


#!/bin/sh
## SCRIPT DE IPTABLES v1.4.3.2
## Fecha del script 22/04/2010
## Hecho por Sergio para los server

###########################
# Declaracion de variables
###########################

INORIGEN="0.0.0.0/0.0.0.0"
OUTORIGEN="0.0.0.0/0.0.0.0"

INDESTINO="0.0.0.0/0.0.0.0"
OUTDESTINO="0.0.0.0/0.0.0.0"

IFACE1="lo"
IFACE2="eth0"

echo "Aplicando reglas de Firewall"

## FLUSH de reglas

iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Todo el trafico syn

iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
iptables -A INPUT -m state --state INVALID -j DROP
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -i lo -o lo -j ACCEPT

## sube las cargas pero muchos www buena señal

#iptables -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable

## la que mejor va

iptables -N syn-flood
iptables -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
iptables -A syn-flood -j DROP

## Descartar paquetes mal formados

iptables -N PKT_FAKE
iptables -A PKT_FAKE -m state --state INVALID -j DROP
iptables -A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
iptables -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
iptables -A PKT_FAKE -f -j DROP
iptables -A PKT_FAKE -j RETURN

## Requiere modulo "recent"

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP

## Contar paquetes syn

iptables -I INPUT -p tcp --syn -m recent --set
iptables -I INPUT -p tcp --syn -m recent --update --seconds 10 --hitcount 30 -j DROP

## Empezamos a filtrar

# Conexiones SSH - En el puerto 22,registro,bloquear 1º intento de conexion rechazado(scanner puerto),3 conexiones por minuto(ataques diccionario)

iptables -A INPUT -s $INORIGEN -i $IFACE2 -p tcp --sport 30000:65535 --dport 22 -m state --state NEW -j LOG --log-prefix "Conexion ssh: "
iptables -A INPUT -s $INORIGEN -i $IFACE2 -p tcp --sport 30000:65535 --dport 22 -m limit --limit 1/minute -m state --state NEW -j DROP
iptables -A INPUT -s $INORIGEN -i $IFACE2 -p tcp --sport 30000:65535 --dport 22 -m limit --limit 3/minute -m state --state NEW -j ACCEPT

# Conexiones DNS

iptables -A INPUT -s $INORIGEN -d $INDESTINO -i $IFACE2 -p tcp --sport 53 -j ACCEPT && echo "regla-20 ok"
iptables -A INPUT -s $INORIGEN -d $INDESTINO -i $IFACE2 -p udp --sport 53 -j ACCEPT && echo "regla-21 ok"
iptables -A OUTPUT -s $OUTORIGEN -d $OUTDESTINO -o $IFACE2 -p tcp --dport 53 -j ACCEPT && echo "regla-22 ok"
iptables -A OUTPUT -s $OUTORIGEN -d $OUTDESTINO -o $IFACE2 -p udp --dport 53 -j ACCEPT && echo "regla-23 ok"

##
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits