Question Comment bloquer automatiquement et temporairement une adresse IP émettant trop de hits sur le serveur en un laps de temps réduit?


Un de mes serveurs LAMP a récemment été détruit par une sorte de script script recherchant des exploits. De prime abord, il faisait tellement de demandes en une seconde qu'il surchargeait la RAM sur le serveur et faisait tomber tout mon site pendant une heure. Cet "attacK" vient d'une seule adresse IP.

Alors, comment puis-je bloquer automatiquement et temporairement une adresse IP émettant trop de hits sur mon serveur LAMP en peu de temps? Quel est le meilleur outil pour le travail, et devrais-je résoudre ce problème au niveau du système d'exploitation ou via PHP?


18
2017-08-21 19:57


origine




Réponses:


Fail2Ban. La solution standard / par défaut à ce problème sur la plate-forme Linux.


24
2017-08-21 20:01



Intéressant, merci. Comment cela traite-t-il ou a-t-il un impact sur les robots d'exploration du Web tels que Google? - ProgrammerGirl
@Programmer Cela dépend de la façon dont vous configurez les choses, mais vous ne vous attendriez pas à ce qu'un robot d'exploration Web saisisse des mots de passe incorrects, cherche des exploits, ou accumule suffisamment de hits pour déclencher un seuil bien défini - alors, il suffit de consulter vos journaux pour comprendre. quoi définir vos seuils à. - HopelessN00b


Vous devriez éviter d'essayer de faire cela avec PHP. Au moment où PHP intervient, il est déjà trop tard - la mémoire est déjà allouée.

Vous pouvez interdire les adresses IP à n’importe quel niveau, mais le niveau le plus bas qui utilise le moins de ressources est l’itinéraire que vous souhaitez emprunter. C'est généralement le pare-feu. À tout le moins, vous voulez utiliser iptables (pare-feu Linux). Il existe des outils mentionnés par d'autres, tels que Fail2Ban, qui peuvent automatiser cela pour vous. Un pare-feu externe serait mieux.

En plus d'essayer d'interdire les adresses IP en infraction, vous devriez essayer de mieux utiliser vos ressources. Si une demande prend moins de ressources, l’attaque sera plus longue.

Apache utilise également beaucoup de mémoire. Si vous utilisez mod_php, c'est encore pire car PHP est chargé à l'intérieur de chaque processus enfant Apache. Cela signifie que même les demandes de contenu statique (css / js / images) chargent PHP même lorsque PHP n'est pas utilisé. Vous pouvez résoudre ce problème en utilisant plutôt FastCGI. mod_fcgid est une bonne option.

Il existe également d'autres serveurs Web qui utilisent plus efficacement les ressources. Nginx est mon préféré. Il y a aussi Lighttpd. Beaucoup de gens aiment Litespeed (remplaçant pour Apache).

Si vous voulez rester avec Apache, pensez à le paramétrer du mieux que vous pouvez. Envisagez de désactiver .htaccess. Voici une bonne explication pourquoi.


4
2017-09-15 19:03





Pour contrôler ou bloquer le trafic http, vous pouvez utiliser:

Cependant, sachez que ces outils peuvent également bloquer / ralentir les webspiders et avoir donc un impact sur le référencement.


1
2017-08-21 20:27





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 peut faire ce genre de chose automatiquement et de manière transparente en fonction des syslogs.


1
2017-08-21 20:10



Pouvez-vous s'il vous plaît expliquer ce que la première ligne de code fait exactement? Aussi, comment se compare ossec avec fail2ban? Merci. - ProgrammerGirl
C'est une règle iptables. Je crois que cela compte le nombre de nouvelles tentatives de connexion et les supprime après 4 tentatives dans les 60 secondes. Je vous encourage à regarder man iptables et voyez ce que chaque drapeau signifie et comment ils fonctionnent ensemble. - Luke


NoooBS,

--- inonder ---

iptables -N logdrop iptables -A logdrop -m recent --set --name liste noire

iptables -A logdrop -m limite - limite 1 / s - limite-rafale 1 -j LOG - préfixe-journal "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos iptables -A ddos ​​-m recent --rcheck --name liste noire --seconds 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m recent --set --name à nouveau iptables -A ddos ​​-m recent --update --name again --seconds 60 --hitcount 2 -j logdrop iptables -A ddos ​​-j RETOUR


-3
2018-04-11 12:45