CrowdSec : un IPS communautaire pour protéger votre serveur
Les serveurs exposés sur Internet subissent en permanence des tentatives d'intrusion : brute force SSH, scans de ports, injections HTTP, exploitation de failles PHP. CrowdSec est un système de prévention d'intrusion (IPS) open source qui analyse les journaux de votre serveur, détecte les comportements malveillants et bloque automatiquement les adresses IP responsables. Contrairement à Fail2ban, CrowdSec repose sur une base communautaire d'adresses IP malveillantes : chaque instance partage ses détections avec le réseau, et chaque serveur bénéficie des signalements des autres. Un attaquant repéré sur un serveur est bloqué préventivement sur tous les serveurs participants.
CrowdSec fonctionne en deux couches distinctes. Le Security Engine (moteur de détection) lit les logs, applique des scénarios comportementaux et génère des décisions de blocage. Le bouncer (composant de remédiation) applique ces décisions au niveau du pare-feu ou du serveur web. Cette séparation permet de détecter sur une machine et de bloquer sur une autre, ou de combiner plusieurs bouncers sur le même serveur : un bouncer nftables pour bloquer au niveau réseau et un bouncer Nginx pour protéger les applications web.
Ce guide couvre l'installation complète de CrowdSec sur un VPS Linux sous Ubuntu ou Debian : moteur de détection, scénarios de sécurité (brute force SSH, scans HTTP, exploits PHP), bouncer nftables et tableau de bord en ligne.
Prérequis
- Un VPS Linux sous Ubuntu 22.04/24.04 LTS ou Debian 12/13 avec un accès root ou sudo ;
- Une connexion SSH sécurisée au serveur ;
- Un pare-feu nftables ou iptables configuré (ce guide utilise nftables, voir notre guide configurer nftables sur VPS Linux) ;
- Les services à protéger en fonctionnement (SSH, Nginx, Apache) pour que les fichiers de logs existent.
Installer CrowdSec
CrowdSec fournit un dépôt officiel pour Debian et Ubuntu. L'installation ajoute le Security Engine, le service crowdsec et l'outil en ligne de commande cscli. L'assistant d'installation détecte automatiquement les services présents sur le serveur (SSH, Nginx, Apache, MySQL) et configure l'acquisition des logs correspondants :
curl -s https://install.crowdsec.net | sudo sh
sudo apt update
sudo apt install crowdsec -y
Vérifiez que le service tourne correctement :
sudo systemctl status crowdsec
sudo cscli version
Le moteur de détection est actif mais ne bloque encore rien : il faut installer un bouncer pour appliquer les décisions. C'est la conception modulaire de CrowdSec : la détection et le blocage sont séparés.
Installer les collections et scénarios de détection
Les collections sont des ensembles de scénarios, de parsers et de postoverflows maintenus par la communauté CrowdSec. Chaque collection cible un service précis. Installez les collections correspondant aux services exposés sur votre VPS :
# Protection SSH : détecte le brute force et les scans
sudo cscli collections install crowdsecurity/sshd
# Protection Linux générale : détecte les comportements suspects système
sudo cscli collections install crowdsecurity/linux
# Protection Nginx (si installé) : détecte les scans HTTP, path traversal, bad user agents
sudo cscli collections install crowdsecurity/nginx
# Détection des exploits de failles CVE connues (injections, RCE)
sudo cscli collections install crowdsecurity/http-cve
# Appliquez les changements
sudo systemctl reload crowdsec
Listez les collections installées pour vérifier :
sudo cscli collections list
Chaque collection contient plusieurs scénarios. Par exemple, la collection crowdsecurity/sshd inclut des scénarios pour le brute force lent (10 échecs en 5 minutes), le brute force rapide (6 échecs en 30 secondes) et les tentatives avec des utilisateurs inexistants. Ces seuils sont configurables dans les fichiers YAML sous /etc/crowdsec/scenarios/.
Configurer l'acquisition des logs
CrowdSec lit les journaux définis dans le fichier /etc/crowdsec/acquis.yaml. L'installation détecte automatiquement les services présents, mais vous pouvez ajouter des sources manuellement. Voici un exemple de configuration complète :
# SSH - fichier auth.log
filenames:
- /var/log/auth.log
labels:
type: syslog
---
# Nginx - access et error logs
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
---
# Journalctl (alternative pour systemd)
source: journalctl
journalctl_filter:
- "_SYSTEMD_UNIT=ssh.service"
labels:
type: syslog
Après modification de acquis.yaml, rechargez CrowdSec et vérifiez que les sources sont bien lues :
sudo systemctl reload crowdsec
sudo cscli metrics
La commande cscli metrics affiche le nombre de lignes traitées par source, les scénarios déclenchés et les parsers actifs. Si une source affiche 0 ligne lue, vérifiez que le chemin du fichier de log est correct et que CrowdSec a les droits de lecture. Pour analyser le contenu de vos logs SSH avant de configurer CrowdSec, consultez notre guide analyser les échecs de connexion SSH.
Installer le bouncer nftables
Le bouncer nftables est le composant qui traduit les décisions de CrowdSec en règles de pare-feu. Il crée un ensemble nftables (crowdsec-blacklists) contenant les adresses IP bannies et l'insère dans la chaîne de filtrage. Chaque paquet entrant est vérifié contre cette liste avant d'atteindre vos services :
sudo apt install crowdsec-firewall-bouncer-nftables -y
sudo systemctl enable --now crowdsec-firewall-bouncer
Vérifiez que le bouncer est enregistré auprès du Security Engine :
sudo cscli bouncers list
Le fichier de configuration du bouncer se trouve dans /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml. Les paramètres par défaut conviennent à la plupart des configurations. Vérifiez que le mode est bien nftables et que les règles sont insérées :
sudo nft list ruleset | grep crowdsec
Si la commande ne renvoie rien, chargez le module noyau nftables et redémarrez le bouncer :
sudo modprobe nf_tables
sudo systemctl restart crowdsec-firewall-bouncer
Le bouncer nftables s'intègre avec votre configuration de pare-feu existante. Si vous utilisez déjà nftables sur votre VPS, consultez notre guide configurer nftables comme pare-feu pour comprendre la structure des tables et des chaînes.
Tableau de bord : la console CrowdSec
La console CrowdSec (app.crowdsec.net) est une interface web gratuite qui centralise la supervision de vos instances. Elle affiche les alertes en temps réel, les décisions actives, les scénarios déclenchés et la liste des IP bloquées sur l'ensemble de vos serveurs. Pour enregistrer votre VPS :
- Créez un compte sur
app.crowdsec.net; - Dans la section Engines, copiez la clé d'enregistrement ;
- Sur votre VPS, exécutez la commande d'enregistrement :
sudo cscli console enroll VOTRE_CLE_DENREGISTREMENT
sudo systemctl restart crowdsec
- Retournez dans la console web et acceptez le moteur dans la liste.
Une fois enregistré, votre VPS apparaît dans le tableau de bord avec ses alertes et ses métriques. La console permet aussi de souscrire aux listes de blocage communautaires : des listes d'adresses IP signalées par l'ensemble du réseau CrowdSec. Ces listes sont poussées automatiquement vers votre instance et bloquent les attaquants avant même qu'ils ne touchent votre serveur.
Commandes essentielles de cscli
L'outil cscli est le centre de contrôle de CrowdSec. Voici les commandes les plus utilisées pour administrer votre instance au quotidien :
| Commande | Description |
|---|---|
sudo cscli decisions list | Liste les IP actuellement bannies, la durée et le scénario déclencheur |
sudo cscli alerts list | Affiche les alertes récentes avec le nombre de tentatives détectées |
sudo cscli metrics | Statistiques de fonctionnement : lignes traitées, scénarios actifs, parsers |
sudo cscli bouncers list | Liste les bouncers enregistrés et leur statut |
sudo cscli collections list | Collections installées et leur version |
sudo cscli decisions delete --ip X.X.X.X | Débannit manuellement une adresse IP |
sudo cscli allowlists create liste | Crée une liste blanche pour exclure des IP de confiance |
Pour ajouter votre propre adresse IP à la liste blanche et éviter de vous bloquer vous-même :
sudo cscli allowlists create admin_ips
sudo cscli allowlists add admin_ips VOTRE_IP_PUBLIQUE
CrowdSec ou Fail2ban : tableau comparatif
CrowdSec et Fail2ban remplissent la même fonction de base : lire des logs, détecter des attaques et bannir les IP. Les différences portent sur l'architecture, la base de données d'IP et les capacités de remédiation :
| Critère | CrowdSec | Fail2ban |
|---|---|---|
| Architecture | Moteur de détection + bouncers séparés | Monolithique (détection et action couplées) |
| Langage | Go (binaire compilé, faible consommation mémoire) | Python |
| Base d'IP communautaire | Oui, partagée entre toutes les instances | Non, chaque serveur est isolé |
| Blocage préventif | Oui, via les listes communautaires | Non, réactif uniquement |
| Formats de logs | Fichiers, journald, syslog, Docker, sources cloud | Fichiers uniquement |
| Console web | Oui (app.crowdsec.net, gratuite) | Non |
| Scénarios | YAML déclaratifs, Hub communautaire | Regex dans des fichiers .conf |
| Multi-serveurs | Natif (LAPI centralisée) | Non natif |
CrowdSec ne remplace pas nécessairement Fail2ban : les deux peuvent coexister. Si vous utilisez déjà Fail2ban sur votre VPS pour protéger SSH, CrowdSec ajoute la couche communautaire et la protection applicative (HTTP, PHP) que Fail2ban ne couvre pas nativement. Pour un nouveau serveur, CrowdSec seul couvre les mêmes cas d'usage avec une architecture plus moderne.
Aller plus loin
Votre VPS est maintenant protégé par CrowdSec avec détection comportementale et blocage au niveau du pare-feu. Pour renforcer la sécurité globale de votre serveur :
- Durcir la configuration SSH : désactiver l'accès root, imposer l'authentification par clé, limiter les utilisateurs autorisés ;
- Configurer les règles de pare-feu avec UFW pour n'exposer que les ports nécessaires à vos services ;
- Activer auditd pour tracer les accès aux fichiers sensibles et les modifications de configuration ;
- Sécuriser un serveur dédié : les mêmes principes s'appliquent aux serveurs bare metal avec CrowdSec.
FiveM
Minecraft
Rust
RedM
Hytale