Crowdsec Traefik Bouncer: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | =Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service)= | + | =Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service mit Go-Plugin)= |
==Ziel== | ==Ziel== | ||
| − | HTTP-Angreifer sollen nicht | + | HTTP-Angreifer sollen nicht sofort blockiert, sondern auf eine CAPTCHA-Seite umgeleitet werden. Nach dem Bestehen wird der Zugriff freigegeben, und dabei verwenden wir das von dir gebaute Go-Plugin. |
==Voraussetzungen== | ==Voraussetzungen== | ||
| Zeile 9: | Zeile 9: | ||
* CrowdSec ist direkt auf dem Docker-Host installiert | * CrowdSec ist direkt auf dem Docker-Host installiert | ||
* Docker-Netzwerk heißt '''traefik-public''' | * Docker-Netzwerk heißt '''traefik-public''' | ||
| − | * | + | * Das Go-Plugin wurde erfolgreich gebaut und ist als .so-Datei vorhanden |
| − | |||
==CrowdSec vorbereiten== | ==CrowdSec vorbereiten== | ||
| Zeile 24: | Zeile 23: | ||
→ Den API-Key kopieren | → Den API-Key kopieren | ||
| − | == | + | ==Go-Plugin in Traefik integrieren== |
| − | ; | + | ;Plugin .so-Datei in den Traefik-Container kopieren: |
| − | * | + | *mkdir -p /mnt/docker/traefik/plugins/crowdsec |
| − | * | + | *cp /mnt/docker/traefik/crowdsec-bouncer-traefik-plugin/plugin.so /mnt/docker/traefik/plugins/crowdsec/ |
| − | ; | + | ;Traefik konfigurieren: |
| − | *vi /mnt/docker/traefik/ | + | *vi /mnt/docker/traefik/traefik.yaml |
| − | + | experimental: | |
| − | + | plugins: | |
| − | + | crowdsec: | |
| − | + | moduleName: "/mnt/docker/traefik/plugins/crowdsec/plugin.so" | |
| − | + | version: "v1.4.2" | |
==Docker-Compose erweitern== | ==Docker-Compose erweitern== | ||
| − | ;Captcha-Service | + | ;Captcha-Service in dein bestehendes Setup einfügen: |
captcha-auth: | captcha-auth: | ||
| − | + | image: crowdsecurity/cs-traefik-bouncer | |
| − | |||
container_name: captcha-auth | container_name: captcha-auth | ||
ports: | ports: | ||
| Zeile 54: | Zeile 52: | ||
- traefik-public | - traefik-public | ||
restart: unless-stopped | restart: unless-stopped | ||
| − | |||
| − | |||
==Middleware in Traefik definieren== | ==Middleware in Traefik definieren== | ||
| Zeile 69: | Zeile 65: | ||
- X-Crowdsec-Captcha-Result | - X-Crowdsec-Captcha-Result | ||
| − | == | + | ==Router beschreiben (Beispiel uptime-kuma)== |
*vi /mnt/docker/uptime-kuma/docker-compose.yaml | *vi /mnt/docker/uptime-kuma/docker-compose.yaml | ||
| Zeile 80: | Zeile 76: | ||
==System starten== | ==System starten== | ||
| − | *docker compose up -d | + | *docker compose up -d |
==Testen== | ==Testen== | ||
Version vom 9. April 2025, 11:56 Uhr
Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service mit Go-Plugin)
Ziel
HTTP-Angreifer sollen nicht sofort blockiert, sondern auf eine CAPTCHA-Seite umgeleitet werden. Nach dem Bestehen wird der Zugriff freigegeben, und dabei verwenden wir das von dir gebaute Go-Plugin.
Voraussetzungen
- Traefik läuft als Container
- HTTPS ist aktiv (Wildcard oder certresolver)
- CrowdSec ist direkt auf dem Docker-Host installiert
- Docker-Netzwerk heißt traefik-public
- Das Go-Plugin wurde erfolgreich gebaut und ist als .so-Datei vorhanden
CrowdSec vorbereiten
- API auf allen Interfaces verfügbar machen
- vi /etc/crowdsec/config.yaml
listen_uri: 0.0.0.0:8080
- systemctl restart crowdsec
- API-Schlüssel für den Bouncer erstellen
- cscli bouncers add traefik-captcha
→ Den API-Key kopieren
Go-Plugin in Traefik integrieren
- Plugin .so-Datei in den Traefik-Container kopieren
- mkdir -p /mnt/docker/traefik/plugins/crowdsec
- cp /mnt/docker/traefik/crowdsec-bouncer-traefik-plugin/plugin.so /mnt/docker/traefik/plugins/crowdsec/
- Traefik konfigurieren
- vi /mnt/docker/traefik/traefik.yaml
experimental:
plugins:
crowdsec:
moduleName: "/mnt/docker/traefik/plugins/crowdsec/plugin.so"
version: "v1.4.2"
Docker-Compose erweitern
- Captcha-Service in dein bestehendes Setup einfügen
captcha-auth:
image: crowdsecurity/cs-traefik-bouncer
container_name: captcha-auth
ports:
- "8081:8081"
volumes:
- ./captcha-config.yml:/config.yml:ro
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- traefik-public
restart: unless-stopped
Middleware in Traefik definieren
- vi /mnt/docker/traefik/conf/middleware.yaml
http:
middlewares:
crowdsec-captcha:
forwardAuth:
address: http://captcha-auth:8081/api/v1/forwardAuth
trustForwardHeader: true
authResponseHeaders:
- X-Crowdsec-Captcha-Result
Router beschreiben (Beispiel uptime-kuma)
- vi /mnt/docker/uptime-kuma/docker-compose.yaml
- "traefik.http.routers.uptime-kuma.rule=Host(`uptime-kuma.samogo.de`)" - "traefik.http.routers.uptime-kuma.entrypoints=websecure" - "traefik.http.routers.uptime-kuma.tls=true" - "traefik.http.routers.uptime-kuma.service=uptime-kuma" - "traefik.http.routers.uptime-kuma.middlewares=crowdsec-captcha@file"
System starten
- docker compose up -d
Testen
- CAPTCHA-Zwang auslösen
- cscli decisions add --ip DEINE.IP.ADRESSE --type captcha --duration 10m
- Seite im Browser aufrufen
→ Die CAPTCHA-Seite erscheint
Fazit
Mit dem Beispiel aus examples/captcha wird ein eigenständiger ForwardAuth-Dienst genutzt, um CAPTCHA mit Traefik und CrowdSec zu kombinieren – ohne Plugin oder Container aus der Registry. Das Setup ist portabel, nachvollziehbar und funktioniert unabhängig vom Plugin-Hub.