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

De AJLSM
Aller à la navigation Aller à la recherche

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

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.

  1. On **tague** les bots via leur User-Agent (pattern générique + liste de bots connus).
  2. On applique une réponse HTTP aux bots sur results.html seulement.
  3. Recommandation : renvoyer **429 Too Many Requests** + Retry-After (plus “propre” qu’un 403 en crise).
  4. Alternative plus simple : **403 Forbidden**.

Vérifier que les modules sont actifs :

  • rewrite_module
  • headers_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.