Lassen Sie den Nginx-Server langsam reagieren

8

Ich habe also einen Spammer auf meiner Website. Ich könnte seine IP mit 'Verweigern' blockieren, aber dann ändert er einfach seine IP und ich muss weiter Katz und Maus mit ihm spielen.

Stattdessen bin ich gespannt, ob es eine Möglichkeit gibt, nginx so zu konfigurieren, dass es langsamer auf seine IP reagiert.

Auf diese Weise entscheidet er vielleicht nur, dass die Website nicht richtig funktioniert, und lässt mich in Ruhe.

Vielen Dank

Vinhboy
quelle

Antworten:

7

Mit der Nginx-Direktive limit_ratekönnen Sie die Geschwindigkeit angeben, mit der Sie Grenzwertantworten bewerten möchten, z

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

Die Nginx-Dokumentation finden Sie hier . (Aus der Dokumentation geht hervor, dass Ihr Backend möglicherweise die Entscheidung trifft und Nginx auffordert, den Client zu bewerten.)

Wie Sie diesen $slowVariablensatz erhalten, hängt von Ihrer Konfiguration ab. Am einfachsten wäre es, es über geoMapping einzustellen :

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

"Geo" -Mapping ist eine Abhängigkeit von $slowder Client-IP-Adresse. Es ist standardmäßig 0 und 1, wenn sich eine Client-IP-Adresse im 1.2.3.0/24Subnetz befindet. Siehe Nginx-Dokumentation zu "Geo" hier

Die Verwendung von "fail2ban" ist eine vernünftige Weiterentwicklung dieser gesamten Lösung. Sie können "fail2ban" verwenden, um ungewöhnliche Aktivitäten automatisch zu erkennen und IPs für Nginx zu sammeln und dann Nginx neu zu laden, damit Listen von IP-Adressen erneut gelesen werden, die verlangsamt und / oder blockiert werden müssen.

Alexander Azarov
quelle
5

Wenn Sie den beleidigenden Benutzer dazu verleiten möchten, zu glauben, dass er von Ihnen immer noch unbemerkt bleibt, können Sie das Anforderungslimitmodul von nginx ( http://wiki.nginx.org/HttpLimitReqModule ) verwenden.

Definieren Sie zunächst eine Anforderungslimitzone:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

Diese Zone verwendet die IP-Adresse des Täters, um Anfragen zu identifizieren und auf 30 pro Minute (1/2 Sek.) Zu beschränken. Bitte beachten Sie, dass die Speichergröße der Zone auf 1 MiB festgelegt ist, was bedeutet, dass 1 MiB / 64 Byte pro Anforderungs-Bucket = 16384 Spammer-Adressen verarbeitet werden können (was in unserem Fall möglicherweise ein Overkill ist). Passen Sie sie gegebenenfalls an.

Als nächstes definieren wir die Richtlinie, die den Täter tatsächlich durch den Begrenzer leitet, indem wir einen (leider bösen) Fall verwenden:

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

Sie können die Früchte Ihrer Arbeit im Zugriffsprotokoll des Servers sehen.

Beachten Sie, dass dieser Hack nicht gut skaliert werden kann, da Sie die Konfigurationsdatei jedes Mal aktualisieren müssen, wenn der Täter die IP ändert (geschweige denn mehr IPs enthalten, was in bestimmten Fällen mehr bedeutet), aber es funktioniert.

Panagiotis PJ Papadomitsos
quelle
1
Sie können meine Antwort auch mit dem Geoblock von Alexander Azarov kombinieren und skalierbarer machen!
Panagiotis PJ Papadomitsos
2

Der beste Weg, um mit diesem Spammer umzugehen, ist die ordnungsgemäße Installation und Konfiguration von fail2ban. Fail2ban durchsucht Muster in Protokolldateien und blockiert alle IP-Adressen, die Ihre Site als Spam versenden. Natürlich müssen Sie es so konfigurieren, dass es nach dem richtigen Muster sucht.

B14D3
quelle