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 nginxConfigurer #
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| Option | Rôle |
|---|---|
MODE | live par défaut, ou stream |
BOUNCING_ON_TYPE | all, ban, captcha |
FALLBACK_REMEDIATION | Remédiation si le type reçu est inconnu |
BAN_TEMPLATE_PATH | Page HTML affichée aux IP bannies |
REDIRECT_LOCATION | Redirige au lieu d’afficher la page |
APPSEC_URL | Active 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=3600sudo cscli decisions add --ip 192.0.2.6 --duration 1h --type captchaApache #
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 #
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.cfgDans /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:9000sudo 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 haproxyDeux pièges #
- IP réelle. Derrière un CDN, utilisez
set-srcavant lessend-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.
