RousselTMLEARNING

Article · CrowdSec : de la découverte à l'expertise

Bouncers Nginx, Apache et HAProxy

1. Nginx et OpenResty #

Un bouncer en Lua.

Installer #

Le bouncer Nginx s'appuie sur le module Lua. Sur Ubuntu 22.xx, ce module peut manquer : passez à une version plus récente ou utilisez OpenResty, qui l'embarque.

sudo apt install nginx lua5.1 libnginx-mod-http-lua luarocks gettext-base lua-cjson
sudo apt install crowdsec-nginx-bouncer
sudo nginx -t && sudo systemctl reload nginx

Configurer #

Le fichier /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf se surcharge avec un fichier .conf.local.

API_URL=http://127.0.0.1:8080
API_KEY=VOTRE_CLE
MODE=stream
UPDATE_FREQUENCY=10
BOUNCING_ON_TYPE=all
FALLBACK_REMEDIATION=ban
RET_CODE=403
APPSEC_URL=http://127.0.0.1:7422
OptionRôle
MODElive par défaut, ou stream
BOUNCING_ON_TYPEall, ban, captcha
FALLBACK_REMEDIATIONRemédiation si le type reçu est inconnu
BAN_TEMPLATE_PATHPage HTML affichée aux IP bannies
REDIRECT_LOCATIONRedirige au lieu d’afficher la page
APPSEC_URLActive le WAF

Le captcha #

Le captcha laisse une chance à un utilisateur légitime, par exemple derrière une IP partagée. Trois fournisseurs : recaptcha, hcaptcha, turnstile. Nginx doit pouvoir les joindre : configurez resolver et lua_ssl_trusted_certificate.

CAPTCHA_PROVIDER=turnstile
SITE_KEY=VOTRE_SITE_KEY
SECRET_KEY=VOTRE_SECRET_KEY
CAPTCHA_EXPIRATION=3600
sudo cscli decisions add --ip 192.0.2.6 --duration 1h --type captcha

Apache #

Un bouncer Apache existe également, avec WAF, virtual patching et détection de robots via AppSec. Sa logique est identique : clé d'API, URL de la LAPI, puis rechargement du serveur. Voir la documentation dédiée.

2. HAProxy avec SPOA #

Déporter le contrôle hors de HAProxy.

Le principe #

HAProxy échange avec le bouncer SPOA par le protocole SPOE ; le bouncer s’appuie sur la Local API et AppSec

Ancien bouncer déprécié. L'ancien bouncer HAProxy en Lua, encore cité par de nombreux tutoriels, est déprécié. Utilisez le bouncer SPOA, le seul à prendre en charge AppSec.

Installer et configurer #

sudo apt install crowdsec-haproxy-spoa-bouncer
sudo cscli bouncers add haproxy-spoa
sudo cp /usr/share/doc/crowdsec-haproxy-spoa-bouncer/examples/crowdsec.cfg /etc/haproxy/crowdsec.cfg

Dans /etc/crowdsec/bouncers/crowdsec-spoa-bouncer.yaml, renseignez api_url, api_key et listen_tcp: 127.0.0.1:9000. Puis, dans haproxy.cfg :

frontend http-in
    bind *:80
    option http-buffer-request
    unique-id-format %[uuid()]
    unique-id-header X-Unique-ID
    filter spoe engine crowdsec config /etc/haproxy/crowdsec.cfg

    acl body_within_limit req.body_size -m int le 51200
    http-request send-spoe-group crowdsec crowdsec-http-body if body_within_limit || !{ req.body_size -m found }
    http-request send-spoe-group crowdsec crowdsec-http-no-body if !body_within_limit { req.body_size -m found }

    # Les pages de ban et de captcha sont dans examples/haproxy.cfg
    default_backend app

backend crowdsec-spoa
    mode tcp
    timeout connect 2s
    timeout server 60s
    server spoa 127.0.0.1:9000
sudo crowdsec-spoa-bouncer -c /etc/crowdsec/bouncers/crowdsec-spoa-bouncer.yaml -t
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart crowdsec-spoa-bouncer haproxy

Deux pièges #

  • IP réelle. Derrière un CDN, utilisez set-src avant les send-spoe-group, et n'autorisez que le proxy de confiance sur vos ports.
  • Limite de 50 Ko. Le corps d'une requête au-delà de cette taille n'est pas inspecté par le WAF. Un attaquant peut s'en servir pour le contourner : refusez ces requêtes, sauf sur vos chemins d'envoi de fichiers.

Sources #

Configurations issues de la documentation officielle consultée en novembre 2026 : ces bouncers n'ont pas été exécutés pour cet article.

📄 Bouncers CrowdSec pour Nginx, Apache et HAProxy →

Mon suivi

  • ⏱ Durée estimée : ≈ 7 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Poser une question

Articles recommandés

Les bouncers CrowdSec : principes et bouncer pare-feu

Comprendre les bouncers CrowdSec : où bloquer, modes live et stream, clés d'API, API des décision...

Bouncers CrowdSec : Cloudflare, équipements réseau, Kubernetes et bouncer sur mesure

Bloquer au CDN avec Cloudflare Workers, alimenter pfSense ou MikroTik avec Blocklist Mirror, prot...

Décisions, profils, allowlists et AppSec dans CrowdSec

Gérer les décisions avec cscli, adapter la durée et le type de blocage avec les profils, éviter l...

Protéger Traefik avec CrowdSec : le plugin bouncer

Mettre en place le bouncer CrowdSec dans Traefik : plugin, middleware, modes stream et live, IP r...

CrowdSec : comprendre le pare-feu collaboratif

Ce qu'est CrowdSec, comment il détecte et bloque les attaques : Security Engine, parsers, scénari...

Observabilité de CrowdSec : IP bannies, attaques bloquées, Prometheus et Grafana

Suivre CrowdSec : cscli metrics, IP bannies, attaques détectées, volume bloqué par les bouncers, ...

Gestion des certificats SSL/TLS avec Let's Encrypt et ACME

Apprenez à automatiser la génération et le renouvellement de vos certificats SSL/TLS avec Let's E...

Protocole ACME : serveur ACME, challenges http-01 et dns-01, automatisation TLS

Comprendre le protocole ACME : rôle du serveur ACME (Let's Encrypt, ZeroSSL, step-ca), challenges...

HAProxy dans Kubernetes : L'Ingress Controller Haute Performance

Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, opt...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !