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_req
funktioniert, 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 map
mit an if
anstelle von deny
rules (obwohl ich versuche, die Verwendung ifs
in nginx zu vermeiden), weil wieXavier Lucassagte:
Die Ratenbegrenzung erfolgt vor der IP-Filterung
Sie können Ihre Datei ändern blacklist.conf
von:
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.conf
eine 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.conf
vor jeder Serverdirektive die whitelist.conf
Datei 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;