Retour

Pourquoi utiliser un WAF est une bonne chose pour votre site ?

Publié le
29.09.2025

Qu'est-ce qu'un WAF ?

L'utilisation d'un WAF (Web Application Firewall) permet de minimiser les attaques connues sur les serveurs. Il existe des solutions clés en main comme cloudflare, OVH, Scaleway mais pouvant engendrer un coût. Dans notre cas, sauf demande contraire des clients, nous avons mis en place Crowdsec sur nos différents serveurs pour protéger les sites des différentes attaques connues.

Schéma explicatif d'un WAF

Cette brique analyse les requêtes entrantes (adresse IP émettrice, code retour, type de requête, URL demandée, attaque, etc...) et prend une décision quant au retour à faire à l'utilisateur. Les décisions peuvent être du type :

  • OK : requête à l'apparence normal ;
  • BAN : Le serveur ne laisse pas passer et interdit l'accès à la page ;
  • CAPTCHA : Pour s'assurer qu'il ne s'agit pas d'un robot, un CAPTCHA apparaît à l'écran ;

Crowdsec se base également sur une base de données se mettant à jour régulièrement pour détecter de nouvelles attaques ou des IP malveillantes.

Mise en place de crowdsec

Crowdsec est disponible sur la plupart des distributions ou via docker. Dans cet article, nous allons installer cet solution sur un serveur Ubuntu 24.04 (cela fonctionne sur les versions LTS également). C'est une solution clé en main, installable facilement et rapidement.

Installation du repository crowdsec

Dans un premier temps, il faut commencer par ajouter la clé de confiance du serveur où se trouve les packages pour crowdsec. Les développeurs mettent à disposition un script shell permettant de le faire automatiquement. En tant que root, exécuter la commande suivante :

 $ curl -s https://install.crowdsec.net | sudo sh

Après cette étape, le repository nécessaire pour installer crowdsec sera défini sur le serveur.

Installation du module crowdsec

crowdsec s'installe via la commande suivante :

$ sudo apt install crowdsec

Par défaut, le service 'API' de crowdsec écoute en local sur le port 8080. Cela peut engendrer un conflit avec un autre service. Dans ce cas, il est conseillé de changer le port par défaut. Pour éviter toute alerte lors d'une mise à jour du paquet de crowdsec, il est conseillé de créer un fichier "local". Ces fichiers contiennent uniqzuement les clés à modifier, pas besoin de faire un copier/coller du fichier d'origine complet. Cette modification sera à apporter dans 2 nouveaux fichiers : "/etc/crowdsec/config.yaml.local" et "/etc/crowdsec/local_api_credentials.yaml.local". <port_crowdsec> correspond au nouveau numéro de port qui sera utilisé sur le système.

Fichier /etc/crowdsec/config.yaml.local :

api:  
  server:    
    listen_uri: 127.0.0.1:<port_crowdsec>

Fichier /etc/crowdsec/local_api_credentials.yaml.local :*

url: http://127.0.0.1:<port_crowdsec>

Lorsque la configuration de crowdsec est correcte, il faut démarrer le service (avec activation par défaut en cas de redémarrage du serveur)*

$ systemctl enable --now crowdsec.service

En cas d'erreur lors du démarrage, les logs (/var/log/crowdsec.log) ou le journal système (journalctl -xeu crowdsec.service) devraient permettre de débloquer la situation.

Mise en place du bouncer nginx

Un bouncer est une extension permettant de cibler une application précise sur le serveur. Dans ce cas, il s'agit de nginx.

Pré-requis

Pour pouvoir utiliser ce bouncer, le module lua pour nginx n'est pas disponible sur les repository officiels d'ubuntu. Il faut ajouter le repository launchpad nginx d'ondrej.

Ajout du bouncer nginx

L'ajout du bouncer sur le système se fait via l'ajout d'un package

$ sudo apt install crowdsec-nginx-bouncer

En fonction des modifications apportées sur crowdsec, la configuration du bouncer doit être adaptée. Sur le même principe, il faut créer un fichier de configuration 'local' pour apporter les modifications. Dans le cas du bouncer nginx, le fichier de configuration est à créer dans le dossier "/etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf.local". En reprenant l'exemple de modification du port de crowdsec, les modifications suivantes sont à mettre dans le fichier cité ci-dessus :

API_URL=http://127.0.0.1:<port_crowdsec>

Pour appliquer les modifications, il faut redémarrer les services crowdsec et nginx. En cas de requêtes jugées incorrectes, l'internaute aura alors la page par défaut de crowdsec :

exemple de page de ban crowdsec

Il est possible d'utiliser son propre template HTML en paramétrant un autre chemin vers un template au couleur de la société. Dans le fichier "/etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf.local", ajouter la variable BAN_TEMPLATE_PATH avec le chemin du fichier template devant être affiché.

BAN_TEMPLATE_PATH=<chemin absolu vers le template>

Il est également possible d'utiliser un autre template pour le captcha, en ajoutant la variable CAPTCHA_TEMPLATE_PATH de la même manière que pour la page ban.

CAPTCHA_TEMPLATE_PATH=<chemin absolu vers le template>

