Bots parasites : les identifier dans les logs et les bloquer proprement

Analyse des logs d'accès serveur pour identifier les requêtes automatisées indésirables

Entre 30 et 50 % du trafic mondial provient de bots, selon le rapport annuel de Cloudflare sur le trafic automatisé. Une part significative de ces requêtes ne sert ni le référencement ni les visiteurs réels : elle consomme de la bande passante, fausse les statistiques et peut ralentir le serveur jusqu’à le rendre instable. Identifier ces bots dans les logs, puis les bloquer au bon niveau, évite de gaspiller des ressources pour du trafic sans aucune valeur.

Trois colonnes du log suffisent à repérer un bot parasite

Chaque ligne d’un fichier access.log Apache ou Nginx contient au minimum l’adresse IP, le user-agent et le code de réponse HTTP. Un bot parasite se trahit par la combinaison de ces trois éléments. Le user-agent affiche parfois un nom explicite (AhrefsBot, SemrushBot, MJ12bot, DotBot), parfois une chaîne vide ou générique. L’IP source revient des dizaines de fois par minute, sur des URL que personne ne visite : pages de pagination, fichiers xmlrpc.php, chemins d’administration. Le code retourné est souvent 200, ce qui signifie que le serveur traite chaque requête comme légitime et consomme du CPU pour rien.

Pour les extraire rapidement, une commande suffit :

awk '{print $1, $12}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -30

Ce tri fait remonter les couples IP/user-agent les plus actifs. Tout ce qui dépasse quelques centaines de requêtes par heure sans correspondre à Googlebot, Bingbot ou un outil de monitoring interne mérite un examen. Pour aller plus loin dans la lecture des logs, cet article sur l’analyse des logs serveur détaille la méthode complète.

Bloquer au niveau du serveur, pas du CMS

Un plugin WordPress ou un module applicatif peut filtrer les bots, mais chaque requête atteint quand même PHP et sollicite la base de données avant d’être rejetée. Le blocage efficace intervient plus tôt : dans la configuration du serveur web lui-même.

Sous Nginx, une directive map sur le header $http_user_agent renvoie un code 403 aux agents indésirables sans exécuter aucun script :

map $http_user_agent $bad_bot {
  default 0;
  "~*AhrefsBot" 1;
  "~*MJ12bot" 1;
  "~*DotBot" 1;
}
if ($bad_bot) { return 403; }

Pour les IP récidivistes, fail2ban analyse les logs en temps réel et ajoute des règles iptables automatiques. La CNIL rappelle les bonnes pratiques de journalisation à respecter lorsque l’on traite des adresses IP dans ce cadre.

Le fichier robots.txt reste utile pour les bots qui le respectent, mais il ne constitue pas un blocage : c’est une indication, pas un mur. On le verra plus bas, certains crawlers ignorent purement ce fichier.

Voir aussi Lire les logs d’un serveur : trouver l’erreur au milieu du bruit

Le robots.txt ne bloque rien, et un antibot ne remplace pas le tri

Un antibot (Cloudflare Bot Management, DataDome, Akamai Bot Manager) analyse le comportement de chaque visiteur pour distinguer humain et machine. Ces solutions interceptent les bots sophistiqués qui imitent un navigateur réel, là où un simple filtre par user-agent échoue. Elles ajoutent cependant une couche de latence et un coût mensuel qui ne se justifie que pour les sites à fort trafic ou exposés au scraping commercial.

Vu du côté du webmaster d’un site de taille modeste, la combinaison d’un blocage Nginx par user-agent, d’une surveillance fail2ban et d’un monitoring de disponibilité couvre la majorité des cas. Ajouter une règle de rate-limiting (par exemple 10 requêtes par seconde par IP) dans Nginx complète le dispositif sans dépendre d’un service tiers.

Quant aux faux Googlebots, une vérification DNS inverse (host suivi d’un host sur le résultat) permet de confirmer que l’IP appartient bien à Google. Si la résolution ne pointe pas vers googlebot.com ou google.com, le bot ment sur son identité et peut être bloqué sans risque pour le crawl légitime du site.

Damien Roux
Damien Roux

Damien Roux est l'hébergement web. de web-city.fr, il partage guides pratiques, comparatifs objectifs et outils gratuits pour choisir le bon hébergeur et créer son site WordPress

À lire aussi

Surveiller la disponibilité de son site : outils et seuils d’alerte
Performance & sécurité

Surveiller la disponibilité de son site : outils et seuils d’alerte

Un site inaccessible pendant cinq minutes peut passer inaperçu, mais une heure d'indisponibilité non détectée…

Erreur de contenu mixte en HTTPS : la trouver et la corriger
Performance & sécurité

Erreur de contenu mixte en HTTPS : la trouver et la corriger

Une erreur de contenu mixte (mixed content) apparaît lorsqu'une page chargée en HTTPS appelle au moins une…

Plugins abandonnés : repérer ceux qui deviennent une porte d’entrée
Performance & sécurité

Plugins abandonnés : repérer ceux qui deviennent une porte d’entrée

Sur un site WordPress standard comportant entre quinze et vingt-cinq extensions, au moins trois d'entre elles…

Plugin de sécurité WordPress : ce qu’il apporte et ce qu’il alourdit
Performance & sécurité

Plugin de sécurité WordPress : ce qu’il apporte et ce qu’il alourdit

Un plugin de sécurité WordPress ajoute en moyenne cinq couches de protection absentes du cœur du CMS, mais il…

Attaques par force brute sur la page de connexion : les bloquer efficacement
Performance & sécurité

Attaques par force brute sur la page de connexion : les bloquer efficacement

Les attaques par force brute représentent plus de 80 % des tentatives d'intrusion sur les sites WordPress,…

Double authentification sur l’admin : la mesure la plus rentable
Performance & sécurité

Double authentification sur l’admin : la mesure la plus rentable

Quatre-vingts pour cent des intrusions sur des sites web exploitent un mot de passe volé ou deviné. Le…

Dans la rubrique Performance & sécurité

Scroll to Top

Images : Pexels et Pixabay