Blocage ClaudeBot et Amazonbot
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Question

Blocage ClaudeBot et Amazonbot

by
FrancoisK2
Created on 2024-07-19 00:10:15 (edited on 2024-11-18 11:06:03) in Hébergements Web

Bonjour à toutes et à tous,

je viens vers vous avec un très gros problème de scraping de la part de ClaudeBot et Amazonbot. J'ai depuis plusieurs semaines un dépassement de consommation de CPU sur ma base de donnée. Après analyse des logs, je remarque du scraping en masse de la part de ClaudeBot et Amazonbot.

J'ai bien :
User-agent: ClaudeBot
Disallow: /

User-agent: Amazonbot
Disallow: /

User-agent: Claude-Web
Disallow: /


Dans mon robot.txt, j'ai ajouté un plugin Wordfence sur Wordpress mais rien n'y fait, après un seul et unique blocage du useragent (sur Wordfence) Claude et Amazon son de retour avec environ 240 requêtes chacun. par minute.

Après recherche sur le web voici une partie de mon htaccess:

RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Blexbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^CCBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^coccocbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^DotBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrapeshotCrawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^magpie-crawler [OR]
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [OR]
RewriteCond %{HTTP_USER_AGENT} ^ClaudeBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^Claude-web [OR]
RewriteCond %{HTTP_USER_AGENT} ^Amazonbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^TurnitinBot
RewriteRule .* - [F]

Qui lui aussi ne donne rien.

Pour le coup je suis à mon deuxième plugin, des conditions sur le htaccess et robot.txt mais impossible de les bloquer, forcement j'ai des maisl d'ovh qui m'informe qu'il prendrons des mesures si je ne fais rien... mais bon en même temps je vois pas quoi faire.

Je suis preneur de toute solution.


20 Replies ( Latest reply on 2025-09-08 07:34:03 by
MAPAE
)

Bonjour,

déjà avez-vous analyser vos logs pour être sûr des User-Agent utilisé ?
Idem mais pour les IPs utilisés ?

Cordialement, janus57

Claudebot, amazonbot et surtout (surtout) bytespider ça m'étonne de voir que tu es le seul à te plaindre ici...
Perso j'entretiens des listes d'adresses IP dans le FW pour que leurs requêtes ne tapent pas trop sur les sites web (15756 IPs pour Bytespider dont la volonté d'échappement est très clair).

Ce que je ne comprends pas c'est que normalement si tes rewrite rules sont bien faites, il ne devrait pas y avoir de requêtes sur ta BDD.

Comme le dit @janus57 vérifie soigneusement les chaînes que tu tests.
Par exemple pour claudebot je test sur "claudebot@anthropic.com"

Bonjour,

Merci pour vos retours. Après mille tentatives j'ai réussi à dégager ClaudeBot. Amazonbot quant à lui continue de scraper sans relâche, 110k requêtes de 00:00 à 11:20.

Voici une ligne ClaudeBot:

`18.221.92.51 hangist.fr - [19/Jul/2024:00:00:03 +0200] "GET /etiquette-produit/a2p?filter_dimensions=30x40%2C30x55%2C30x70%2C30x30%2C30x35%2C30x80&product_tag=a2p&query_type_dimensions=and&yith_wcan=1 HTTP/1.1" 200 67328 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"`

Voici une ligne Amazonbot

`52.70.240.171 www.hangist.fr - [19/Jul/2024:00:00:04 +0200] "GET /etiquette-produit/a2p?filter_dimensions=30x70,35x35,30x65,50x10,35x45,40x45,30x80&product_cat=cylindres&product_tag=a2p&query_type_dimensions=and&yith_wcan=1 HTTP/1.1" 200 67585 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)"`

Maintenant j'ai aussi facebook qui s'amuse.

Je viens quand même de passer de 47% d'overload cpu à 26% donc du progrès. Pour le coup, je pensais bêtement que le Firewall d'OVH s'occupait de ce genre de chose. Dans la foulée de mon analyse, j'ai cherché à savoir si les IP venaient bien des sources indiquées et si ce n'étaient pas des fake bot... mais les ips correspondent bien à leurs sources.

Visiblement, les robots.txt sont en cache, donc il peut se passer jusqu'à 24h pour qu'un robot s'arrête.

Je wait.

merci.

Dans cette ligne :


RewriteCond %{HTTP_USER_AGENT} ^Amazonbot


Il me semble que le ^ signifie le début de chaîne.
Si tu remplace par
`RewriteCond %{HTTP_USER_AGENT} Amazonbot`

Ça donne quoi ?


Il me semble que le ^ signifie le début de chaîne.
Si tu remplace par
RewriteCond %{HTTP_USER_AGENT} Amazonbot


Oui,
On pourrait meme faire :

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Amazonbot|Claude) [NC]
RewriteRule ^ – [F]

tout en amont de la connexion vous pouvez aussi avoir un petit script php qui rejette le bot
$rejet_bot = [
"claudebot",
"Amazonbot",
"bytespider"
];
foreach($rejet_bot as $b) {
if(stripos($_SERVER['HTTP_USER_AGENT'], $b) > 0) {
rejette($b);
}
}

