nGinX Forbidden todavía activa el límite de solicitudes

nGinX Forbidden todavía activa el límite de solicitudes

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_reqfunciona, mientras que el acceso es donde funcionan las directivas allow/ . denyEsto 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 mapcon an ifen lugar de las denyreglas (aunque trato de evitar usarlo ifsen nginx), porque me gustaxavier lucasdicho:

La limitación de velocidad se realiza antes del filtrado de IP.

Puedes cambiar tu blacklist.confarchivo 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.confarchivo:

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; 

información relacionada