Un espacio para los entusiastas del web

16 com comentarios en total.
16 Mar 2009
11,855 Lecturas
Tags: Seguridad, Hosting, Aspectos técnicos, , , y 1 más.

Haz que tu servidor se defienda por si mismo contra ataques (D)DoS

monitorAllá afuera hay toda clase de bichos, y no necesariamente debe haber una razón (si es que pudiera existir alguna) para que cualquiera la tome contra tus servidores, incluso hasta un spam-bot podría saturar tu servidor, llegando a ser considerando un ataque de denegación de servicio (DoS).

Un usuario común y corriente con su navegador nunca abre tantas conexiones a la vez, ya que según el HTTP 1.1 deberían usar pocas conexiones persistentes para realizar todas las peticiones necesarias. El usuario puede modificar esto, elevando el número de conexiones permitido hacia un mismo host, pero creo que es muy seguro que ninguno abrirá más de 10 conexiones, y si lo hace lo único que conseguirá es hacer más bajo el rendimiento.

Sabiendo esto, cuando una IP abre demasiadas conexiones a la vez, se le puede considerar como un atacante. Es precisamente esto lo que vigila DoS-Deflate, un script que nos ayuda a monitorear la cantidad de conexiones de cada IP hacia nuestro servidor. DoS-Deflate bloquea (durante un tiempo definido) las IPs que tengan más de cierto limite de conexiones, usando APF o iptables.

Para instalarlo en nuestro servidor es bastante sencillo, su desarrollador nos brinda un script para hacerlo:

wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh

Y otro script más para desinstalarlo, para cuando ya no lo necesites más:

wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
chmod 0700 uninstall.ddos
./uninstall.ddos

Una vez instalado DoS-Deflate, puedes editar la configuración que se encuentra en /usr/local/ddos/ddos.conf:

  • FREQ=1 . Cada cuantos minutos correr el script. Viene programado para correr cada minuto, lo que me parece bien, considerando que de un minuto a otro podrían saturarte mucho el servidor.
  • NO_OF_CONNECTIONS=150 . Límite de conexiones, 150 en este caso. Si una IP hace más conexiones que este límite, se le bloqueará por el tiempo que se especifica en BAN_PERIOD.
  • APF_BAN=1 . Si es igual a uno (1) se usará APF, sino lo tienes instalado, cámbialo por cero (0) para usar iptables.
  • BAN_PERIOD=600. Cantidad de segundos en que la IP estará bloqueada. Son 10 en la configuración predeterminada, yo suelo cambiarlo por una hora (3600 segundos).

Una vez tengas funcionando el script, este te enviará un mail si ha bloqueado una ip:

Banned the following ip addresses on Wed Mar 11 15:59:01 EDT 2009

255.205.100.246 with 831 connections
255.83.19.226 with 722 connections
255.192.48.195 with 690 connections
255.96.188.13 with 615 connections
255.160.12.34 with 583 connections
255.134.0.90 with 575 connections
255.228.127.16 with 514 connections
255.158.132.60 with 467 connections
255.110.64.91 with 446 connections
255.141.103.43 with 393 connections
255.136.92.12 with 346 connections
255.149.28.15 with 333 connections
255.162.173.58 with 299 connections
255.100.28.124 with 295 connections
255.123.19.241 with 269 connections
255.215.39.16 with 249 connections
255.190.149.104 with 239 connections
255.133.88.90 with 202 connections
255.123.216.254 with 177 connections

Si esperas que alguna IP conocida realice muchas conexiones, puedes indicarlo en /usr/local/ddos/ignore.ip.list para que no sea bloqueada.

Por supuesto, DoS-Deflate es solo una forma de protegerte contra los ataques DoS, hay muchas más formas de detectarlos y prevenir que boten tu servidor (lectura recomendada). Aún siendo un script bastante sencillo, vale la pena tenerlo instalado en el servidor, y el rendimiento en general no se ve afectado.

