Lorsqu’on expose un service sur Internet, on découvre rapidement que les premières requêtes ne viennent pas d’utilisateurs, mais de robots. Dès qu’un port s’ouvre, des scanners automatisés passent en revue les URLs, tentent des identifiants par défaut ou cherchent des failles connues. Nginx, seul, ne filtre rien de tout cela. Fail2ban peut aider, mais il réagit uniquement après une tentative d’attaque. CrowdSec adopte une approche plus moderne : analyse en continu, détection comportementale et blocage automatique basé sur une réputation communautaire mondiale.
Ce guide détaille l’installation de CrowdSec sur Debian ou Ubuntu, ainsi que son intégration propre à Nginx, que vous l’utilisiez en natif ou via Docker (SWAG, Nginx Proxy Manager).
Sommaire
- Pourquoi utiliser CrowdSec pour protéger Nginx
- Prérequis
- 1. Installer CrowdSec
- 2. Installer les collections de détection
- 3. Déclarer les logs Nginx
- 4. Installer le bouncer Nginx
- 5. Vérifier la configuration du bouncer
- 6. Tester le blocage
- 7. Activer la console CrowdSec
- Résultat
Pourquoi utiliser CrowdSec pour protéger Nginx
CrowdSec est un système de détection et de prévention d’intrusion collaboratif. Il analyse les logs, identifie les comportements suspects et applique des décisions de blocage via des bouncers, que ce soit au niveau applicatif ou directement au niveau du pare-feu système via le bouncer iptables/nftables.
Quelques points importants :
- Détection en temps réel
- Blocage automatique des IP malveillantes
- Réputation communautaire mondiale
- Compatible avec Nginx, Traefik, SSH, Postfix, iptable, etc.
- Open-source et gratuit
Liens utiles :
- Documentation CrowdSec : docs.crowdsec.net
- Site officiel : crowdsec.net
- Documentation Nginx : nginx.org
Prérequis
- Debian 11/12 ou Ubuntu 22.04+
- Nginx installé (natif ou Docker)
- Accès root ou sudo
1. Installer CrowdSec
CrowdSec s’installera sur l’hôte, c’est possible dans un conteneur. Mais il doit avoir accès aux logs.
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec -y
Vérifiez que le service fonctionne :
sudo systemctl status crowdsec
2. Installer les collections de détection
Ces collections couvrent les scénarios web courants.
sudo cscli collections install crowdsecurity/nginx
sudo cscli collections install crowdsecurity/base-http-scenarios
sudo cscli collections install crowdsecurity/http-cve
sudo cscli collections install crowdsecurity/linux
3. Déclarer les logs Nginx
CrowdSec doit savoir où lire vos logs Nginx. Créez un fichier d’acquisition dédié :
sudo nano /etc/crowdsec/acquis.d/nginx.yaml
Nginx natif
filenames:
- /var/log/nginx/*.log
labels:
type: nginx
SWAG (Docker)
filenames:
- /chemin/vers/swag/config/log/nginx/*.log
labels:
type: nginx
Nginx Proxy Manager
filenames:
- /chemin/vers/npm/data/logs/*.log
labels:
type: nginx
Rechargez CrowdSec après modification :
sudo systemctl reload crowdsec
Vérifiez que les logs sont bien pris en compte :
sudo cscli metrics
[📷 Screenshot de cscli metrics avec les lignes traitées — à insérer ici]
4. Installer le bouncer Nginx
Le bouncer applique les décisions de blocage au niveau du reverse proxy.
sudo apt install crowdsec-nginx-bouncer -y
On conserve précieusement la clé api généré.
Vérifiez son enregistrement :
sudo cscli bouncers list
5. Vérifier la configuration du bouncer
sudo nano /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf
Les paramètres essentiels :
API_URL=http://localhost:8080
API_KEY=<clé-générée-automatiquement>
La clé a été générée automatiquement à l’installation, ne la modifiez pas.
Pour SWAG ou Nginx Proxy Manager, copiez la configuration dans le dossier Nginx de votre conteneur puis redémarrez :
docker restart swag
# ou
docker restart nginx-proxy-manager
6. Tester le blocage
Ajoutez une décision temporaire sur une IP de test :
sudo cscli decisions add --ip 1.2.3.4 --duration 5m --reason "test"
Vérifiez que la décision est bien active :
sudo cscli decisions list
[📷 Screenshot de cscli decisions list avec l’IP de test — à insérer ici]
Depuis cette IP, Nginx doit renvoyer un code 403. Supprimez ensuite la décision :
sudo cscli decisions delete --ip 1.2.3.4
7. Activer la console CrowdSec (facultatif)
La console permet de visualiser les attaques, les bouncers actifs et les décisions appliquées depuis une interface web.
Créez un compte sur app.crowdsec.net, puis enregistrez votre machine :
sudo cscli console enroll <token>
sudo systemctl restart crowdsec
[📷 Screenshot de la console CrowdSec avec la carte des attaques — à insérer ici]
Résultat
Votre serveur Nginx est désormais protégé par CrowdSec. Les logs sont analysés en continu, les comportements suspects sont détectés et bloqués automatiquement, et vous bénéficiez de la réputation communautaire dès l’installation.
CrowdSec peut fonctionner en parallèle de fail2ban, mais sur une installation récente CrowdSec suffit largement.