Installer CrowdSec : alternative moderne à Fail2ban

Installer CrowdSec : alternative moderne à Fail2ban

Protégez votre VPS avec CrowdSec, un IDS/IPS open-source qui combine détection locale et threat intelligence collaborative. Plus rapide que Fail2ban, plus malin, et il bénéficie d'une base mondiale d'IPs malveillantes mise à jour en temps réel.

Introduction

CrowdSec est la nouvelle génération de protection contre les attaques. Là où Fail2ban analyse les logs et bannit localement, CrowdSec va plus loin :

  • Détection locale : analyse logs Nginx, SSH, MySQL, etc.
  • Bouncer : applique les bans (firewall, Nginx, Cloudflare, etc.)
  • Threat intel collaborative : partage anonymisé des IPs malveillantes entre tous les utilisateurs
  • Communauté : vous bénéficiez des attaques que les autres détectent (CrowdSec est utilisé par 200000+ machines dans le monde)

Architecture en deux parties : un agent qui détecte, un ou plusieurs bouncers qui bannissent.

Prérequis

  • VPS Debian 12 / Ubuntu 22.04+
  • Accès root
  • Au moins un service à surveiller (SSH au minimum)

Étape 1 : Installation

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

CrowdSec détecte automatiquement les services présents (SSH, Nginx, Apache, etc.) et installe les collections de règles appropriées.

Étape 2 : Vérifier le statut

sudo systemctl status crowdsec
sudo cscli metrics

cscli metrics affiche les acquisitions (sources de logs), parsers et scenarios actifs.

Étape 3 : Inspecter les scénarios installés

CrowdSec utilise des scenarios : des règles qui décrivent des comportements malveillants.

sudo cscli scenarios list

Exemples installés par défaut :

  • crowdsecurity/ssh-bf : brute-force SSH
  • crowdsecurity/http-bad-user-agent : bots web suspects
  • crowdsecurity/http-crawl-non_statics : crawlers agressifs
  • crowdsecurity/http-probing : scans de vulnérabilités

Étape 4 : Tester la détection

Provoquez une fausse attaque SSH (depuis une autre machine que celle que vous utilisez) :

# Sur une autre machine, ou utilisez nmap
for i in {1..10}; do ssh nonexistent@IP_DE_VOTRE_VPS; done

Sur le VPS :

sudo cscli alerts list

Vous verrez une alerte pour l'IP qui a fait les tentatives.

