Bouncer CrowdSec pour Magento 2
Comment protéger votre site Magento 2 avec le module CrowdSec_Bouncer
Introduction
Chaque utilisateur qui accède à votre site est identifiable par une adresse IP.
CrowdSec est un outil open source capable de déterminer si cette IP est potentiellement malveillante ou non. Pour cela, l'agent CrowdSec que vous aurez installé sur votre serveur analysera différentes sources de données (fichiers de logs, etc.). Selon des scénarios de remédiations prédéfinis, une décision sera préconisée pour l'IP en question : laisser passer si rien de suspect n'est détecté, demander la résolution d'un captcha si un doute subsiste ou carrément bannir l'IP pendant un certain temps.
Une des forces de CrowdSec est que cette base de connaissance est partagée entre tous les utilisateurs : si votre serveur est attaqué, les décisions prises serviront à d'autres, mais vous bénéficierez aussi des décisions issues des autres attaques du monde entier.
Le rôle des bouncers est d'appliquer les décisions prises.
Désormais
disponible sur la marketplace Magento 2, c'est
exactement ce que fait le module
CrowdSec_Bouncer
: lorsqu'un utilisateur est suspecté d'être malveillant, le module lui affiche soit un captcha à résoudre, soit simplement une page notifiant
que
l'accès est refusé. Si l'utilisateur est considéré comme non suspect, il accède à la page normalement.
Avec ce guide, vous allez apprendre à installer et à configurer le module CrowdSec_Bouncer
pour Magento 2.
Prérequis
Pour suivre ce guide, vous aurez besoin :
- d'un serveur ou d'un environnement local avec une instance Magento 2 installée.
À ce jour, le module
CrowdSec_Bouncer
est compatible avec Magento 2 de la version 2.3.0 à la version 2.4.3
- d'un agent CrowdSec actif. Pour cela, vous pouvez vous référer à la documentation. Notez que CrowdSec doit être installé sur un serveur accessible via le site Magento 2.
Magento 2 et CrowdSec ne doivent pas nécessairement être installés sur le même serveur, bien que ce soit le plus simple.
Étape 1 — Installation
L'installation du module CrowdSec_Bouncer
est une installation de module Magento 2 tout à fait classique.
Tout d'abord, vous allez installer le module en utilisant composer
. Ensuite, vous lancerez quelques commandes
post-installation afin d'avoir un module prêt à l'emploi.
Toutes les commandes de cette étape doivent être lancées depuis le dossier racine de Magento 2
Ajout des sources
Lancez la commande suivante pour ajouter le module CrowdSec_Bouncer
en tant que dépendance :
composer require crowdsec/magento2-module-bouncer
Post installation
Activation du module
Après avoir installé les sources du module, celui ci doit être activé. Pour cela, lancez la commande :
bin/magento module:enable CrowdSec_Bouncer
Vous devriez pouvoir lire le message suivant :
The following modules have been enabled:
- CrowdSec_Bouncer
Mise à niveau
Une fois le module activé, vous devez mettre à niveau Magento 2 :
Si vous êtes en mode production
, exécutez d'abord la commande de compilation :
bin/magento setup:di:compile
Ce n'est pas nécessaire en mode
developer
Puis lancez la commande de mise à niveau :
bin/magento setup:upgrade
Nettoyage du cache
Le cache Magento 2 doit être nettoyé avec la commande :
bin/magento cache:flush
Déploiement du contenu statique
Enfin, vous devez déployer le contenu statique :
bin/magento setup:static-content:deploy -f
À ce stade, le module est prêt à être utilisé, mais ses fonctionnalités ne sont pas encore configurées et activées. Dans la prochaine étape, vous allez configurer les options de base afin de tester que tout se passe comme prévu.
Étape 2 — Configuration basique
Dans cette partie, vous naviguerez tout d'abord vers l'onglet de configuration du bouncer CrowdSec. Puis, vous vérifierez que la communication entre Magento 2 et votre agent CrowdSec est opérationnelle. Enfin, vous ferez quelques tests de fonctionnalité.
Page de configuration
À partir du tableau de bord de votre back office, vous trouverez la page de configuration du module en naviguant de la manière suivante :
Stores → Configurations → Security → CrowdSec Bouncer
Connexion à CrowdSec
Ici, vous allez pouvoir tester la connexion entre Magento 2 et votre agent CrowdSec.
Dans le champ Your LAPI url
, vous devez renseigner l'url utilisée pour contacter l'agent CrowdSec. Si
vous avez installé CrowdSec sur le même serveur que Magento 2, il suffit de renseigner http://localhost:8080
.
Dans le champ Your bouncer key
, vous devez renseigner la clé qui sera utilisée pour l'authentification. Pour cela,
il vous faut tout d'abord utiliser une commande cscli
disponible lorsque CrowdSec est installé. Cette commande est
la suivante :
cscli bouncers add magento2-bouncer
Vous pouvez utiliser le nom de bouncer que vous souhaitez. Ici on l'appelle
magento2-bouncer
.
En retour de cette commande, vous obtiendrez une clé : ne la perdez pas et ne la communiquez à personne.
Copiez cette clé dans le champ Your bouncer key
.
Avant de sauvegarder, assurez-vous que la connexion fonctionne en cliquant sur le bouton Test CrowdSec LAPI connection
.
En cas de succès, vous aurez un message
Connection test result: success
Si tel est le cas, vous pouvez sauvegarder la configuration.
Premier test
Maintenant que tout est en place, vous allez faire un test simple : bannir votre IP et constater que le bouncer vous interdit l'accès au site. Ne vous inquiétez pas, nous donnons la commande pour annuler votre bannissement un peu plus bas.
Avant tout, activez le bouncer sur la partie frontend de votre site en sélectionnant Yes
dans le menu déroulant
Enable bouncer on Frontend area
de la partie General Settings → Bouncing
:
Comme votre IP n'est pas encore considérée comme malveillante, vous pouvez vous rendre sur une page de votre site et vous ne constaterez aucun changement.
Vous pouvez bannir votre IP en lançant la commande cscli
suivante :
cscli decisions add --ip <YOUR_IP> --duration 1h --type ban
En pratique, vous n'aurez pas à ajouter manuellement les décisions pour telle ou telle IP : c'est l'agent CrowdSec qui s'en chargera selon les scénarios installés.
Dès lors que cette commande a été lancée, votre accès au site sera impossible et vous obtiendrez l'affichage suivant :
À présent, autorisez à nouveau l'accès au site pour votre IP en supprimant la décision précédente :
cscli decisions delete -i <YOUR_IP>
Voilà pour le cas d'usage le plus classique.
Vous allez voir dans la prochaine étape comment jouer avec les différentes configurations pour adapter le bouncer selon vos besoins.
Étape 3 — Configuration avancée
Le module CrowdSec_Bouncer
propose de nombreuses options configurables : que ce soit d'un point de vue visuel ou
sur des aspects plus techniques et fonctionnels. Nous allons décrire ci-dessous les paramétrages les plus utiles.
Flexibilité
Un site Magento 2 est accessible depuis plusieurs zones (areas
). Vous avez la possibilté d'activer le bouncer sur
une ou plusieurs zones, selon vos besoins.
La principale est la
zone
frontend
. Nous
avons vu
plus
haut
comment activer le bouncer sur cette zone. Vous noterez d'ailleurs que cette configuration Enable bouncer on Frontend area
est paramétrable par Store view
.
Vous pouvez aussi choisir d'activer le bouncer sur la zone du back office (Enable bouncer on Adminhtml area
) ou
pour protéger les appels par API REST, SOAP et GraphQL (Enable bouncer on API areas
).
De plus, la configuration Bouncing level
vous permet, en choisissant le Flex bouncing
, de ne jamais bannir une
IP en
affichant, au pire, un captcha. Il devient alors impossible de bloquer accidentellement l'accès à votre site à des
personnes qui ne le méritent pas.
Charte graphique et libellés
Selon les cas, le bouncer affiche une page de ban
ou une page de captcha
. Il est possible de personnaliser
toutes les couleurs de ces pages en quelques clics afin qu'elles s'intègrent au mieux à votre charte graphique. D'autre
part,
tous les textes sont également entièrement personnalisables. Cela vous permettra, par exemple, de présenter des pages traduites dans la langue de vos utilisateurs.
Ces configurations sont accessibles dans la partie Theme customization
:
Vous pouvez par exemple obtenir une page de captcha en français avec le design suivant :
Gestion du cache et mode asynchrone
Par défaut, le "mode Live" est activé. Autrement dit, la première fois qu'un utilisateur se connecte à votre site web, son IP sera vérifiée directement par l'API de CrowdSec. Le reste de la navigation de votre utilisateur sera encore plus transparent grâce au système de cache entièrement personnalisable. En particulier, vous pouvez choisir entre un système de fichiers, Redis ou Memcached pour gérer le cache de l'API Crowdsec.
Mais vous pouvez également activer le "mode Stream" :
Ce mode vous permet d'alimenter constamment le cache CrowdSec avec la liste des IP malveillantes via une tâche d'arrière-plan (CRON), ce qui le rend encore plus rapide lors de la vérification des IP de vos visiteurs. En outre, si votre site a beaucoup de visiteurs uniques en même temps, cela n'influencera pas le trafic vers l'API de votre instance CrowdSec.
CDN, proxy et load balancers
Si vous utilisez un CDN, un reverse proxy ou un load balancer, vous pouvez indiquer dans les paramètres les
plages d'IP de ces dispositifs pour vérifier l'IP de vos utilisateurs. Pour les autres IP, le bouncer ne fera pas
confiance à l'en-tête X-Forwarded-For
:
Conclusion
Avec ce guide, vous avez eu un aperçu de ce que pouvaient vous apporter CrowdSec et son bouncer spécifique Magento 2. Toutes les configurations n'ont pas été analysées dans le détail, mais vous devriez désormais avoir une idée assez précise des possibilités offertes.
Plusieurs évolutions, qui permettront notamment à l'agent CrowdSec d'utiliser des scénarios d'attaques spécifiques aux sites e-commerce, sont en cours de développement. Vous pouvez suivre ces évolutions en vous rendant sur la page GitHub dédiée.
Et si vous souhaitez échanger sur ce module ou sur tout autre sujet CrowdSec, vous pouvez contacter l'équipe en utilisant Discord.