Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Conf apache “crise” (optionnelle) pour mettre tous les bots à l’amende sur results.html
Règle “crise” (optionnelle) : mettre les bots à l’amende sur results.html uniquement
[modifier | modifier le wikicode]Voir aussi : Protection_Apache_–_Mode_crise_et_Blocage_PDF_Bots
Objectif
[modifier | modifier le wikicode]En cas de pic de charge (ex : bots qui martèlent les recherches), cette règle permet de **pénaliser uniquement l’endpoint** :
/archives-en-ligne/results.html- (optionnel)
/fr/archives-en-ligne/results.html
Les humains continuent d’accéder au reste du site. Une fois la crise passée, on désactive la règle.
Principe
[modifier | modifier le wikicode]- On **tague** les bots via leur
User-Agent(pattern générique + liste de bots connus). - On applique une réponse HTTP aux bots sur
results.htmlseulement. - Recommandation : renvoyer **429 Too Many Requests** +
Retry-After(plus “propre” qu’un 403 en crise). - Alternative plus simple : **403 Forbidden**.
Pré-requis
[modifier | modifier le wikicode]Vérifier que les modules sont actifs :
rewrite_moduleheaders_module
Commande :
sudo apache2ctl -M | egrep 'rewrite|headers'
A) Option recommandée : répondre 429 + Retry-After sur results.html (bots seulement)
[modifier | modifier le wikicode]1. Créer le fichier de conf
[modifier | modifier le wikicode]Créer le fichier :
sudo nano /etc/apache2/conf-available/crisis-block-bots-results.conf
Contenu :
# /etc/apache2/conf-available/crisis-block-bots-results.conf
#
# MODE CRISE : pénalise les bots sur /archives-en-ligne/results.html uniquement
# Réponse : 429 + Retry-After (et pas de blocage du reste du site)
# 1) Détecter/Taguer les bots via User-Agent
# - Pattern générique : bot|spider|crawl|slurp
# - Liste courante (à compléter si besoin)
SetEnvIfNoCase User-Agent "(bot|spider|crawler|crawl|slurp|bingpreview|facebookexternalhit|meta-externalagent|petalbot|bytespider|yandex|baiduspider|duckduckbot|sogou|semrush|ahrefs|mj12|dotbot|applebot|ia_archiver|oai-searchbot|chatgpt-user)" bad_bot_ua=1
# 2) Appliquer la “sanction” uniquement sur results.html
<IfModule mod_rewrite.c>
RewriteEngine On
# a) /archives-en-ligne/results.html
RewriteCond %{REQUEST_URI} ^/archives-en-ligne/results\.html$ [NC]
RewriteCond %{ENV:bad_bot_ua} =1
RewriteRule ^ - [R=429,L]
# b) /fr/archives-en-ligne/results.html (si utilisé)
RewriteCond %{REQUEST_URI} ^/fr/archives-en-ligne/results\.html$ [NC]
RewriteCond %{ENV:bad_bot_ua} =1
RewriteRule ^ - [R=429,L]
</IfModule>
# 3) Ajouter un Retry-After (utile pour les crawlers “polis”)
<IfModule mod_headers.c>
Header always set Retry-After "3600" env=bad_bot_ua
</IfModule>
Notes :
Retry-After "3600"= 1 heure. Ajuste si tu veux (ex : 600 pour 10 minutes).- Cette règle ne dépend pas d’IP : elle vise les bots via User-Agent (et donc couvre aussi de nouveaux bots).
- Si un bot ment volontairement sur son UA, cette règle ne le détectera pas ; dans ce cas, on complète avec un blocage IP/subnet temporaire.
2. Activer / Désactiver (mode crise)
[modifier | modifier le wikicode]Activer :
sudo a2enconf crisis-block-bots-results sudo apache2ctl configtest sudo systemctl reload apache2
Désactiver (quand la charge redescend) :
sudo a2disconf crisis-block-bots-results sudo apache2ctl configtest sudo systemctl reload apache2
3. Tester localement
[modifier | modifier le wikicode]Test bot (doit renvoyer 429) :
curl -Ik --resolve archives.lamayenne.fr:443:127.0.0.1 \ -A "meta-externalagent/1.1" \ "https://archives.lamayenne.fr/archives-en-ligne/results.html?base=militaire&query1=bodin"
Test humain (doit renvoyer 200) :
curl -Ik --resolve archives.lamayenne.fr:443:127.0.0.1 \ -A "Mozilla/5.0" \ "https://archives.lamayenne.fr/archives-en-ligne/results.html?base=militaire&query1=bodin"
B) Alternative simple : 403 (authz) au lieu de 429
[modifier | modifier le wikicode]Si tu préfères rester “100% mod_authz_core”, voici une variante (403) :
# /etc/apache2/conf-available/crisis-block-bots-results.conf
SetEnvIfNoCase User-Agent "(bot|spider|crawler|crawl|slurp|bingpreview|facebookexternalhit|meta-externalagent|petalbot|bytespider|yandex|baiduspider|duckduckbot|sogou|semrush|ahrefs|mj12|dotbot|applebot|ia_archiver|oai-searchbot|chatgpt-user)" bad_bot_ua=1
<IfModule mod_authz_core.c>
<LocationMatch "^/(fr/)?archives-en-ligne/results\.html$">
<RequireAll>
Require all granted
Require not env bad_bot_ua
</RequireAll>
</LocationMatch>
</IfModule>
C) Compléter la liste des bots (conseil pratique)
[modifier | modifier le wikicode]Tu peux enrichir le pattern en ajoutant les UA identifiés dans tes logs (ex : GoogleOther, HaloBot, etc.).
Exemple :
- ajouter
googleother - ajouter
halobot
Attention : certains navigateurs ou applis peuvent contenir “bot” dans l’UA (rare, mais possible). Si tu as un faux positif, retire/affine le pattern.
D) Bonnes pratiques en mode crise
[modifier | modifier le wikicode]- Commencer par **429** sur
results.html(impact faible, réversible). - Si un bot insiste : blocage IP/subnet temporaire (iptables/ufw) ou règle Apache dédiée.
- Sur le long terme : cache applicatif, rate limiting (mod_evasive / mod_security / reverse proxy), ou CDN pour PDFs.