Sécurité

Protéger Nginx (NPM/SWAG) avec CrowdSec — guide complet

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

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 :


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.

← Pourquoi j’ai monté mon homelab et ce que j’y ai vraiment apprisCrowdSec Web UI: Visualiser et gérer ses décisions depuis une interface moderne et gratuite – guide complet →
Laisser un commentaire