Como parar ataques DOS al servidor web

El título más bien debería decir: Como pararlos parcialmente, ya que como sea un dDOS en condiciones desde varias IPs, es complicado de parar sin muchos recursos.

Este caso me ha pasado recientemente, una persona se puso en contacto conmigo porque estaba recibiendo ataques de una sóla IP que conectaba demasiadas veces contra su servidor apache (en el puerto 80 pero usando tantas conexiones que le chupaba todo el ancho de banda).

La solución sencilla, cuando os pase algo del estilo, pasa por poner una pequeña regla en el firewall que impida a esa IP ver vuestro servidor, de forma que piense que ha conseguido su objetivo: tirarnos el servidor, pero que otros puedan seguir viendo el servidor.

Hacer esto resulta trivial pero lo pongo por si alguno no sabe manejar bien el iptables, las siguientes instrucciones deben ejecutarse como root y no debemos tener otras configuraciones que anulen estas (si andáis haciendo cosas raras con vuestro firewall debéis buscar y entender lo que hacéis para poder utilizar esto).

iptables -I INPUT -p tcp –dport 80 -s LaIPqueOsAtaca -j DROP

Con esto conseguimos que esa IP no pueda acceder a nuestro puerto 80 y por tanto no pueda abrir conexiones, en realidad lo que ocurre es que cuando llegue el primer paquete que pertenezca a esa IP que intente abrir conexión con el puerto 80, nuestro servidor pasará de él, impidiendo así que pueda realizarse la conexión.

Algo un poco más heavy pasa por hacer en su lugar

 iptables -I INPUT -s LaIPqueOsAtaca -j DROP
iptables -I OUTPUT -s LaIPqueOsAtaca -j DROP

Esta línea es para descartar cualquier paquete que venga de esa IP o que se dirija hacia esa IP, de modo que a esa IP le parecerá que nuestro ordenador está desconectado de internet porque no obtendrá ni siquiera un mensaje REJECT o DENY cantando que estamos encendidos pero que no le damos acceso al puerto.

Alguno dirá ¿por qué poner también OUTPUT?. Sencillo, para no darle pistas de nada en absoluto y si le estábamos enviando algo que pare inmediatamente, en realidad se podría obviar, pero tampoco sobrecarga tanto el firewall y siempre está bien.

Nota: Esto no previene de ataques que nos inunden a paquetes inválidos o a ataques que consuman nuestro ancho de banda porque vengan de muchos hosts con más ancho de banda que el nuestro.

Siempre es recomendable ante un ataque deshabilitar el PING, y tomar otras medidas como avisar a nuestro ISP para que tome también sus propias medidas, investigar la IP, avisar a los administradores, etc pero vamos, cualquiera que tenga un servidor en casa y le hagan un ataque de tipo dDOS está realmente fastidiado.

Por si a alguien le interesa, para deshabilitar el ping:

iptables -A INPUT -p icmp –icmp-type ping -j DROP

ó bien de forma más efectiva:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Espero que este artículo pueda ayudar a alguien.