Bloquear con iptables las IP que están atacando una web

Si estás recibiendo un ataque desde unas cuantas IP que te están cargando el tráfico en un servidor web, en esta entrada te explico cómo solucionarlo. Este ejemplo está descrito para NGINX, pero llevarlo a cabo en Apache o en otros servidores es muy similar, solo cambia la ruta de los logs.

Lo primero que tienes que hacer es ver qué archivos de log de NGINX son los más grandes, ya que esto probablemente te va a indicar qué sitios (Server Block en NGINX, Virtual Host en Apache) están recibiendo más visitas. Esto lo compruebas con los siguientes comandos:

cd /var/log/nginx
ls -laSh | head -n 10

El último comando te devuelve los 10 archivos más grandes.

A continuación, en cada uno de esos archivos tienes que obtener las direcciones IP con más apariciones (cambia midominio.com.access.log por tu archivo):

grep -o "[0-9]+.[0-9]+.[0-9]+.[0-9]+" midominio.com.access.log | sort | uniq -c | sort -n

La salida es del estilo

12400 1.2.109.02
15591 1.16.15.86
17504 11.16.8.3

Donde la primera cifra es el número de peticiones hechas a la web y la segunda es la dirección IP.

Aquí tienes que ver si son cifras normales o muy altas, como en este ejemplo.

Solo queda filtrar esas IP con iptables:

iptables -A INPUT -s direccion-ip -j DROP

Hacerlo con todos los archivos de log

Si quieres hacerlo con todos los archivos de acceso, puedes usar el siguiente comando para ver las IP con mayor número de conexiones:

more /var/log/nginx/*access.log /var/log/nginx/*access.log.[0-9] | awk '{print $1}' | sort | uniq -c | sort -n

Más información:

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.