Come posso implementare la limitazione della velocità con Apache? (richieste al secondo)

StackOverflow https://stackoverflow.com/questions/131681

  •  02-07-2019
  •  | 
  •  

Domanda

Quali tecniche e / o moduli sono disponibili per implementare la limitazione della velocità (richieste | byte / ip / unità di tempo) in apache?

È stato utile?

Soluzione

Il migliore

  • mod_evasive (Incentrato maggiormente sulla riduzione dell'esposizione DoS)
  • mod_cband (Funzionalità migliore per il controllo "normale" della larghezza di banda)

e il resto

Altri suggerimenti

Come indicato in questo blog post sembra possibile utilizzare mod_security per implementare un limite di velocità al secondo.

La configurazione è simile a questa:

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"

Esistono numerosi modi, inclusi i firewall delle applicazioni Web, ma la cosa più semplice da implementare se si utilizza una mod Apache.

Una di queste mod che mi piace raccomandare è mod_qos . È un modulo gratuito molto efficace contro gli attacchi di tipo certin DOS, Bruteforce e Slowloris. Ciò faciliterà un po 'il carico del 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 numero massimo consentito di richieste al secondo a un URL o massimo / minimo di kbyte scaricati al secondo.

  • Limita il numero di eventi di richiesta al secondo (richiesta speciale condizioni).

  • Limita il numero di eventi di richiesta entro un periodo di tempo definito.
  • Può anche rilevare persone molto importanti (VIP) che possono accedere a server web senza o con meno restrizioni.
  • Riga di richiesta generica e filtro intestazione per negare non autorizzati operazioni.

  • Richiedi limitazione e filtro dei dati del corpo (richiede mod_parp).

  • Limita il numero di eventi di richiesta per singoli client (IP).

  • Limitazioni a livello di connessione TCP, ad esempio il numero massimo di connessioni consentite da un singolo indirizzo IP dinamico o dinamico controllo keep-alive.

  • Preferisce gli indirizzi IP noti quando il server esaurisce il TCP libero connessioni.

Questo è un esempio di configurazione per cui puoi usarlo. Esistono 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.

http://opensource.adnovum.ch/mod_qos/

In Apache 2.4, c'è un nuovo modulo stock chiamato mod_ratelimit . Per emulare la velocità del modem, puoi utilizzare mod_dialup . Anche se non vedo perché non puoi usare mod_ratelimit per tutto.

Purtroppo, mod_evasive non funzionerà come previsto se usato in configurazioni non prefork (le recenti configurazioni di apache sono principalmente MPM)

Un'altra opzione - mod_qos

Non semplice da configurare, ma potente.

http://opensource.adnovum.ch/mod_qos/

Dipende dal motivo per cui si desidera valutare il limite.

Se serve per proteggere dal sovraccarico del server, ha senso mettere NGINX di fronte e configurare limite di velocità lì. Ha senso perché NGINX utilizza molte meno risorse, qualcosa come pochi MB per diecimila connessioni. Pertanto, se il server viene inondato, NGINX eseguirà la limitazione della velocità (utilizzando una quantità insignificante di risorse) e passerà il traffico consentito solo ad Apache.

Se tutto ciò che cerchi è la semplicità, usa qualcosa come mod_evasive.

Come al solito, se si tratta di proteggere dagli attacchi DDoS o DoS, utilizzare un servizio come Cloudflare che ha anche un limite di velocità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top