Crowdsec Traefik Bouncer
Traefik + CrowdSec + CAPTCHA (HTTPS) absichern
Ziel
Angreifer sollen bei HTTP-Angriffen nicht direkt blockiert, sondern auf eine CAPTCHA-Seite umgeleitet werden. Nach Bestehen des CAPTCHAs wird der Zugriff wieder freigegeben – ausschließlich über HTTPS.
Voraussetzungen
- Traefik läuft im Docker-Container mit aktiviertem HTTPS (Let's Encrypt)
- CrowdSec ist auf dem Docker-Host installiert
- Der cs-traefik-bouncer wird als Container betrieben
Vorbereitungen auf dem Host
- CrowdSec-API für den Container erreichbar machen
- vi /etc/crowdsec/config.yaml
listen_uri: 0.0.0.0:8080
- systemctl restart crowdsec
Bouncer in CrowdSec registrieren
- cscli bouncers add traefik-bouncer
→ API-Key notieren und später in config.yml eintragen
Bouncer-Konfiguration erstellen
- mkdir /mnt/docker/traefik/bouncer
- vi /mnt/docker/traefik/bouncer/config.yml
listen_uri: 0.0.0.0:8081 crowdsec_lapi_key: HIER_API_KEY_EINFÜGEN crowdsec_lapi_url: http://host.docker.internal:8080/ log_level: info mode: captcha
Docker-Setup
- vi /mnt/docker/traefik/docker-compose.yaml
version: '3.8'
services:
traefik:
image: traefik
container_name: traefik
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./conf:/conf
- ./letsencrypt:/letsencrypt
command:
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.file.directory=/conf"
- "--providers.file.watch=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.myresolver.acme.email=technik@samogo.de"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
networks:
- traefik
traefik-bouncer:
image: crowdsecurity/cs-traefik-bouncer
container_name: traefik-bouncer
volumes:
- ./bouncer/config.yml:/config.yml:ro
ports:
- "8081:8081"
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- traefik
networks: traefik:
Middleware für CAPTCHA
- vi /mnt/docker/traefik/conf/middleware.yaml
http:
middlewares:
crowdsec-captcha:
forwardAuth:
address: http://traefik-bouncer:8081/api/v1/forwardAuth
trustForwardHeader: true
authResponseHeaders:
- X-Crowdsec-Captcha-Result
Router und Services definieren
- vi /mnt/docker/traefik/conf/router.yaml
http:
routers:
traefik-ui:
rule: Host(`traefik.samogo.de`)
entryPoints:
- websecure
service: api@internal
middlewares:
- crowdsec-captcha
tls:
certResolver: myresolver
uptime-kuma:
rule: Host(`uptime-kuma.samogo.de`)
entryPoints:
- websecure
service: uptime-kuma
middlewares:
- crowdsec-captcha
tls:
certResolver: myresolver
services:
uptime-kuma:
loadBalancer:
servers:
- url: "http://uptime-kuma:3001"
System starten
- docker compose up -d
Testen
(Decision sollte CAPTCHA sein)
- Browser öffnen → CAPTCHA-Seite wird angezeigt
Fazit
Diese Konfiguration schützt Traefik-Dienste per HTTPS mit CrowdSec und CAPTCHA. Angreifer werden automatisch erkannt und gezielt mit einer Bestätigungsseite aufgehalten – ohne legitime Nutzer dauerhaft zu blockieren.