function rejette($info) {
log("rejetBot $info", print_r($_SERVEUR, true));
sleep(2000);
die('bonjour, vous voulez un café, un thé ?');
}

Bonjour, il n'est pas le seul je me bat aussi par tout ses bots, mon site a été déplacé par OVH pour ne pas ralentir les autres sites. J'ai réussi à passer de 113 à 30 requêtes par minute. En plus de toutes les IP ajouté dans mon .htaccess je vais ajouter ce qu'a partagé CHORINP.

Bonjour,

Je viens de regarder pour voir après plusieurs mois ce que cela donne et en regardant mon HTACCESS je remarque que j'ai complètement dégagé le code qui ne fonctionnait pas (probablement une manipe de mon côté) la seule chose que je vois est mon robot.txt qui semble à lui seul faire fonctionner la mécanique. Je viens de regarder mes logs et ils ont tous disparu ...

User-agent: ClaudeBot
Disallow: /

User-agent: Amazonbot
Disallow: /

User-agent: Claude-Web
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: ChatGPT-User
Disallow: /

User-agent: GPTBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: anthropic-ai
Disallow: /


User-agent: Omgilibot
Disallow: /

User-agent: Omgili
Disallow: /

User-agent: FacebookBot
Disallow: /

User-agent: Diffbot
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: ImagesiftBot
Disallow: /

User-agent: PerplexityBot
Disallow: /

User-agent: cohere-ai
Disallow: /

Salut, et bien moi il continue.
J'ai bien réduit niveau requête


Mais ils sont toujours là


Dans mon fichier .htaccess j'ai cela:


Et pour mon fichier robot.txt j'ai cela
User-agent: *
Disallow: /administrator/
Disallow: /cache/
Disallow: /components/
Disallow: /editor/
Disallow: /galerie/
Disallow: /help/
Disallow: /images/
Disallow: /includes/
Disallow: /language/
Disallow: /mambots/
Disallow: /media/
Disallow: /modules/
Disallow: /templates/
Disallow: /installation/

User-agent: Amazonbot
Disallow: /

User-agent: FacebookBot
Disallow: /

User-agent: Bytespider
Disallow: /

Je vais tester avec ce que tu as mis dans ton fichier robot.

Alors maintenant j'ai l'air de ne plus avoir de bot Amazon mais il reste le bytespider alors qu'il est dans ta liste.
J'ai aussi du meta-externalagent je l'ai ajouté mais il passe toujours.

Aux dernières nouvelles, je n'ai pas vu Bytespider faire une requête un fichier robots.txt, donc ça m’étonnerai qu'un simple :


User-agent: Bytespider
Disallow: /

l'empèche de crawler les sites de maniére abusive...
C'est de loin le pire bot officiel que j'ai eu à "combatre" avec ses plus de 10 milles adresses IP situées dans un AS imbanissable en raison du grands nombre de services légitime qu'il héberge (AMAZON-02).
J'ai suis rendu a le bloquer avec une liste Ipset spécifique au niveau du firewall pour limiter les "dégas".

Bonjour,
Cet échange est intéressant de part les cas d'usage.
Pourriez-vous nous donner des inputs sur les raisons qui vous poussent à bloquer ces bots ?
Avoir la possibilité de bloquer les bots directement de notre côté via votre manager/api, vous y verriez un gain ? pourquoi ?

Bruno B.

Bonjour Bruno voici la raison.
Vous m'avez envoyé un mail car mon hébergement consommer trop de ressource et pour protéger les autres sites vous avez déménagé mon site sur un autre serveur pour l'isoler.
Après plus de 2 jours à combattre les robots voici le résultat. Je n'ai toujours pas eu de mail pour m'informer que mon site est revenu sur son hébergement normal malgré que j'ai divisé par presque 100 le nombre de requêtes.


J'ai récup les logs et a coup de powershell je récupéré toutes les IP pour les ajouté dans mon fichier .htaccess il fait aujourd'hui 9934 lignes !
Il est composé d'IP et d'une liste d'agent.

Vous pouvez m'envoyer le domaine en PM svp ?

ByteSpider : Plusieurs requêtes chaque secondes (sur des ressources dynamiques) depuis une bonne dizaines de milliers d'adresses IP situées sur AS16509
Pas de requête du fichier robots.txt... C'est clairement un abus de ressources.

Ce bot pourrissait les ressources de mes dédiés.
Les outils comme F2B ou Crowdsec sont inefficace au vu grand nombre d'IPs, j'ai du dev des scripts spécifiques pour maintenir les IP dans un Ipset spécial.

Même chose de mon côté où j'ai AmazonBot qui m'embête
J'ai mis en place les différentes solutions évoquées sur ce fil et vous tiendrai au courant des résultats.

Moi aussi, depuis trois jours c'est AmazonBot (crawl.amazonbot.amazon)depuis une multitude d'adresses IP. Unstoppable !
Personne a une idée comment stopper cette pollution ?

Regarde les solutions à mettre dans ton .htaccess plus haut dans ce fil (celles basées sur le user agent).

Bonjour,

