web-dev-qa-db-fra.com

Comment bloquer automatiquement et temporairement une adresse IP faisant trop de hits sur le serveur dans un court laps de temps?

Un de mes serveurs LAMP a récemment été abattu par une sorte de bot de script à la recherche d'exploits. À première vue, il faisait tellement de demandes par seconde, qu'il surchargeait le RAM sur le serveur et faisait tomber mon site entier pendant une heure. Cet "attacK" venait d'un adresse IP unique.

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

21
ProgrammerGirl

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

25
HopelessN00b

Vous devez éviter d'essayer de le faire avec PHP. Au moment où PHP s'implique, il est déjà trop tard - la mémoire a déjà été allouée.

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

En plus d'essayer d'interdire les adresses IP offensantes, vous devriez essayer de faire un meilleur usage de vos ressources. Si une demande prend moins de ressources, il faudra plus de temps pour qu'une attaque soit efficace.

Apache utilise également beaucoup de mémoire. Si vous utilisez mod_php, c'est encore pire parce que PHP est chargé à l'intérieur de chaque processus enfant Apache. Cela signifie que même les requêtes 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 FastCGI à la place. Mod_fcgid est une bonne option.

Il existe également d'autres serveurs Web plus économes en ressources. Nginx est mon préféré. Il y a aussi Lighttpd. Beaucoup de gens aiment Litespeed (en remplacement d'Apache).

Si vous souhaitez vous en tenir à Apache, envisagez de le régler du mieux possible. Pensez à désactiver .htaccess. Voici une bonne explication pourquoi .

5
Luke
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 type de chose automatiquement et de manière transparente en se basant sur les syslogs.

2
gmck

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

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

2
user130370