Imagen: GNOME Desktop Icons.

PD: Gracias a Freddie por recomendarnos este script.

Javier ArocheJavier Aroche para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. Joaquín

    Muy bueno el script, pero… de acuerdo a lo que entiendo, ¿bloquearía también a aquellos usuarios de una red que comparten una puerta de enlace con una dirección pública?

    Responder
  2. Joaquín

    Ahora que re leo lo anterior me parece que no queda muy claro. La situación sería por ejemplo en donde vivo. En ese lugar hay 40 departamentos en los cuales hay gente. Sin embargo internet es provisto por una conexión de alta velocidad para todos. Es decir, todos salimos con la misma ip pública. Sé que es poco probable que todos entremos al mismo servidor, pero podría suceder… no??. En ese caso, ¿seríamos todos bloqueados?.

    Disculpen la molestia!.

    Responder
  3. Santiago

    Exacto… en una RED en la que todos salen por la misma IP y tienen configurado el outlook para revisar el correo en el pop3 cada 5 minutos… es muy probable que se genere más de 10 conexiones…

    sin embargo… el script deberia tener una lista de acceso VIP en el cual se agregaria a ese cliente…

    Responder
  4. Predicatore

    Ya lo pone en la parte de abajo:

    “Si esperas que alguna IP conocida realice muchas conexiones, puedes indicarlo en /usr/local/ddos/ignore.ip.list para que no sea bloqueada.”

    Así esa ip no pasará por el filtro y podrá hacer todas las conexiones que quiera.

    Responder
  5. @Joaquín si, eso es un problema. Si en el dado caso eres un sitio muy popular en determinado país, podría darse el caso que con un Proveedor, que haga tal nivel de sobre venta/overselling, que llegaras a tener muchas conexiones desde una misma IP.

    El script viene predeterminado a 150 conexiones como límite, lo puedes aumentar, aunque pienso que aun así es poco probable que llegues a tal nivel, con usuarios legítimos en una red super compartida.

    @Santiago si es alguna empresa que hospeda su correo ese mismo servidor, podría contratar un IP fijo con su Proveedor y agregarla a la lista blanca; o bien podrían usar Google Apps, que a la larga es más confiable que el mismo hosting.

    Saludos

    Responder
  6. Eigiem

    Una información muy interesante, gracias.

    Responder
  7. Creo haber utilizado esta herramienta…
    pero hoy en dia los Ddos ya no son de 150 conexiones por IP!
    me susedio que tenia 40-30 conexiones de IP, el server se congestiona si un buen numero de IP’s causa peticiones, en mi caso eran como 30mil ip’s
    pero la herramienta esta bien para evitar bots molestos!

    Responder
  8. Una duda. El script una vez instalado ¿Se ejecuta solo o hay que ponerlo en el cron?

    Responder
  9. Julian

    @elavdeveloper, el script en el proceso de instalación, incluye la configuración del cron. El cron se encuentra en la ruta “/etc/cron.d/ddos.cron”.

    Saludos.-

    Responder
  10. Hola, tengo dudas de como instalar el script. Ya baje el archivo y lo subi al servidory lo ejecute, pero no me aparece ninguna ventana de aviso.
    Les escribo pq ayer 60 bots jodiendo. Si alguien puede dar una mando agradecido.

    Responder
  11. lucas

    hola disculpa como instalo el script se me hace muy interesante el post y gracias por la informacion!!!

    Responder
  12. Carlos

    Hola,

    Estoy instalando el script y me encuentro con la duda de si se pueden utilizar comodines en el archivo que incluye las ips permitidas, por ejemplo así:

    66.249.65.*

    Muchas gracias y felicidades por el artículo.

    Responder
  13. marok

    soy nuevo en esta area, me gustaria saber como ejecuto el script, no hay un daemon? para iniciar el servicio o algo por el estilo??

    Responder

Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.



Acerca de
Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web