Jakie techniki i / lub moduły są dostępne do implementacji solidnego ograniczania szybkości (żądania | bajty / ip / czas jednostki) w Apache?
Odpowiedzi:
Najlepsze
i reszta
mod_evasive
dostaje wiele rekomendacji online, ale od połowy 2017 roku wydaje się, że został porzucony przez jego autora, Jonathana Zdziarskiego, który dziwnie usunął wszystkie odniesienia do niego ze swojego bloga - chociaż kod źródłowy jest nadal dostępny jako upload . Żaden z pozostałych projektów nie był aktualizowany w ciągu ostatnich 6 lat (lub 15 lat w przypadku mod_limitipconn
).
Jak stwierdzono w tym poście na blogu , wydaje się, że możliwe jest użycie mod_security do wprowadzenia ograniczenia szybkości na sekundę.
Konfiguracja wygląda mniej więcej tak:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
mod_security
nie jest projektem Apache.
Istnieje wiele sposobów włączenia zapór sieciowych aplikacji internetowych, ale najłatwiej jest zaimplementować, jeśli używasz mod Apache.
Jednym z takich modów, które lubię polecać, jest mod_qos . Jest to darmowy moduł, który jest bardzo skuteczny przeciwko pewnym atakom typu DOS, Bruteforce i Slowloris. Spowoduje to znaczne zmniejszenie obciążenia serwera.
Jest bardzo potężny .
Obecna wersja modułu mod_qos implementuje mechanizmy kontrolne do zarządzania:
Maksymalna liczba jednoczesnych żądań do lokalizacji / zasobu (adresu URL) lub hosta wirtualnego.
Ograniczenie przepustowości, takie jak maksymalna dozwolona liczba żądań na sekundę do adresu URL lub maksymalna / minimalna liczba pobieranych bajtów na sekundę.
Ogranicza liczbę zdarzeń żądań na sekundę (specjalne warunki żądania).
Ogólny wiersz żądania i filtr nagłówka uniemożliwiający nieautoryzowane operacje.
Zażądaj ograniczenia i filtrowania danych ciała (wymaga mod_parp).
Ogranicza liczbę zdarzeń żądań dla klientów indywidualnych (IP).
Ograniczenia na poziomie połączenia TCP, np. Maksymalna liczba dozwolonych połączeń z pojedynczego adresu źródłowego IP lub dynamiczna kontrola utrzymywania aktywności.
To jest przykładowa konfiguracja tego, do czego możesz jej użyć. Istnieją setki możliwych konfiguracji dostosowanych do Twoich potrzeb. Odwiedź witrynę, aby uzyskać więcej informacji o sterowaniu.
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.
W Apache 2.4 jest nowy moduł magazynowy o nazwie mod_ratelimit . Aby emulować prędkości modemu, możesz użyć mod_dialup . Chociaż nie rozumiem, dlaczego po prostu nie możesz użyć mod_ratelimit do wszystkiego.
SUSPENDED
stanu asynchronicznego , nie marnując wątków na oczekiwanie, podczas gdy mod_ratelimit, od teraz, jest ściśle związany z wątkiem na połączenie. por. thread.gmane.org/gmane.comp.apache.cvs/20490
Jeszcze jedna opcja - mod_qos
Niełatwa konfiguracja - ale potężna.
Zależy od tego, dlaczego chcesz ocenić limit.
Jeśli ma to zabezpieczyć się przed przeciążeniem serwera, warto postawić przed nim NGINX i skonfigurować tam ograniczenie szybkości . Ma to sens, ponieważ NGINX zużywa znacznie mniej zasobów, około kilku MB na dziesięć tysięcy połączeń. Tak więc, jeśli serwer zostanie zalany, NGINX wykona ograniczenie szybkości (używając niewielkiej ilości zasobów) i przekaże tylko dozwolony ruch do Apache.
Jeśli wszystko, czego szukasz, to prostota, użyj czegoś takiego jak mod_evasive.
Jak zwykle, jeśli ma to chronić przed atakami DDoS lub DoS, użyj usługi takiej jak Cloudflare, która również ma ograniczanie szybkości.