RousselTMLEARNING

Observabilité

Bouncers CrowdSec pour Nginx, Apache et HAProxy

Mettre en place les bouncers CrowdSec pour Nginx, OpenResty, Apache et HAProxy SPOA : configuration, page de blocage, captcha et AppSec.

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.

Articles liés

CrowdSec : comprendre le pare-feu collaboratif

Ce qu'est CrowdSec, comment il détecte et bloque les attaques : Security Engine, parsers, scénarios, Local AP…

CrowdSec ou Fail2ban : quelles différences ?

Comparaison de CrowdSec et Fail2ban : détection, blocage, partage, performances, multi-serveurs, et méthode p…

Installer et configurer CrowdSec : paquets, Docker, acquisition

Installer CrowdSec avec les paquets ou Docker, comprendre ses fichiers, déclarer les logs à lire, enrôler la …

Pour aller plus loin

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 !