Después de fijar limit_req
y limit_conn
en nginx ¿los has habilitado en el virtualhost? Como en:
server {
# ...
location / {
limit_req zone=one;
limit_conn addr 10;
# ...
}
}
Además, fail2ban es un analizador de registros para la creación automática de reglas dinámicas en el cortafuegos (iptables). Puedes crear un filtro y una acción en fail2ban que filtre la IP de origen de los 404 y los bloquee después de un número de intentos, o puedes filtrar los logs limit_req y limit_conn para que puedas banear esas IPs en su lugar (bloquear la IP de los clientes 404 podría causar algunos bloqueos no deseados).
vim /etc/fail2ban/jail.d/nginx.conf
Entendido:
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10
findtime
es el tiempo en segundos para las ocurrencias en maxretry
En este caso, se activaría tras 10 eventos en 10 minutos (600 segundos).
bantime
es el momento de poner la IP en la lista negra del cortafuegos. También en segundos. En este caso bloquearía la IP infractora durante 2 horas (7200 segundos).
logpath
es el registro de errores que configuró para su virtualhost en nginx .
Asegúrese de que jail.conf
incluye el jail.d/*.conf
y reinicie el servicio:
service fail2ban restart
Esto debería ayudarle a evitar ataques DDoS.
Otra opción que vale la pena considerar es utilizar una CDN, como se indica en el comentario anterior. Cloudflare tiene una buena versión gratuita que puede ayudar mucho, tiene un Web Application Firewall que bloquea algunos de los malos bots y esas cosas. Las versiones pro/business tienen más opciones, pero cuestan dinero.