nGinX Forbidden löst immer noch Anforderungslimit aus

nGinX Forbidden löst immer noch Anforderungslimit aus

Ich habe einige „Ablehnungs“-Regeln vor der Konfiguration des Anforderungslimits. Wenn ein (durch die Ablehnungsregeln) blockierter Benutzer die Site mit DDoS-Angriffen überlastet, löst er trotzdem das Anforderungslimit aus und erstellt daher Tausende von Protokolleinträgen. Warum? Ich hatte erwartet, dass die Ablehnungsregeln nicht überschritten werden.

    include        /etc/nginx/blacklist.conf;
    limit_req zone=limit burst=3 nodelay;

Das Protokoll zeigt einen verbotenen Fehler und direkt danach Hunderte von Anforderungsbegrenzungsfehlern. Das wiederholt sich immer wieder.

Antwort1

Wenn nginx eine Anfrage verarbeitet, durchläuft esmehrere Phasen. Darunter :VorabzugriffUndZugangPhasen. Vorabzugriffist normalerweise dort, wo limit_reqfunktioniert, während access dort ist, wo die allow/ deny-Anweisungen funktionieren. Das bedeutet, dass die Ratenbegrenzung durchgeführt wirdVorIP-Filterung, wenn beide Anweisungen im selben Kontext deklariert werden.

Wenn Sie also versuchen möchten, einen Fail2ban-ähnlichen Prozess (angesichts des Rückgabecodes 444 Ihrer anderen Frage) mithilfe nativer Anweisungen direkt in Nginx zum Laufen zu bringen, ist dies von Natur aus einfach nicht möglich.

Antwort2

Dieses Problem ist schon etwas älter, aber für alle, die dieses Problem haben, ist die beste Lösung, die ich in diesem Fall gefunden habe, die Verwendung von a mapmit an ifanstelle von denyrules (obwohl ich versuche, die Verwendung ifsin nginx zu vermeiden), weil wieXavier Lucassagte:

Die Ratenbegrenzung erfolgt vor der IP-Filterung

Sie können Ihre Datei ändern blacklist.confvon:

deny 1.2.3.4;

Zu:

1.2.3.4 0;

Erstellen Sie eine Datei whitelist.conf:

if ( $whitelist = 0 ) {
    return 403;
}

Fügen Sie dann in nginx.confeine Karte ein, die alle IPs außer denen in auf die Whitelist setzt blacklist.conf:

http {
    geo $whitelist {
        /etc/nginx/blacklist.conf;
        default 1;
    }

    ...
}

Fügen Sie abschließend auch in nginx.confvor jeder Serverdirektive die whitelist.confDatei hinzu:

server {
    server_name ...;
    listen 443 ssl;

    include /etc/nginx/whitelist.conf;

    ssl_certificate       /etc/ssl/bundle.crt;
    ssl_certificate_key   /etc/ssl/server.key;

    ...
}

...

Die Anfragen von den auf der schwarzen Liste stehenden IPs werden sofort beantwortet.und wird nicht in der Fehlerprotokolldatei protokolliert.

Sie können die Protokollierung der Anforderungen dieser IP-Adressen in der Zugriffsprotokolldatei auch folgendermaßen verhindern:

access_log /path/to/file if=$whitelist; 

verwandte Informationen