je me bats aussi contre les bots depuis quelques semaines. Voilà ce que j'ai constaté :

  1. de nombreux bots ne tiennent pas compte des directives du robot.txt
    (on peut les mettre quand même, ça fait pas de mal)
  2. dans le .htaccess, il y a plusieurs méthodes possibles, l'essentiel est de ne pas se tromper dans la syntaxe des expressions régulières (un enfer).

Donc, voilà comment moi je fais dans le .htaccess, je mets 2 méthodes :

Méthode 1 : Bloquer les user-agents avec une redirection

C'est la méthode la plus radicale, si le user-agent est correctement identifié, il est redirigé tout de suite et n'a pas d'accès à l'arborescence du site. On peut le faire aussi avec les http-referrers, mais c'est plus rare de les trouver.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} (AhrefsBot(.*)|AI2Bot(.*)|Amazonbot(.*)|Anonymous(.*)|anthropic-ai(.*)|Bytespider(.*)|ChatGPT-User(.*)|checkprivacy(.*)|ChinaClaw(.*)|Claude-Web(.*)|ClaudeBot(.*)|DataForSeoBot(.*)|Email|EmailCollector(.*)|EmailSiphon(.*)|EmailWolf(.*)|facebookexternalhit(.*)|g00g1e(.*)|GPTBot(.*)|PetalBot(.*)) [NC]
    RewriteRule (.*) - [F,L]
</IfModule>

Cette écriture avec tous les user-agent séparés avec des pipe | permet de les écrire sans guillemets, et sans ^devant le nom. Explication : les guillemets ne sont nécessaires que si le nom contient un espace. Le ^ veut dire que c'est un début de chaine, pas nécessaire ici. Enfin, on met (.*) accolé à chaque nom pour dire "et tous les caractères après cette chaine".

A priori, si le bot ne rentre pas, la 2e méthode est inutile. Mais j'ai constaté que j'en retrouvais parfois dans les logs. Je ne sais pas pourquoi. Est-ce que certaines requêtes "passent" le temps que d'autres sont bloquées ? Problème de cache ? Là ça dépasse mes compétences.

Méthode 2 : Empecher les requêtes des bots

Cette méthode permet au bot de rentrer, mais elle l'empèche de faire une requête GET, POST ou PUT (en général ce ne sont que des GET, les bots sont des scrappers).

BrowserMatchNocase ^AhrefsBot(.*) bad_bot
BrowserMatchNocase ^AI2Bot(.*) bad_bot
BrowserMatchNocase ^Amazonbot(.*) bad_bot
BrowserMatchNocase ^Amazonbot/0.1(.*) bad_bot
BrowserMatchNocase ^Anonymous(.*) bad_bot
BrowserMatchNocase ^anthropic-ai(.*) bad_bot
BrowserMatchNocase ^Bytespider(.*) bad_bot
BrowserMatchNocase ^ChatGPT-User(.*) bad_bot
BrowserMatchNocase ^checkprivacy(.*) bad_bot
BrowserMatchNocase ^ChinaClaw(.*) bad_bot
BrowserMatchNocase ^Claude-Web(.*) bad_bot
BrowserMatchNocase ^ClaudeBot(.*) bad_bot
BrowserMatchNocase ^DataForSeoBot(.*) bad_bot
BrowserMatchNocase ^EmailCollector(.*) bad_bot
BrowserMatchNocase ^EmailSiphon(.*) bad_bot
BrowserMatchNocase ^EmailWolf(.*) bad_bot
BrowserMatchNocase ^facebookexternalhit(.*) bad_bot
BrowserMatchNocase ^g00g1e(.*) bad_bot
BrowserMatchNocase ^GPTBot(.*) bad_bot
BrowserMatchNocase ^PetalBot(.*) bad_bot

# Apache < 2.4
<IfModule !mod_authz_core.c>
 <Limit GET POST PUT>
  Order allow,deny
  Allow from all
  Deny from env=bad_bot
 </Limit>
</IfModule>

# Apache >= 2.4
<IfModule mod_authz_core.c>
 <Limit GET POST PUT>
  <RequireAll>
   Require all granted
   Require not env bad_bot
  </RequireAll>
 </Limit>
</IfModule>

Bonne chance à tous,

Bonjour,

Merci d'avoir partagé vos solutions très intéressantes, personnellement j'ai adopté la même que celle de CHORINP, la plus efficace qui soit !

J'ai bien aimé aussi la façon de BoulengerT de remercier les robots et de leur proposer un café après 2000 sec. :-P Mais bon, ça doit bloquer un process http pendant tout ce temps, non ?

Pour ajouter ma pierre, je vous suggère de personnaliser votre erreur 403 dans votre fichier .htaccess ou votre config apache,

  • soit avec un fichier :

ErrorDocument 403 /erreurs/403.html

le chemin étant relatif à la racine du domaine

  • soit directement avec un message :

ErrorDocument 403 'Va jouer ailleurs !'

  • soit avec l'adresse d'un autre site vers lequel il sera redirigé :

ErrorDocument 403 http://www.welcometohell.com/

là je vous laisse libre d'imaginer ce que vous proposerez ! :-))

Voilà, bonne chance et bon courage à tous !