Tengo algunas reglas de "denegación" antes de la configuración del límite de solicitudes. Si un usuario bloqueado (por las reglas de denegación) está abandonando el sitio, aún activa el límite de solicitudes y, por lo tanto, crea miles de entradas de registro. ¿Por qué? Esperaba que no pasara las reglas de denegación.
include /etc/nginx/blacklist.conf;
limit_req zone=limit burst=3 nodelay;
El registro muestra un error prohibido y, justo después, cientos de errores de limitación de solicitudes. Eso se repite una y otra vez.
Respuesta1
Cuando nginx procesa una solicitud, pasa porvarias fases. Entre ellos :preaccesoyaccesoetapas.
PreaccesoNormalmente es donde limit_req
funciona, mientras que el acceso es donde funcionan las directivas allow
/ . deny
Esto significa que se realiza la limitación de velocidad.antesFiltrado de IP si ambas directivas se declaran en el mismo contexto.
Entonces, si su voluntad es intentar que algún proceso similar a fail2ban (dado el código de retorno 444 de su otra pregunta) funcione directamente en nginx usando directivas nativas, eso simplemente no es posible por naturaleza.
Respuesta2
Este problema es un poco antiguo, pero para cualquiera que tenga este problema, la mejor solución que encontré para este caso es usar a map
con an if
en lugar de las deny
reglas (aunque trato de evitar usarlo ifs
en nginx), porque me gustaxavier lucasdicho:
La limitación de velocidad se realiza antes del filtrado de IP.
Puedes cambiar tu blacklist.conf
archivo desde:
deny 1.2.3.4;
a:
1.2.3.4 0;
Crea un archivo whitelist.conf
:
if ( $whitelist = 0 ) {
return 403;
}
Luego, en nginx.conf
, incluya un mapa que incluya en la lista blanca todas las IP, excepto las de blacklist.conf
:
http {
geo $whitelist {
/etc/nginx/blacklist.conf;
default 1;
}
...
}
Finalmente, también en nginx.conf
, agregue antes de cada directiva del servidor el whitelist.conf
archivo:
server {
server_name ...;
listen 443 ssl;
include /etc/nginx/whitelist.conf;
ssl_certificate /etc/ssl/bundle.crt;
ssl_certificate_key /etc/ssl/server.key;
...
}
...
Las solicitudes de las ips incluidas en la lista negra serán devueltas inmediatamente.y no se registrará en el archivo de registros de errores.
También puede evitar que las solicitudes de esas ips se registren en el archivo de registros de acceso con:
access_log /path/to/file if=$whitelist;