Apache: limitare il numero di richieste / traffico per IP?


12

Vorrei consentire a un solo IP di utilizzare fino a un massimo di, diciamo 1GB, di traffico al giorno, e se questo limite viene superato, tutte le richieste da quell'IP vengono quindi eliminate fino al giorno successivo. Tuttavia, sarebbe sufficiente una soluzione più semplice in cui la connessione viene interrotta dopo un certo numero di richieste.

Esiste già una sorta di modulo che può farlo? O forse posso farlo attraverso qualcosa come iptables?

Grazie


Versione di Apache?
pehrs

2.2 - Riempimento del limite del personaggio

Risposte:


5

Se vuoi una soluzione Apache pura bw_mod per Apache 2.0 e mod_bandwidth per Apache 1.3. Possono limitare la larghezza di banda del server per limitare l'utilizzo della larghezza di banda.

C'è anche mod_limitipconn, che impedisce a un utente di effettuare molte connessioni al tuo server. mod_cband è un'altra opzione, ma non l'ho mai usata.

Se non vuoi rovinare l'installazione di Apache, puoi mettere un proxy squid davanti ad Apache. Ti dà un maggiore controllo anche sulla limitazione.

Tuttavia, nella maggior parte dei casi il problema riguarda alcuni oggetti di grandi dimensioni quando si desidera limitare la larghezza di banda per IP e si desidera dare un messaggio di errore sano quando un utente estrae troppi dati e lo si blocca. In tal caso, potrebbe essere più semplice scrivere uno script PHP e archiviare le informazioni di accesso in una tabella temporanea in un database.


2
Grazie per i suggerimenti Ho già esaminato bw_mod e mod_limitipconn, ma nessuno dei due (per quanto posso dire) fa quello che voglio. mod_limitipconn li limita semplicemente a una connessione alla volta e bw_mod mi permette di limitare la velocità di download per IP. Voglio bloccarli dopo una certa quantità di trasferimento / richieste di dati. In realtà sto cercando di difendermi da determinati utenti che sentono il bisogno di eseguire la scansione del mio intero sito e scaricare tutto. Dare un'occhiata al proxy calamari, sembra interessante. Se ciò non funziona, penso che dovrò ricorrere a modificare la fonte bw_mod.

Hai impostato il tuo robots.txt per non consentire i ragni?
pehrs

1
Il problema con robots.txt è che (proprio come RFC 3514) solo i simpatici robot lo rispettano.
Scott Pack

È vero, ma scoprirai che la maggior parte delle persone che eseguono lo spidering del tuo sito utilizzano strumenti standard. E molti di loro, come wget, rispettano robots.txt. Robots.txt è anche il modo corretto di informare i tuoi utenti che non vuoi che siano spider.
pehrs

1
Ci ho provato. Inizialmente, robots.txt è stato sufficiente, poi hanno detto a Wget di ignorare robots.txt, quindi ho fatto ricorso al blocco degli user-agent "non riconosciuti", ma poi hanno falsificato l'agente utente. Tendono a fare molte richieste principali, mentre i browser legittimi no, quindi potrei cercare di limitare le richieste principali o disabilitarle del tutto (meno desiderabili).

5

Questa è la mia soluzione iptables per questo tipo di problema. Regola di --seconds --hitcountcui hai bisogno, anche tabella iptables.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Ha spiegato:

  1. iptablescontrolla se l'IP di origine è elencato sul file / proc / net / ipt_recent / ATACK per 5 o più volte a intervalli di 600 secondi e se si tratta di una NUOVA richiesta. Se lo è, fai un rifiuto; altro

  2. iptables controlla se la richiesta è destinata alla porta 80. In tal caso, stampa IP e timestamp su / proc / net / ipt_recent / ATACK e inoltra il pacchetto.

Funziona bene per le mie esigenze.


3

Hai visto uno strumento come fail2ban? Se potrebbe essere un po 'pesante per te, ma ti permetterebbe di limitare il numero di richieste consentite da un determinato IP. Funziona guardando i registri e si impostano le regole per quante violazioni alla volta sono consentite, quindi per te che potrebbero essere richieste al giorno. Una volta superato, può fare cose come bloccarle usando ipchains.

L'ho usato per bloccare con successo gli attacchi DDoS contro un server di posta. Può però consumare una quantità significativa di potenza del processore.


corrente; y in procinto di implementarlo da solo. Spero che funzioni
Dark Star1

1

prova mod_dosevasiveomod_security

mod_dosevasive può essere configurato per vietare un IP dopo un numero specificato o richieste di pagine a un sito in un intervallo di tempo specificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.