Quali tecniche e / o moduli sono disponibili per implementare una robusta limitazione della velocità (richieste | byte / ip / unità di tempo) in apache?
Risposte:
Il migliore
e il resto
mod_evasive
riceve molti consigli online ma, a metà del 2017, sembra che sia stato abbandonato dal suo autore, Jonathan Zdziarski, che ha stranamente cancellato tutti i riferimenti ad esso dal suo blog, sebbene il codice sorgente sia ancora disponibile come caricamento . Nessuno degli altri progetti è stato aggiornato negli ultimi 6 anni (o 15 anni nel caso di mod_limitipconn
).
Come affermato in questo post del blog , sembra possibile utilizzare mod_security per implementare un limite di velocità al secondo.
La configurazione è qualcosa del genere:
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
non è un progetto Apache.
Ci sono molti modi che includono firewall per applicazioni web, ma la cosa più semplice da implementare se si utilizza un mod Apache.
Una di queste mod che mi piace raccomandare è mod_qos . È un modulo gratuito molto efficace contro attacchi di tipo DOS, Bruteforce e Slowloris. Ciò faciliterà un po 'il carico del tuo server.
È molto potente .
L'attuale versione del modulo mod_qos implementa meccanismi di controllo per gestire:
Il numero massimo di richieste simultanee a una posizione / risorsa (URL) o host virtuale.
Limitazione della larghezza di banda come il numero massimo consentito di richieste al secondo a un URL o il massimo / minimo di kbyte scaricati al secondo.
Limita il numero di eventi di richiesta al secondo (condizioni di richiesta speciali).
Riga di richiesta generica e filtro di intestazione per negare operazioni non autorizzate.
Richiedi la limitazione e il filtraggio dei dati del corpo (richiede mod_parp).
Limita il numero di eventi di richiesta per i singoli client (IP).
Limitazioni a livello di connessione TCP, ad esempio il numero massimo di connessioni consentite da un singolo indirizzo IP sorgente o controllo dinamico keep-alive.
Questa è una configurazione di esempio di ciò per cui puoi usarla. Sono disponibili centinaia di configurazioni possibili per soddisfare le tue esigenze. Visita il sito per maggiori informazioni sui controlli.
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.
In Apache 2.4, c'è un nuovo modulo stock chiamato mod_ratelimit . Per emulare le velocità del modem, puoi usare mod_dialup . Anche se non vedo perché non puoi usare mod_ratelimit per tutto.
SUSPENDED
stato asincrono , non sprecando thread in attesa, mentre mod_ratelimit, al momento, è strettamente thread-per-connection. cfr. thread.gmane.org/gmane.comp.apache.cvs/20490
Un'altra opzione: mod_qos
Non semplice da configurare, ma potente.
Dipende dal motivo per cui desideri impostare il limite.
Se è per proteggere dal sovraccarico del server, in realtà ha senso mettere NGINX davanti e configurare la limitazione della velocità lì. Ha senso perché NGINX utilizza molte meno risorse, qualcosa come pochi MB per diecimila connessioni. Quindi, se il server è inondato, NGINX eseguirà la limitazione della velocità (utilizzando una quantità insignificante di risorse) e passerà solo il traffico consentito ad Apache.
Se tutto ciò che cerchi è la semplicità, usa qualcosa come mod_evasive.
Come al solito, se è per proteggere dagli attacchi DDoS o DoS, utilizza un servizio come Cloudflare che ha anche un limitatore di velocità.