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.