Mise en place de AppSec

Pré-requis

Un bouncer doit être installé pour que la communication entre les 2 élements (bouncer et appsec) puisse se faire

Installation de la solution Appsec

L'installation d'Appsec se fait via l'application cliente de crowdsec "cscli".

$ sudo cscli collections install crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules

Cette commande permet d'ajouter les règles de base pour Appsec. D'autres collections sont disponibles sur le site de crowdsec et installables via la commande ci-dessus.

Paramétrage de Appsec

Appsec doit être déclaré dans la configuration de crowdsec pour qu'il puisse être activé et utilisé. La mise en place se fait en créant un nouveau fichier de configuration "/etc/crowdsec/acquis.d/appsec.yml", en ajoutant et en adaptant le contenu suivant. <port_appsec> correspond au port (7422 par défaut) devant être utilisé pour permettre au bouncer de communiquer avec Appsec.

appsec_config: crowdsecurity/appsec-default
labels:  
  type: appsec
listen_addr: localhost:<port_appsec>
source: appsec

Paramétrage du bouncer

Pour activer le lien entre le bouncer et Appsec, le fichier "/etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf.local" doit être modifié pour ajouter la ligne suivante

APPSEC_URL=http://localhost:<port_appsec>

Une fois le paramétrage réalisé, les services nginx et crowdsec doivent être redémarrés.

Résultats & KPIs de mise en place

Malgré une configuration plutôt permissive sur le filtrage des robots (rappelons qu’en 2024, 51 % du trafic web provenait de bots selon Imperva) les résultats ont largement dépassé nos attentes en matière de détection et de blocage.

Le chiffre est éloquent : 1,5 million d’attaques bloquées en 7 jours, pour un périmètre d’environ 100 sites actifs.

Répartition des attaques sur la semaine

  • Une partie du trafic est bénigne/faible (type HTTP scan ou crawl automatisé)
  • Nous avons observé un volume significatif de tentatives d’exploitation de failles applicatives, ainsi que des attaques de type bruteforce.

exemple de rapport depuis la console crowdsec
Détail des requêtes identifiées sur les 7 derniers jours

Les tentatives de scan de port et SSH bruteforce sont relativements faible du à notre politique de sécurité préventive mise en place en amont (Firewall, Serveur Anti-DDos et Fail2ban).

Aller plus loin avec CrowdSec : au-delà de la protection de base

CrowdSec ne se limite pas à une simple brique de détection sur logs et bouncer en mode client sur votre serveur. En combinant ses briques additionnelles, il devient une véritable plateforme de protection collaborative et centralisée.

Une console pour piloter vos instances

La CrowdSec Console permet de superviser et administrer plusieurs instances depuis une interface centralisée. Elle facilite la gestion des alertes, des décisions de blocage, des allowlists/denylists, et permet d’homogénéiser vos politiques de sécurité sur plusieurs serveurs.

Un modèle freemium évolutif

La version gratuite (Community) suffit pour protéger un ou plusieurs serveurs classiques avec une bonne efficacité. Pour les besoins avancés (gouvernance multi-instance, rétention longue, quotas plus élevés, API étendue, gestion centralisée des allowlists...), il existe un plan Premium, activable à tout moment, sans avoir à changer l’architecture technique.

Un écosystème modulaire

CrowdSec repose sur un hub communautaire de scénarios, parsers et collections. Vous pouvez ajouter des modules (comme AppSec présenté ici), ou intégrer CrowdSec à d'autres briques de votre système (firewalls, reverse proxy, outils d'alerting). Cela permet de bâtir une solution sur-mesure, évolutive, tout en gardant la logique « comportementale » au cœur.

Forces & faiblesses de CrowdSec : notre retour d'expérience

Ce qu’on aime

  • Installation rapide & maintenable : que ce soit en CLI ou via Docker, CrowdSec s’installe en quelques minutes, avec une logique de fichiers YAML clairs.
  • Base open source : gage de transparence, de maîtrise technique et de personnalisation. On peut facilement auditer ou étendre le comportement.
  • Approche souveraine & on-premise : même avec des modules premium, la logique de traitement reste locale : on garde la main sur ses données et ses règles.
  • Protection collaborative : le système de réputation partagé entre utilisateurs enrichit la détection, en bloquant des IP déjà identifiées ailleurs.

Ce qu’il faut garder en tête

  • Analyse post-requête : CrowdSec agit en réaction à des logs (accès Nginx ou Apache par exemple), il ne bloque pas la requête en amont comme un vrai reverse proxy WAF. Pour certains cas critiques, cela peut être un angle mort.
  • Tuning nécessaire : il faut parfois affiner les scénarios pour éviter les faux positifs, surtout si votre trafic est atypique (si vous hébergez des sites sur différentes technos et secteurs d'activités).
  • Version gratuite limitée : les alertes et historiques sont limités (500) sans plan Premium, ce qui peut être contraignant pour du multi-serveur ou du long terme.

N'hésitez pas à nous contacter si vous avez besoin d'un renseignement sur la sécurisation de vos environnements.

D’autres articles à découvrir