Bloquer les bots efficacement

Dans cet article, nous allons voir comment bloquer les bots et surtout ceux dont le but est de piller vos ressources afin de nourrir des intelligences artificielles.

Introduction

Il existe plusieurs façon de faire, essentiellement en se basant sur l’user-agent, la plus connus est sans doute de passer par un fichier robots.txt qui indiquera aux bots s’ils sont les bienvenus chez nous. Nous n’utiliserons pas cette méthode que j’estime inefficace car certains bots, mal élevés, ne liront pas robots.txt et s’inviteront donc quand même sur vos sites.

Nous, nous allons utiliser l’outil fail2ban.

Explications

On va utiliser le filtre fail2ban apache-badbots.conf (des équivalents pour Nginx doivent sûrement exister) qu’on va modifier et une configuration personnalisée de fail2ban pour faire fonctionner ce filtre.

On va indiquer dans le filtre les user-agent des bots qu’on souhaitent bloquer

Notre configuration personnalisée va écouter les logs d’accès à nos sites.

Dans la pratique

Obtenir la liste des bots

Soit sur Internet (https://www.dsfc.net/robots.txt par exemple, attention aux doublons inutiles)

Soit via vos logs (/var/log/apache2/…access.log)

Ou un mixe des deux.

Modification du filtre

On va modifier deux lignes de ce filtre :

  • la première : badbotscustom, pour ajouter le nom des user-agent (mots clés);
  • la deuxième : failregex, pour faire la détection que les mots clés soit en minuscule ou en majuscule (avec ?i au début) et également pour matcher dès que les mots clés sont détéctés dans les logs.
sudo nano /etc/fail2ban/filter.d/apache-badbots.conf

badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider|(?:Mozilla/\d+\.\d+ )?Jorgee|AhrefsBot|alexa|amazonbot|anthropic-ai|applebot|bingsapphire|copilotsapphire|sapphire|botframework|buck|bytespider|ccbot|chatglm|chatglm-spider|chatgpt|chatgpt-user|claude|claudebot|clickagy|cogniverses|diffbot|directline|expanse|facebookbot|friendlycrawler|gptbot|ia_archiver|img2dataset|imagesift|imagesiftbot|intelligence|metabot|meta-externalagent|mistralai-user|mohawk-crawler|omgili|omgilibot|oai-searchbot|openai|pandalytics|perplexity|petalbot|poesearchbot|safednsbot|semanticscholarbot|slackbot|spawning|spawning-ai|summalybot|the knowledge ai|timpibot|turnitin|ubermetrics|velenpublicwebcrawler|webcopier|webzio|wget|wpbot|youbot|zoombot|2ip|3w1bot|7siters|meta-externalagent|facebookexternalhit|Polycom|DotBot|nmap

failregex = (?i)^<HOST> -.*"(GET|POST|HEAD).*HTTP.*".*(?:%(badbots)s|%(badbotscustom)s).*"$

Vous vous en doutez, la liste n’est pas exhaustive, à vous de faire vos recherches pour la compléter. On aurait pu également bloquer certains clients comme curl ou wget mais personnellement je trouve leur usage légitime.

Modifier la configuration de fail2ban

On va créer une prison [apache-badbots] qui va faire en sorte que dès la première détection le bot soit bloqué définitivement. Pensez à faire une prison [DEFAULT] (prison qui représente l’ensemble des paramètres par défaut pour toutes les autres prisons) où on n’oublie pas de se mettre dans la liste des ip à ne pas bloquer.

sudo nano /etc/fail2ban/jail.d/custom.conf

[DEFAULT]
ignoreip = 127.0.0.1 <votre_ip>
findtime = 30m
bantime = 24h
maxretry = 5
backend = systemd

[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/<site_1>_access.log
     /var/log/apache2/<site_2>_access.log
maxretry = 1
bantime = -1
backend = auto

Cette configuration fait que les clients ayant un user-agent correspondant à un des mots clés de notre filtre et qui feront une requête HTTP sur un de nos sites ne pourront, théoriquement le faire qu’une seule fois avec succès (maxretry = 1) puis seront bannis en permanence (bantime = -1).

Cette configuration est valable pour les OS qui se base sur systemd par défaut d’où le paramètre backend = systemd dans [DEFAULT] et les paramètres logpath et backend = auto dans [apache-badbots].

Activation

On redémarre fail2ban pour la prise en compte :

sudo systemctl restart fail2ban.service

Comment savoir si ça marche ?

Méthode 1 – impatient

Vous pouvez tester via un autre réseau d’aller sur un de vos sites protégés, de faire un nmap (qui fait parti des user-agent qui doivent être bloqué) à destination du port HTTPS (ou HTTP) de votre serveur. Puis toujours via ce réseau de retourner sur votre site. Normalement rien ne s’affichera, c’est que vous êtes bloqué.

Méthode 2 – patient

Dans quelques heures, aller voir le statut de la prison apache-badbots pour voir qu’il y a bien des blocages :

sudo fail2ban-client status apache-badbots

Test fait seulement 24h après et déjà 59 bots bloqués : c’est donc très efficace !

Continuation

Regardez de temps en temps vos logs à la recherche de bots (ça se voit dans le user-agent) pour mettre à jour le filtre.

Vous pouvez accélérer vos recherches avec la commande grep comme ceci par exemple pour chercher toutes les lignes de logs d’un fichier de logs donné contenant le mot “bot” :

grep -i bot /var/log/apache2/site1_access.log

Ou encore pour rechercher dans tous les logs apache2 (non archivés) :

grep -iR bot /var/log/apache2/

Note

Attention à ne pas bloquer tous les bots, certains sont indispensables pour l’indexation de vos sites dans les moteurs de recherches comme par exemple :

  • Googlebot
  • Qwantbot
  • bingbot

Exemple d’une entrée de log montrant un bot d’indexation d’un moteur de recherche :

194.187.171.154 - - [09/Feb/2026:11:11:28 +0100] "GET /2025/06/09/les-jeux-sur-linux-wine/ HTTP/1.1" 200 20958 "https://blog.ingeservice.fr/2025/06/09/les-jeux-sur-linux-wine" "Mozilla/5.0 (compatible; Qwantbot/1.0_666243; +https://help.qwant.com/bot/)"

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *