Apache limite di tasso con lista nera e whitelist


2

Ho trascorso diverse ore a provare a configurare iptables / ufw per fare ciò per le richieste HTTP gestite da Apache2:

Lista bianca un insieme di intervalli IP (motori del motore di ricerca) Aggiungi IP a un elenco di blocchi di 24 ore dopo le richieste X in Y secondi (idealmente mi piacerebbe impostare tre regole come questa)

Ma mi è sembrato che non fosse possibile farlo con iptables dato che vieterebbe l'IP solo per un breve periodo di tempo.

Qualcuno sa se è possibile fare ciò che ho delineato può essere raggiunto con mod_security? O consiglia qualcosa che potrebbe farlo? Qualsiasi frammento di codice che faccia qualcosa di simile sarebbe ben accetto.

Risposte:


1

Tutto ciò che stai cercando è disponibile in netfilter (e molto altro! ;-)).

La corrispondenza di un insieme di intervalli IP a whitelist può essere eseguita con ipset e l'estensione di corrispondenza "set":

ipset -N whitelist nethash

ipset --add whitelist 1.2.3.4/24

Quindi in iptables di netfilter:

iptables -A INPUT -m set --match-set whitelist src -j ACCEPT

Per bloccare per 24 ore, hai bisogno delle estensioni di partita "recenti" due volte: una per controllare la frequenza in entrata e una per ricordare le fonti bloccate:

iptables -N BLOCK24
iptables -A BLOCK24 -m recent --name blocked --set

iptables -A INPUT -m recent --name beforeblock --rcheck --seconds 1 --hitcount 1 -j BLOCK24

Questo corrisponderà se due pacchetti in un secondo. E ora per bloccare le fonti basta abbinare alla lista recente "bloccata". Questa regola ovviamente dovrebbe essere tra le prime delle regole di iptables.

iptables -A INPUT -m recent --name blocked --recheck --seconds 86400 -j DROP

Doc richiesto è qui: estensioni iptables e IPSets . Certo, può aggiungere -p tcp --dport 80 se queste regole si applicano solo a http.


0

Sono stati necessari un paio di modifiche su quanto sopra. Questo funziona:

sudo ipset -N whitelist nethash
sudo ipset --add whitelist 68.180.228.175
sudo iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
sudo iptables -N BLOCK24
sudo iptables -A BLOCK24 -m recent --name blocked --set
sudo iptables -A INPUT -m state --state NEW -m recent --set
sudo iptables -A INPUT -m state --state NEW -m recent --update --seconds 20 --hitcount 20 -j BLOCK24
sudo iptables -A INPUT -m recent --name blocked --rcheck --seconds 86400 -j BLOCK24
sudo iptables -A BLOCK24 -j LOG --log-prefix='[NETFILTER] ' --log-level 7
sudo iptables -A BLOCK24 -j REJECT
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.