- Le serveur Gitea public
git.xeserv.us est devenu instable à cause des requêtes d’AmazonBot, et l’administrateur a demandé à l’équipe AmazonBot d’ajouter ce domaine à sa liste de blocage
- Bien que tous les bots aient été interdits via
robots.txt avec Disallow: /, les requêtes ont continué, au point que l’exploitation d’un serveur Git public pourrait devoir être abandonnée
- Les crawlers IA rendent le blocage difficile en changeant d’user-agent ou en utilisant des proxies sur IP résidentielles
- Un blocage a été mis en place dans nginx ingress pour renvoyer
418 aux user-agents contenant Amazon, mais les requêtes ont continué depuis d’autres IP, et environ 10 % n’avaient même pas l’user-agent amazonbot
- Finalement, le serveur Gitea a été replacé derrière un VPN, et un reverse proxy nommé
Anubis, qui effectue une vérification de preuve de travail avant les requêtes, a été créé
Requêtes AmazonBot et limites de robots.txt
- L’administrateur a demandé à l’opérateur d’AmazonBot d’ajouter
git.xeserv.us à la liste des domaines bloqués
- Il a aussi demandé à être contacté afin que soit pris en charge le coût d’une mise à niveau matérielle nécessaire pour supporter le crawl du serveur Git
- Un
robots.txt bloquant déjà tous les bots était en place, mais cela n’a pas suffi à empêcher les requêtes en pratique
User-agent: *
Disallow: /
- Il a également résumé pourquoi il est difficile de bloquer les bots de crawl IA
- les bots mentent
- ils changent d’user-agent
- ils utilisent des adresses IP résidentielles comme proxy
- ils emploient aussi d’autres méthodes
Blocage dans nginx ingress et publication d’Anubis
- Le 2025-01-17 à 17:50 UTC, un blocage par user-agent a été ajouté dans la configuration nginx ingress
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($http_user_agent ~* "(Amazon)" ){
return 418;
}
- Même après ce réglage, le bot a continué à envoyer des requêtes à chaque fois depuis des IP différentes, et environ 10 % des requêtes n’avaient pas l’user-agent
amazonbot
- Le 2025-01-18 à 19:00 UTC, le serveur Gitea a de nouveau été déplacé derrière un VPN
- Ensuite, le développement d’un reverse proxy a commencé devant le serveur Gitea afin de vérifier une preuve de travail avant d’autoriser les requêtes
- Le 2025-01-18 à 23:50 UTC, ce proxy était accessible sous le nom
Anubis à l’adresse https://git.xeserv.us/
- Au 2025-03-26 à 14:27 UTC,
Anubis était devenu un projet indépendant avec son propre site de documentation
1 commentaires
Avis sur Hacker News
Il est temps d’envoyer une lettre d’avocat. Si l’on regarde les lignes directrices en matière de poursuites au titre du Computer Fraud and Abuse Act, le ministère américain de la Justice ne considère généralement pas l’accès à un serveur public comme un « accès non autorisé » lorsqu’il ne s’agit pas d’une attaque manifeste, mais il indique qu’à partir du moment où le titulaire des droits envoie ensuite une demande écrite claire de cessation, et que le défendeur la reçoit et la comprend, l’accès est alors considéré comme non autorisé
Il suffit donc de demander à un avocat de rédiger une lettre de « cease and desist » claire, puis de la faire remettre à Amazon par courrier recommandé ou par huissier/agent de signification, selon ce que recommande l’avocat. Il faudra probablement faire les deux, et envoyer aussi un e-mail
Ensuite, il faut voir si Amazon s’arrête ; si ce n’est pas le cas, il est possible de déposer une plainte pénale. Là, Amazon commencera à s’en soucier
https://www.justice.gov/jm/jm-9-48000-computer-fraud
Le bot d’Amazon devrait venir de plages d’IP connues d’Amazon et respecter robots.txt. Un ingénieur d’Amazon l’a aussi confirmé dans un autre commentaire : https://news.ycombinator.com/item?id=42751729
Si la seule chose qui correspond à Amazon est la chaîne de user agent « AmazonBot », alors que les plages d’IP et le comportement ne correspondent pas, envoyer une lettre d’avocat à Amazon revient à peu près à brûler de l’argent
J’aime bien la solution proposée dans ce commentaire : https://news.ycombinator.com/item?id=42727510
L’idée est de placer quelque part sur le site un lien qu’aucun humain ne devrait visiter, de l’interdire dans robots.txt, puis de bloquer pendant 24 heures toute IP qui visite ce lien. Comme il paraît que le crawler d’OpenAI ignore notamment les wildcards, on le place sous une wildcard
Mais il y avait tellement d’IP concernées que cela n’avait presque aucun effet sur le trafic
Je recommande d’examiner les en-têtes reçus très en détail. varnishlog est assez bon pour ça, et à force de regarder longtemps, on finit par trouver des caractéristiques communes à toutes les requêtes. Par exemple une combinaison inhabituelle entre langue déclarée et localisation géographique, ou la même vieille version de navigateur
Pire encore, il y avait un bug dans le gestionnaire d’erreurs : quand cette condition se produisait, le processus serveur redémarrait, ce qui invalidait au passage une implémentation de cache qui était « plutôt correcte pour du .NET 2.0 »
Je me souviens donc avoir commencé à ajouter une technique de canari comme garde-fou. Quelques canaris simples coûtaient encore moins cher que l’ajout d’un autre serveur web. Bien sûr, nous avons aussi corrigé le problème de cache et ajouté un mécanisme qui « hurlait » quand ce service recevait trop de mauvaises requêtes
Et pourtant, les crawlers de ces entreprises n’arrivaient pas à parser les manifestes qu’elles avaient elles-mêmes créés
Nous observons le même comportement de la part de tous les bots IA et SEO, donc je recommande aussi cette approche. Ils respectent robots.txt à peine, et ils sont difficiles à bloquer. Quand ils crawlent, ils arrivent comme du spam, augmentent fortement la charge et font tomber beaucoup de serveurs de clients
Si les crawlers IA veulent accéder aux sites, ils doivent se comporter correctement ou payer. Sinon, le résultat sera un blocage quasi généralisé
-j TARPITaux IP qui faisaient en moyenne plus de X requêtes par seconde sur/apiJe ne sais pas trop comment l’implémenter dans le cloud. Je n’en ai pas encore eu besoin là-bas
https://gist.github.com/flaviovs/103a0dbf62c67ff371ff75fc62f...
Ou alors, au minimum, qu’ils aient la politesse de scraper la nuit ou en dehors des heures de pointe
Je ne supposerais pas que ce soit réellement Amazon. L’auteur voit des requêtes qui font tourner des IP résidentielles et changent aussi de chaîne User-Agent
Se faire passer pour le crawler d’une grande entreprise est une technique courante chez ceux qui veulent passer inaperçus. Le fait que les requêtes viennent d’IP résidentielles est un gros signal d’alerte indiquant qu’il se passe autre chose
D’après les informations que j’ai pu vérifier en interne, il est très peu probable que ce soit réellement Amazon. Amazonbot est censé respecter robots.txt et doit toujours provenir d’adresses IP appartenant à Amazon. La procédure de vérification est ici : https://developer.amazon.com/en/amazonbot
J’ai tout de même fait remonter en interne pour vérifier si une équipe interne bizarre dont je n’aurais pas connaissance fait ce genre de choses, mais l’auteur ferait mieux de traiter ce trafic comme malveillant et comme usurpant son User-Agent
[1] https://brightdata.com/proxy-types/residential-proxies
J’ai eu le même problème récemment. Mon instance Forgejo s’est mise à utiliser 100 % du CPU de mon serveur domestique, parce que Claude et les amis IA de Meta et Google martelaient à grande vitesse un nombre pratiquement infini de liens
J’ai réduit un peu le problème avec robots.txt et une liste de blocage par User-Agent dans Caddy, mais je ne sais pas combien de temps ça tiendra
Où est passée la politesse du scraping ?
Le plus grand risque, c’est que l’une de ces entreprises, même une qui se prétend « Open », atteigne une taille telle qu’elle devienne « trop grosse pour faire faillite » du point de vue économique ou de la sécurité nationale
Facebook est connu pour avoir facilité le scraping des listes d’amis depuis MySpace, puis pour avoir interdit exactement le même comportement sur son propre site une fois devenu gros
Il faut vraiment se réveiller
Es-tu sûr que ce n’est pas un DDoS déguisé en Amazon ?
Le fait que les requêtes viennent d’IP résidentielles est vraiment louche
La motivation de ce genre de DDoS pourrait être de faire tomber de petits sites et de faire croire qu’Amazon est responsable, afin de viser Amazon
Si c’était réellement Amazon, le point de départ serait de bloquer toutes les plages d’IP qu’ils publient. Cela dit, on dirait que des requêtes arrivent aussi depuis l’extérieur de ces plages
Ces services paient les utilisateurs pour leur bande passante, puis la revendent à des tiers, ce qui fait que beaucoup de trafic de bots semble provenir d’IP résidentielles
Mon site Pinboard se fait aussi matraquer par ce qui semble être des crawlers d’IA. Cet été, ça a commencé avec des IP chinoises et singapouriennes, mais maintenant je ne peux même plus bloquer par plages d’IP et je dois compter sur des CAPTCHA
Le niveau de trafic suffit à tuer le site instantanément, alors que je n’ai même pas de texte intéressant à entraîner, seulement des liens
Je me demande comment l’auteur du billet original a déterminé que le crawler d’Amazon était en cause. Moi aussi, j’aimerais trouver à qui attribuer la responsabilité
La meilleure façon de lutter contre ce genre de choses n’est peut-être pas le blocage. Bloquer ne fait aucun mal à Amazon ni aux autres entreprises
Et si, à la place, on pouvait faire ingérer au bot du contenu manifestement nuisible ou corrupteur ?
Si cela se faisait à plus grande échelle et qu’Amazon découvrait des données empoisonnées, ils devraient dépenser de l’argent pour les retirer rapidement et essaieraient d’empêcher leurs bots d’en ingérer
Bien sûr, le principal problème est que personne n’a envie d’héberger ce genre de choses sur son propre site
Ces scrapers ingèrent déjà sans scrupule du CSAM et des choses horribles du même ordre. Une partie des sous-traitants kényans d’OpenAI chargés du tagging de données ont démissionné à cause de cela. C’était dans un article de Time en 2023
Les entreprises d’IA, aujourd’hui, ne s’intéressent pas à la qualité des données, seulement à la quantité. La seule façon de leur nuire est de leur envoyer 0 octet
Pour un dixième seulement de ce que Sam Altman a approuvé, une personne ordinaire irait directement en prison
https://zadzmo.org/code/nepenthes/
Ce serait bien qu’Amazon nous donne quelques crédits AWS en signe de bonne volonté pour compenser l’excédent de trafic sortant généré par Amazon et les autres bots. Cela dit, les revenus publicitaires de cet article devraient probablement couvrir ça. En désactivant le bloqueur de pub, l’équilibre est atteint
Avant le blocage via Nginx, Bytespider représentait 59 % et Amazonbot 21 % ; à eux deux, ils comptaient donc pour 80 % de tout le trafic de notre serveur Git
En un mois, ClaudeBot a envoyé vers Redmine plus de trafic que sur les cinq années précédant ClaudeBot cumulées