Mettre en cage une attaque massive sur le FacetedSearch PrestaShop
MariaDB à 100 % de CPU, des bots qui crawlent des dizaines de milliers d'URLs de filtres : comment on a identifié, jailé via fail2ban et borné une attaque sur la navigation à facettes PrestaShop.
Un matin, alerte : MariaDB à 100 % de CPU, la boutique répond en huit secondes. Le slow query log est noyé sous des requêtes de navigation à facettes (ps_facetedsearch). En face, une poignée d'IP qui crawlent des dizaines de milliers d'URLs de filtres combinés. Un déni de service — volontaire ou non, le résultat est le même.
Pourquoi le FacetedSearch est une cible
Chaque combinaison de filtres (marque × couleur × taille × prix…) génère une URL et une requête SQL lourde. Pour un bot, c'est un espace quasi infini d'URLs à visiter ; pour votre base, c'est une avalanche de jointures non cachées. Quelques requêtes par seconde suffisent à mettre une boutique à genoux.
1. Repérer le motif dans les logs
Les URLs de filtres PrestaShop portent le paramètre ?q= avec plusieurs segments. On sort le top des IP qui les martèlent :
grep -oE '^[0-9.]+ .*\?q=[^ ]+-[^ ]+-' access.log \
| awk '{print $1}' | sort | uniq -c | sort -rn | head
2. Une cage fail2ban dédiée
On écrit un filtre qui matche les requêtes de facettes combinatoires, puis une jail agressive : au-delà de 30 hits en une minute, on bannit 24 h.
# /etc/fail2ban/filter.d/ps-facetedsearch.conf
[Definition]
failregex = ^<HOST> -.*"GET [^"]*\?q=[^"]*-[^"]*-[^"]* HTTP
ignoreregex =
# /etc/fail2ban/jail.d/ps-facetedsearch.local
[ps-facetedsearch]
enabled = true
filter = ps-facetedsearch
logpath = /chemin/vers/access.log
findtime = 60
maxretry = 30
bantime = 86400
action = iptables-allports[name=facet]
3. Couper le robinet côté crawl
La jail éteint l'incendie ; le robots.txt évite qu'il reparte. On interdit l'indexation des URLs de filtres, qui n'ont de toute façon aucune valeur SEO :
# robots.txt
User-agent: *
Disallow: /*?q=
Disallow: /*&q=
En complément : noindex sur les pages filtrées, et exclusion des URLs ?q= du cache pour ne pas saturer le disque avec des variantes inutiles.
Le résultat
IP abusives bannies en quelques minutes, requêtes par seconde divisées par quatre, charge revenue à la normale. La leçon de fond : le FacetedSearch est un excellent outil de conversion, mais c'est aussi une surface d'attaque. Sur les boutiques qu'on infogère, il est borné dès le premier jour — pas le matin où la base prend feu.