Étape 5 : Installer un bouncer (l'élément qui banni réellement)

CrowdSec sans bouncer détecte mais ne bannit pas. Installez le bouncer firewall :

sudo apt install -y crowdsec-firewall-bouncer-iptables

Le bouncer s'enregistre automatiquement auprès de l'agent CrowdSec et applique les bans via iptables.

Vérifiez :

sudo systemctl status crowdsec-firewall-bouncer
sudo cscli bouncers list

Étape 6 : Bouncer pour Nginx (sites web)

Si vous hébergez un site, le bouncer Nginx est très puissant : il bloque les IPs malveillantes au niveau HTTP avant qu'elles n'atteignent votre app.

sudo apt install -y crowdsec-nginx-bouncer

Suivez l'assistant interactif qui détecte votre config Nginx et l'adapte.

Vérifiez :

sudo nginx -t
sudo systemctl reload nginx

Étape 7 : Voir les IPs bannies

sudo cscli decisions list

Affiche toutes les décisions actives (bans en cours), avec leur source, durée et scénario.

Étape 8 : Configurer la threat intelligence collaborative (CTI)

Activé par défaut. Pour vérifier :

sudo cscli capi status

Doit afficher You can successfully interact with Central API (CAPI).

Pour bénéficier des blocklists communautaires (IPs déjà connues comme malveillantes par d'autres utilisateurs), créez un compte gratuit sur https://app.crowdsec.net puis :

sudo cscli console enroll YOUR_ENROLLMENT_KEY

L'enrollment key se trouve dans votre dashboard CrowdSec.

Étape 9 : Whitelist (ne pas bannir certaines IPs)

Pour ajouter votre IP de bureau dans la whitelist :

sudo nano /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
name: crowdsecurity/whitelists
description: "Whitelist events from your IPs"
whitelist:
  reason: "VeryCloud office"
  ip:
    - "82.26.157.10"
    - "192.168.0.0/24"

Redémarrez :

sudo systemctl reload crowdsec

Étape 10 : Bannir manuellement une IP

sudo cscli decisions add --ip 1.2.3.4 --duration 24h --reason "manual ban"

Débannir :

sudo cscli decisions delete --ip 1.2.3.4

Étape 11 : Dashboard web local (optionnel)

CrowdSec inclut un dashboard Metabase pour visualiser les attaques :

sudo cscli dashboard setup --listen 0.0.0.0

Accessible sur http://IP_DU_VPS:3000.

⚠️ Restreignez l'accès au port 3000 via UFW si exposé :

sudo ufw allow from VOTRE_IP_FIXE to any port 3000

Étape 12 : Collections additionnelles

CrowdSec a un système de collections (packs de scenarios). Pour protéger d'autres services :

# Collections recommandées
sudo cscli collections install crowdsecurity/wordpress
sudo cscli collections install crowdsecurity/mysql
sudo cscli collections install crowdsecurity/postgresql
sudo cscli collections install crowdsecurity/iptables  # détecte les port scans

# Recharger
sudo systemctl reload crowdsec

Lister les collections disponibles :

sudo cscli collections list -a

Dépannage

Aucune détection malgré des attaques

Vérifiez les acquisitions :

sudo cscli metrics

Si 0 partout, CrowdSec ne lit pas les logs. Vérifiez :

sudo cat /etc/crowdsec/acquis.yaml

Adaptez les chemins de logs si différents.

Bouncer ne banni pas

sudo systemctl status crowdsec-firewall-bouncer
sudo cscli bouncers list

Vérifiez que le bouncer est validated. Sinon :

sudo cscli bouncers add firewall-bouncer

Et recopiez l'API key dans /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.

Logs absents

CrowdSec lit les logs en temps réel. Si vous utilisez systemd-journal (Debian 12), assurez-vous que l'acquisition est en mode journal :

source: journalctl
journalctl_filter:
  - "_SYSTEMD_UNIT=ssh.service"
labels:
  type: syslog

Commandes utiles

# Métriques détaillées
sudo cscli metrics

# Statut général
sudo cscli capi status
sudo cscli lapi status

# Liste des alertes
sudo cscli alerts list

# Détails d'une alerte
sudo cscli alerts inspect ALERT_ID

# Décisions actives (bans)
sudo cscli decisions list

# Tester si une IP est bannie
sudo cscli decisions list --ip 1.2.3.4

# Recharger sans redémarrer
sudo systemctl reload crowdsec

# Mettre à jour les scenarios/collections
sudo cscli hub update
sudo cscli hub upgrade

Conclusion

CrowdSec est plus efficace que Fail2ban pour la plupart des usages, et radicalement plus moderne. Il devient indispensable pour les serveurs publics :

  • Vous bénéficiez de la threat intel mondiale (les nouveaux botnets sont détectés en quelques minutes)
  • Vous protégez plusieurs services avec une seule stack
  • Les bouncers Nginx/Cloudflare bloquent avant que l'attaque n'arrive à votre app

Pour aller plus loin :

  • Configurez le bouncer Cloudflare pour bloquer les IPs au niveau CDN
  • Hébergez un Local API (LAPI) central qui agrège les détections de tous vos VPS
  • Intégrez les alertes avec Discord / Slack / email via les notifications natives

Ressources

Join our Discord community server

For any questions, suggestions, or just to chat with the community, join us on Discord!

900+Members