Bloquez les mauvais robots pour éviter un DDoS
Dans les derniers temps, je trouvais que mon site était rendu très populaire. Après validation, je me suis rendu compte que je recevais beaucoup de connexions dont l'agent utilisateur était des robots.
J'ai travaillé sur un projet pour centraliser mes journaux, ce qui m'a permis de bien comprendre la situation. Voici donc quelques trucs pour éviter que vos serveurs web se fassent submergés de requêtes de la part de ByteDance et Meta.
Suite à la centralisation de mes journaux, j'ai activé Fail2Ban avec le filtre apache-badbots d'actifs. Après avoir bloqué environ 2300 adresses IP, j'ai rapidement constaté que ça ne ferait pas l'affaire. Alors voici quelques trucs.
Bloquer dans Apache :
Votre application web consomme beaucoup de ressources et vous voulez éviter de brûler du CPU inutilement, voici un bout de config pour le service Apache permettant de bloquer ces deux robots :
<Directory /chemin/vers/mon/site/web>
Options Indexes FollowSymLinks
AllowOverride all
SetEnvIfNoCase User-Agent "Bytespider" bad_bots
SetEnvIfNoCase User-Agent "facebookexternalhit" bad_bots
<RequireAll>
Require all granted
Require not env bad_bots
</RequireAll>
</Directory>
Ce code retournera un 403 aux connexions dont l'agent contient est "Bytespider" et "facebookexternalhit".
Bloquer dans le pare-feu :
ByteDance arrive d'une plage d'adresses IP énorme hébergées chez AWS Singapour. En bloquant cette plage d'adresses dans votre par-feu, vous économiserez des ressources :
47.128.0.0/16
À ne pas faire si vous risquez d'utiliser des services hébergés chez AWS Singapour.
Configurer Fail2Ban :
Modifiez le fichier jail.local de votre installation de Fail2Ban (/etc/fail2ban/jail.local dans mon cas) afin d'activer des protections pour Apache.
Par exemple :
[apache-auth]
maxretry = 10
enabled = true
action = firewallcmd-allports
[apache-badbots]
enabled = true
action = firewallcmd-allports
[apache-overflows]
enabled = true
action = firewallcmd-allports
[apache-nohome]
enabled = true
action = firewallcmd-allports
[apache-modsecurity]
enabled = true
action = firewallcmd-allports
Pour ma part, j'ai une action personnalisée qui bloque l'adresse dans mon pare-feu central. Ainsi, tous mes serveurs sont protégés.
En espérant que ces quelques trucs vous seront utiles!