Logs analysés par scénarios, IP bannies par des bouncers
CrowdSec est un moteur de détection écrit en Go. Il lit des logs, de SSH ou de NGINX par exemple, et y cherche des comportements décrits par des scénarios, comme la force brute. Un scénario déclenché produit une décision, en général le bannissement d'une IP, qu'appliquent des bouncers dans le pare-feu ou le reverse proxy. Le composant AppSec y ajoute un WAF. En échange de ses alertes, chaque moteur reçoit une liste communautaire d'IP malveillantes.
Face à fail2ban, le README revendique deux écarts : la détection et le blocage peuvent tourner sur deux machines, et une IP signalée chez un utilisateur est bloquée chez les autres. BunkerWeb prend la place du reverse proxy et filtre avec ModSecurity et l'OWASP CRS ; son plugin CrowdSec en fait un bouncer de plus. open-appsec se greffe sur NGINX, Kong, APISIX ou Envoy et juge les requêtes par apprentissage automatique.
Le comparatif des WAF open source oppose cette réputation partagée aux règles OWASP et aux modèles appris.
Détection et blocage découplés, règles ModSecurity reprises telles quelles
- Détection et blocage séparés : l'API locale tient les décisions, chaque bouncer les applique là où il tourne, et plusieurs machines peuvent envoyer leurs logs à la même instance.
- Les règles ModSecurity telles quelles : AppSec, bâti sur Coraza, charge sans conversion les règles SecLang et l'OWASP Core Rule Set.
- Une liste calée sur ce qu'on surveille : la liste communautaire suit les scénarios installés, et un serveur WordPress reçoit aussi les IP qui visent WordPress.
- Une installation qui part des services présents : CrowdSec tente de repérer les services qui tournent et installe les règles du Hub qui leur correspondent.
Métadonnées envoyées, liste communautaire plafonnée sans contribution
Une instance envoie des métadonnées, pas ses logs. À chaque alerte partent vers l'API centrale de CrowdSec le nom, le hash et la version du scénario, l'heure, l'identifiant de la machine et l'IP en cause, géolocalisée si possible. Seuls les scénarios du Hub non modifiés sont concernés ; une instance inscrite à la console envoie aussi ses scénarios personnalisés et ses décisions manuelles. Commenter la section online_client de la configuration coupe l'échange, et la liste avec.
La taille de la liste dépend de ce qu'on partage. Une instance gratuite qui envoie régulièrement des signaux reçoit 15 000 IP, les autres la version Lite, plafonnée à 3 000. Un scénario écrit ou retouché soi-même ne compte pas. La documentation cite deux causes de rétrogradation : des services auto-hébergés fréquentés par un petit cercle, ou déjà fermés par un VPN, un géoblocage ou une authentification OAuth. Les abonnés payants reçoivent jusqu'à 60 000 IP sans obligation de contribuer.
La console gratuite a des quotas. En offre Community, la console web, hébergée par CrowdSec et facultative, affiche 500 alertes par mois sur deux mois d'historique, pour un utilisateur et trois abonnements à des listes de blocage. Au-delà, les nouvelles alertes y restent masquées jusqu'au 1er du mois.
Premium se facture par moteur inscrit, sans prix affiché. L'offre ajoute la synchronisation des décisions entre instances, des listes d'autorisation centralisées, l'API de la console, le filtrage du bruit de fond d'Internet, une liste tirée des signaux de l'organisation et jusqu'à un an d'historique. Le moteur, le Hub et les bouncers officiels pare-feu, NGINX et HAProxy sont sous licence MIT.
Le moteur seul ne bloque rien. Il faut au moins un bouncer, et pour le WAF un bouncer qui lui transmet les requêtes : NGINX, OpenResty, Traefik, HAProxy ou Envoy. La base est SQLite par défaut ; la documentation conseille MySQL, MariaDB ou PostgreSQL à une API locale très sollicitée.
La détection des bots est en alpha. Arrivée avec la v1.8.0, elle exige JavaScript et cookies côté visiteur, et un hôte arm64, ou amd64 avec SSE4.1, qui autorise la mémoire exécutable, sans quoi CrowdSec ne démarre pas.
Six versions stables en 2026. Onze étaient sorties en 2025. La dernière, la v1.8.1, date du 3 septembre 2026, trois jours après une v1.8.0 qui corrigeait deux failles de déni de service.
