sobrecarga de servidor (ataque?) (ayuda)

imported_Franco Seguir

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Feb 2010
Mensajes
19
Hola cordial saludo a todos

Vengo a cometarles un problema muy grande que tengo con mi web, resulta que hace un momento todo iba bien cuando de repente resutaron mas de 8 mil personas conectadas, cosa que mi web aun no ha recibido somos demasiado nuevas y lo maximo conseguido eran 40 personas a la vez.



Tengo gente inescrupulosa detras de mi web, es un concepto de web que en mi ciudad es demasiado perseguida por personajes que ya tiene establecidas las suyas y conocen del tema en realidad yo no soy un gran mago para esto , pero entre un amigo y yo nos defendemos, y recurrimos a ustedes por que veo que son gente demasiado entendida del tema y quisiera como unos tips, trucos como le quieran llamar de como puedo darle mas seguridad a mi servidorcomo puedo hacer que no sea tan facil a la hora de ser vulnerado, no se si sera posible pero les agradeceria toda la ayuda que me pudieran brindar.

Ver el archivo adjunto 3071 esta captura la alcance a hacer cuando el nivel de visitas fue bajando se demoro cerca de una hora en volver a la normalidad , la ip que aparecia decia lo siguiente:
hosted-by.leaseweb.com.

Muchas gracias a todos quienes nos puedan colaborar.
 

Daniel B.

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
25 Abr 2009
Mensajes
188
No creo que te estén atacando,
¿Tu sitio web se vio lento en la avalancha de visitas?. Lo primero que podrías hacer es denegar el acceso a la IP "atacante".

Verifica las conexiones entrantes al servidor, y a qué servicios se conectan:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

netstat -np | grep SYN_RECV | awk '{print $5}' | cut -d. -f1-4 | cut -d: -f1
| sort -n | uniq -c | sort -n

Ejemplo:
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
tcp 0 0 192.168.0.3:80 192.168.0.5:60946 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60763 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60955 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60765 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60961 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60923 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61336 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61011 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60911 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60758 SYN_RECV

Donde la IP 192.168.0.3 es la IP del servidor y 192.168.0.5 la del atacante, claramente es un SYN Flooding al servidor de apache que conecta por el puerto 80, también se llama SYN_RECV.

Puedes mirar los logs del mod_evasive.

Deteniendo el ataque
Hay varias formas de hacerlo, te recopilaré algunas:
Confirma que el uso de CPU no es muy alto y tienes muchos procesos corriendo en apache
Comandos como Uptime - "w":
Server@work >w
12:00:36 up 2 day, 15:28, 6 users, load average: 0.60, 0.60, 0.47

Cuenta los procesos HTTP, para hacer una comparación.
[root@server root]# ps -aux|grep -i HTTP|wc -l
22

Determinar la red atacante
Las conexiones a un servidor oscilan entre 100 más o menos, en un ataque estas obviamente se incrementan, es en ese momento cuando debes saber qué redes están lanzando ese ataque, como serán muchas máquinas esclavas, lo que más importa es la red, para poder bloquearla, ejecuta este comando para ver las conexiones:
bash# netstat -lpn|grep :80|awk '{print $5}'|sort

Si vez muchas conexiones de una IP entrante, probablemente sea esa la red atacante, claro, estamos más o menos repitiendo el primer proceso, pero esto en tiempo real.

Parar el ataque

1. Intenta usar 'iptables' o 'apf'
iptables -A INPUT -s <Source IP> -j DROP

Pero mira el syslog, porque hay falsos positivos, que son ips que no hacen flood, para prevenirlas con mod_evasive:
<IfModule mod_evasive.c>
# añadir estas líneas que corresponden a rangos de los bots de google
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
</IfModule>

Recuerda darle buen funcionamiento al mod_evasive:
MaxRequestsPerChild 0, ponerle un valor alto como MaxRequestsPerChild 10000, no Ilimitado!.
Acá hay ejemplos de configuración: Mod_evasive | eth0.us - Server admin info for cPanel, plesk, ensim and linux!


Si usas apf entonces añade esas direcciones a /etc/apf/deny_hosts.rules, es una estrategia para bloquear la red, sin embargo, debes contactar al datacenter, tu proveedor, informales de la situación.

Instala Portsentry para evitar los escaneos al host.

2. Con mod_evasive.
Esto es más de prevención, añadiendo esto, hará que 60 conexiones por 3/2 segundos es ya alarma de ataque:
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 60
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 900
</IfModule>

<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 1
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
</IfModule>

4. Usando firewalls dinámicos tcplimit, ipdrop, ipblock...

5. Usando reglas del iptables
# 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).(elhacker)

Hay muchas formas más!.

Prevenir el ataque

Bueno, no es mucho que decir, no es posible rehusar totalmente un ataque DDoS/DoS, es posible prevenirlo, y en general estar muy atento, ya sea que tu red termine de esclava o tu máquina atacada, hay que saber defenderse y tener paciencia.

  • Instalar un firewall que tenga filtros de seguridad. Cómo APF Projects | R-fx Networks
  • Usar un HIDS, Sistema de detección de intrusos en un Host, para alertar de escaneos a puertos y posibles intentos de hackeo.

Pues de pronto me dedique a hacer una mega-tutorial recopilando toda la documentación respecto a ataques a servidores web, ya que es un tema interesante y de mucha ayuda.

Byebye.
 

imported_Franco

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Feb 2010
Mensajes
19
wow!, no sabes cuanto te agradezco , me pondre a trabajar por que en este instante estoy siendo atacado , normalmente pasa de 2 a 3 veces por dia, MAGISTRAL explicacion. GRACIAS, en cuanto termine les aviso como me fue .
 

imported_Ryuk

Dseda
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
28 Feb 2009
Mensajes
1.138
Perdon por off-topic pero Daniel te mereces un aplauso!
186968aplausos.gif


Impecable! ;)
 

Eduardo Leon

Dseda
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
11 Oct 2009
Mensajes
1.186
Por favor, ten en cuenta 📝 que si deseas hacer un trato 🤝 con este usuario, está baneado 🔒.
haha muy bueno el tutorial.

aunque los ataques son por inyecciones sql .

aunk no hay muchas, pero dañan un tanto a nuestro sistema .
 
Arriba