Come bloccare automaticamente e temporaneamente un indirizzo IP facendo troppi hit sul server in un breve lasso di tempo?


21

Uno dei miei server LAMP è stato recentemente abbattuto da una specie di bot di script in cerca di exploit. A quanto pare, faceva così tante richieste al secondo, da sovraccaricare la RAM sul server e far crollare il mio intero sito per un'ora. Quel "attacK" proveniva tutto da un unico indirizzo IP.

Quindi, come posso bloccare automaticamente e temporaneamente un indirizzo IP facendo troppi hit sul mio LAMP Server in un breve periodo di tempo? Qual è lo strumento migliore per il lavoro e dovrei risolverlo a livello di sistema operativo o tramite PHP?

Risposte:


25

Fail2Ban . La soluzione standard / predefinita gold per questo problema sulla piattaforma Linux.


Interessante, grazie. In che modo questo gestisce o influenza i crawler Web come Google?
ProgrammerGirl

1
@Programmer Dipende da come configuri la cosa, ma non ti aspetteresti che un web crawler inserisca password errate, cerchi exploit o accumuli abbastanza hit per attivare una soglia ben definita - quindi controlla i log per capire a cosa definire le tue soglie.
HopelessN00b

5

Dovresti evitare di provare a farlo con PHP. Quando PHP viene coinvolto, è già troppo tardi - la memoria è già stata allocata.

Puoi vietare gli indirizzi IP a qualsiasi livello, ma il livello più basso che utilizza la minima quantità di risorse è il percorso che desideri intraprendere. Questo è di solito il firewall. Per lo meno, iptables (firewall linux) è quello che vuoi usare. Ci sono strumenti che altri hanno menzionato, come Fail2Ban, che possono automatizzare questo per te. Il firewall esterno sarebbe migliore.

Oltre a provare a vietare gli indirizzi IP offensivi, dovresti cercare di utilizzare meglio le tue risorse. Se una richiesta impiega meno risorse, ci vorrà più tempo perché un attacco sia efficace.

Apache utilizza anche molta memoria. Se stai usando mod_php, è anche peggio perché PHP è caricato all'interno di ogni processo figlio di Apache. Ciò significa che anche le richieste di contenuto statico (css / js / images) stanno caricando PHP anche quando PHP non viene utilizzato. È possibile risolvere questo problema utilizzando invece FastCGI. mod_fcgid è una buona opzione.

Ci sono anche altri server Web che sono più efficienti in termini di risorse. Nginx è il mio preferito. C'è anche Lighttpd. A molte persone piace Litespeed (sostituisci Apache).

Se vuoi restare con Apache, considera di ottimizzarlo nel miglior modo possibile. Prendi in considerazione la disabilitazione di .htaccess. Ecco una buona spiegazione del perché .


2

Per controllare o bloccare il traffico http, è possibile utilizzare:

Tuttavia, tieni presente che questi strumenti potrebbero anche bloccare / rallentare i webspider e quindi avere un impatto sul SEO.


2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec può eseguire questo tipo di cose automaticamente e in modo trasparente in base ai syslog.


1
Puoi spiegarci esattamente cosa fa esattamente la prima riga di codice? Inoltre, come si confronta ossec con fail2ban? Grazie.
ProgrammerGirl

2
È una regola di iptables. Credo che conta quanti nuovi tentativi di connessione vengono effettuati e li rilascia dopo aver superato i 4 tentativi entro 60 secondi. Ti incoraggio a guardare man iptablese vedere cosa significa ogni bandiera e come funzionano insieme.
Luca,

-3

NoooBS,

--- alluvione ---

iptables -N logdrop iptables -A logdrop -m recent --set --name blacklist

iptables -A logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefix "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m recent --reck - name blacklist --seconds 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m recent --set --name again iptables -A ddos ​​-m recent --update --nome di nuovo --secondi 60 --hitcount 2 -j logdrop iptables -A ddos ​​-j RETURN

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.