Wie kann ich mit Apache eine Ratenbegrenzung implementieren? (Anfragen pro Sekunde)
84
Welche Techniken und / oder Module stehen zur Verfügung, um eine robuste Ratenbegrenzung (Anforderungen | Bytes / IP / Zeiteinheit) in Apache zu implementieren?
Ich konnte nichts finden, um die Verbindungen pro Tag nach IP-Adresse zu begrenzen. Ich habe die ganze Nacht gesucht, das ist eine Schande.
Greg
1
Weiß jemand, ob es eine Möglichkeit gibt, mod_evasive dazu zu bringen, einen Header anstelle der IP zu betrachten, wenn er hinter einem Reverse-Proxy ausgeführt wird?
Stavros Korokithakis
6
Ist mod_evasive 4 Jahre später immer noch "das Beste"?
Zac Thompson
5
Sichern Sie Ihren Anspruch. Warum sind _evasive und _cband die besten?
Reed
3
mod_evasiveerhält viele Online-Empfehlungen, aber ab Mitte 2017 scheint es von seinem Autor Jonathan Zdziarski aufgegeben worden zu sein, der seltsamerweise alle Verweise darauf aus seinem Blog gelöscht hat - obwohl der Quellcode immer noch als Upload verfügbar ist . Keines der anderen Projekte wurde in den letzten 6 Jahren (oder im Fall von 15 Jahren mod_limitipconn) aktualisiert .
Das war perfekt für mich, da modsec2 bereits läuft. Musste nur IDs zu den Regeln hinzufügen, um mit der Modsec-Version übereinzustimmen, wie folgt: <LocationMatch "^ / somepath"> SecAction initcol: ip =% {REMOTE_ADDR}, pass, nolog, id: 10000001 SecAction "Phase: 5, deprecatevar: ip.somepathcounter = 1/1, pass, nolog, id: 10000002 "SecRule IP: SOMEPATHCOUNTER" @gt 60 "" Phase: 2, Pause: 300, Verweigern, Status: 509, setenv: RATELIMITED, Überspringen: 1, nolog, id: 10000003 "SecAction" -Phase: 2, pass, setvar: ip.somepathcounter = + 1, nolog, id: 10000004 "Header immer Retry-After setzen" 10 "env = RATELIMITED </ LocationMatch>
Nathan Stretch
2
Beachten Sie auch, dass Sie durch Bearbeiten des "@gt 60" ändern können, wie viele anfängliche Burst-Anforderungen zulässig sind, und wie schnell das Limit durch Bearbeiten des Bits "ip.somepathcounter = 1/1" "aufgeladen" wird. 1/1 erlaubt eine zusätzliche Anfrage pro Sekunde. 1/2 erlaubt eine zusätzliche Anfrage alle 2 Sekunden usw.
Nathan Stretch
3
Apache 2.4 beschwert sich über das 509 in ErrorDocument, eine Option ändert es in 429 (was in Apache 2.2 natürlich nicht unterstützt wird). Außerdem benötigen alle SecAction und SecRule-s eine ID seit mod_security 2.7.
Mrten
1
Zu Ihrer Information mod_securityist kein Apache-Projekt.
Christopher Schultz
12
Es gibt zahlreiche Möglichkeiten, einschließlich Webanwendungs-Firewalls, aber die einfachste Implementierung, wenn Sie einen Apache-Mod verwenden.
Ein solcher Mod, den ich empfehlen möchte, ist mod_qos . Es ist ein kostenloses Modul, das sehr effektiv gegen Angriffe vom Typ Certin DOS, Bruteforce und Slowloris ist. Dies wird Ihre Serverlast erheblich entlasten.
Es ist sehr mächtig .
Die aktuelle Version des Moduls mod_qos implementiert Kontrollmechanismen zur Verwaltung von:
Die maximale Anzahl gleichzeitiger Anforderungen an einen Standort / eine Ressource (URL) oder einen virtuellen Host.
Begrenzung der Bandbreite, z. B. die maximal zulässige Anzahl von Anforderungen pro Sekunde an eine URL oder die maximale / minimale Anzahl heruntergeladener KByte pro Sekunde.
Begrenzt die Anzahl der Anforderungsereignisse pro Sekunde (spezielle Anforderungsbedingungen).
Begrenzt die Anzahl der Anforderungsereignisse innerhalb eines definierten Zeitraums.
Es kann auch sehr wichtige Personen (VIP) erkennen, die ohne oder mit weniger Einschränkungen auf den Webserver zugreifen können.
Generischer Anforderungszeilen- und Headerfilter, um nicht autorisierte Vorgänge zu verweigern.
Beschränkung und Filterung von Körperdaten anfordern (erfordert mod_parp).
Begrenzt die Anzahl der Anforderungsereignisse für einzelne Clients (IP).
Einschränkungen auf der TCP-Verbindungsebene, z. B. die maximal zulässige Anzahl von Verbindungen von einer einzelnen IP-Quelladresse oder die dynamische Keep-Alive-Steuerung.
Bevorzugt bekannte IP-Adressen, wenn der Server keine freien TCP-Verbindungen mehr hat.
Dies ist eine Beispielkonfiguration dessen, wofür Sie es verwenden können. Es gibt Hunderte von möglichen Konfigurationen, die Ihren Anforderungen entsprechen. Besuchen Sie die Website für weitere Informationen zu Steuerelementen.
Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate 120
# limits the connections for this virtual host:
QS_SrvMaxConn 800
# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose 600
# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP 50
# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.
Dieser funktioniert nur in altem Apache2.2, nicht in Apache2.4 +, oder?
Infiniteloop
@infiniteloop Auf der SourceForge-Seite von mod_quos heißt es, dass es mit Apache2.4 gut funktioniert. Es gibt jedoch eine spezielle Diskussion über einige Funktionen, die hier nicht funktionieren: stackoverflow.com/a/15726540/1402498
JamesHoux
6
In Apache 2.4 gibt es ein neues Aktienmodul namens mod_ratelimit . Zum Emulieren von Modemgeschwindigkeiten können Sie mod_dialup verwenden . Obwohl ich nicht verstehe, warum Sie mod_ratelimit einfach nicht für alles verwenden können.
Beachten Sie, dass mod_dialup einen asynchronen SUSPENDEDStatus verwendet und keine Threads beim Warten verschwendet, während mod_ratelimit ab sofort ausschließlich Thread-per-Connection ist. vgl. thread.gmane.org/gmane.comp.apache.cvs/20490
ArtemGr
6
Funktioniert mod_evasiveleider nicht wie erwartet, wenn es in Konfigurationen ohne Prefork verwendet wird (neuere Apache-Setups sind hauptsächlich MPM).
Hängt davon ab, warum Sie das Limit bewerten möchten.
Um den Server vor Überlastung zu schützen, ist es tatsächlich sinnvoll, NGINX davor zu stellen und dort die Ratenbegrenzung zu konfigurieren . Dies ist sinnvoll, da NGINX viel weniger Ressourcen verbraucht, beispielsweise einige MB pro zehntausend Verbindungen. Wenn der Server überflutet ist, führt NGINX die Ratenbegrenzung durch (unter Verwendung einer unbedeutenden Menge an Ressourcen) und leitet den zulässigen Datenverkehr nur an Apache weiter.
Wenn Sie nur nach Einfachheit suchen, verwenden Sie so etwas wie mod_evasive.
Verwenden Sie zum Schutz vor DDoS- oder DoS-Angriffen wie gewohnt einen Dienst wie Cloudflare, der ebenfalls eine Ratenbegrenzung aufweist.
Antworten:
Das beste
und der Rest
quelle
mod_evasive
erhält viele Online-Empfehlungen, aber ab Mitte 2017 scheint es von seinem Autor Jonathan Zdziarski aufgegeben worden zu sein, der seltsamerweise alle Verweise darauf aus seinem Blog gelöscht hat - obwohl der Quellcode immer noch als Upload verfügbar ist . Keines der anderen Projekte wurde in den letzten 6 Jahren (oder im Fall von 15 Jahrenmod_limitipconn
) aktualisiert .Wie in diesem Blog- Beitrag angegeben, scheint es möglich zu sein, mit mod_security ein Ratenlimit pro Sekunde zu implementieren.
Die Konfiguration sieht ungefähr so aus:
quelle
mod_security
ist kein Apache-Projekt.Es gibt zahlreiche Möglichkeiten, einschließlich Webanwendungs-Firewalls, aber die einfachste Implementierung, wenn Sie einen Apache-Mod verwenden.
Ein solcher Mod, den ich empfehlen möchte, ist mod_qos . Es ist ein kostenloses Modul, das sehr effektiv gegen Angriffe vom Typ Certin DOS, Bruteforce und Slowloris ist. Dies wird Ihre Serverlast erheblich entlasten.
Es ist sehr mächtig .
Die aktuelle Version des Moduls mod_qos implementiert Kontrollmechanismen zur Verwaltung von:
Die maximale Anzahl gleichzeitiger Anforderungen an einen Standort / eine Ressource (URL) oder einen virtuellen Host.
Begrenzung der Bandbreite, z. B. die maximal zulässige Anzahl von Anforderungen pro Sekunde an eine URL oder die maximale / minimale Anzahl heruntergeladener KByte pro Sekunde.
Begrenzt die Anzahl der Anforderungsereignisse pro Sekunde (spezielle Anforderungsbedingungen).
Generischer Anforderungszeilen- und Headerfilter, um nicht autorisierte Vorgänge zu verweigern.
Beschränkung und Filterung von Körperdaten anfordern (erfordert mod_parp).
Begrenzt die Anzahl der Anforderungsereignisse für einzelne Clients (IP).
Einschränkungen auf der TCP-Verbindungsebene, z. B. die maximal zulässige Anzahl von Verbindungen von einer einzelnen IP-Quelladresse oder die dynamische Keep-Alive-Steuerung.
Dies ist eine Beispielkonfiguration dessen, wofür Sie es verwenden können. Es gibt Hunderte von möglichen Konfigurationen, die Ihren Anforderungen entsprechen. Besuchen Sie die Website für weitere Informationen zu Steuerelementen.
http://opensource.adnovum.ch/mod_qos/
quelle
In Apache 2.4 gibt es ein neues Aktienmodul namens mod_ratelimit . Zum Emulieren von Modemgeschwindigkeiten können Sie mod_dialup verwenden . Obwohl ich nicht verstehe, warum Sie mod_ratelimit einfach nicht für alles verwenden können.
quelle
SUSPENDED
Status verwendet und keine Threads beim Warten verschwendet, während mod_ratelimit ab sofort ausschließlich Thread-per-Connection ist. vgl. thread.gmane.org/gmane.comp.apache.cvs/20490Funktioniert
mod_evasive
leider nicht wie erwartet, wenn es in Konfigurationen ohne Prefork verwendet wird (neuere Apache-Setups sind hauptsächlich MPM).quelle
Eine weitere Option - mod_qos
Nicht einfach zu konfigurieren - aber leistungsstark.
http://opensource.adnovum.ch/mod_qos/
quelle
Hängt davon ab, warum Sie das Limit bewerten möchten.
Um den Server vor Überlastung zu schützen, ist es tatsächlich sinnvoll, NGINX davor zu stellen und dort die Ratenbegrenzung zu konfigurieren . Dies ist sinnvoll, da NGINX viel weniger Ressourcen verbraucht, beispielsweise einige MB pro zehntausend Verbindungen. Wenn der Server überflutet ist, führt NGINX die Ratenbegrenzung durch (unter Verwendung einer unbedeutenden Menge an Ressourcen) und leitet den zulässigen Datenverkehr nur an Apache weiter.
Wenn Sie nur nach Einfachheit suchen, verwenden Sie so etwas wie mod_evasive.
Verwenden Sie zum Schutz vor DDoS- oder DoS-Angriffen wie gewohnt einen Dienst wie Cloudflare, der ebenfalls eine Ratenbegrenzung aufweist.
quelle