Haz que tu servidor se defienda por si mismo contra ataques (D)DoS
Allá 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 enBAN_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.
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?
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!.
[…] Haz que tu servidor se defienda por si mismo contra ataques (D)DoSwww.maestrosdelweb.com/editorial/haz-que-tu-servidor-se-defi… por shephard hace pocos segundos […]
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…
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.
@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
Una información muy interesante, gracias.
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!
[…] pelea de CMS: WP vs Joomla vs Drupal (perdió WP, sniff); y finalmente, una buena guía para defender nuestros servidores de ataques de […]
Una duda. El script una vez instalado ¿Se ejecuta solo o hay que ponerlo en el cron?
[…] mas de uno aqui tiene algun sitio web. Maestros del Web nos explica en este sencillo post como hacer que nuestro servidor se proteja solo de ataques DoS. Interesante! 0 […]
@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.-
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.
hola disculpa como instalo el script se me hace muy interesante el post y gracias por la informacion!!!
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.
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??