Crowdsec Traefik Bouncer: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | =Traefik mit CrowdSec | + | =Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service)= |
==Ziel== | ==Ziel== | ||
| − | HTTP-Angreifer sollen nicht | + | HTTP-Angreifer sollen nicht direkt blockiert, sondern auf eine CAPTCHA-Seite umgeleitet werden. Nach dem Bestehen wird der Zugriff freigegeben. Es wird kein Plugin und kein Image aus einer Registry verwendet. |
==Voraussetzungen== | ==Voraussetzungen== | ||
| − | * Traefik läuft als Container | + | * Traefik läuft als Container |
| − | * HTTPS ist aktiv (Wildcard | + | * HTTPS ist aktiv (Wildcard oder certresolver) |
* CrowdSec ist direkt auf dem Docker-Host installiert | * CrowdSec ist direkt auf dem Docker-Host installiert | ||
| − | * | + | * Docker-Netzwerk heißt '''traefik-public''' |
| − | * | + | * Docker läuft auf Linux mit aktiviertem '''host-gateway''' |
| − | * | + | * ForwardAuth erfolgt per Middleware |
==CrowdSec vorbereiten== | ==CrowdSec vorbereiten== | ||
| + | ;API auf allen Interfaces verfügbar machen | ||
*vi /etc/crowdsec/config.yaml | *vi /etc/crowdsec/config.yaml | ||
listen_uri: 0.0.0.0:8080 | 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 | ||
| + | |||
| + | ==Captcha-ForwardAuth einrichten== | ||
| − | * | + | ;Repo klonen und Beispiel verwenden |
| + | *cd /usr/local/src | ||
| + | *git clone https://github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin.git | ||
| + | *cd crowdsec-bouncer-traefik-plugin/examples/captcha | ||
| − | * | + | ;Konfiguration anpassen |
| + | *vi config.yml | ||
| + | listen_uri: 0.0.0.0:8081 | ||
| + | crowdsec_lapi_key: '''HIER_DEN_KEY_EINFÜGEN''' | ||
| + | crowdsec_lapi_url: http://host.docker.internal:8080/ | ||
| + | log_level: info | ||
| + | mode: captcha | ||
| − | + | ==Docker-Compose erweitern== | |
| − | + | ;Captcha-Service in dein bestehendes Setup einfügen: | |
| + | captcha-auth: | ||
| + | build: ./crowdsec-bouncer-traefik-plugin/examples/captcha | ||
| + | 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 | ||
| − | + | → '''captcha-config.yml''' enthält den Inhalt von ''config.yml'' aus dem Beispiel | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | ==Middleware definieren== | + | ==Middleware in Traefik definieren== |
*vi /mnt/docker/traefik/conf/middleware.yaml | *vi /mnt/docker/traefik/conf/middleware.yaml | ||
| Zeile 38: | Zeile 63: | ||
middlewares: | middlewares: | ||
crowdsec-captcha: | 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== | ==System starten== | ||
| − | *docker compose up -d | + | *docker compose up -d --build |
==Testen== | ==Testen== | ||
| − | *cscli decisions add --ip | + | ;Captchazwang auslösen |
| + | *cscli decisions add --ip '''DEINE.IP.ADRESSE''' --type captcha --duration 10m | ||
| − | * | + | ;Aufruf im Browser |
| + | *https://uptime-kuma.samogo.de | ||
| − | → CAPTCHA-Seite erscheint | + | → Die CAPTCHA-Seite erscheint |
==Fazit== | ==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. | |
Version vom 9. April 2025, 11:13 Uhr
Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service)
Ziel
HTTP-Angreifer sollen nicht direkt blockiert, sondern auf eine CAPTCHA-Seite umgeleitet werden. Nach dem Bestehen wird der Zugriff freigegeben. Es wird kein Plugin und kein Image aus einer Registry verwendet.
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
- Docker läuft auf Linux mit aktiviertem host-gateway
- ForwardAuth erfolgt per Middleware
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
Captcha-ForwardAuth einrichten
- Repo klonen und Beispiel verwenden
- cd /usr/local/src
- git clone https://github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin.git
- cd crowdsec-bouncer-traefik-plugin/examples/captcha
- Konfiguration anpassen
- vi config.yml
listen_uri: 0.0.0.0:8081 crowdsec_lapi_key: HIER_DEN_KEY_EINFÜGEN crowdsec_lapi_url: http://host.docker.internal:8080/ log_level: info mode: captcha
Docker-Compose erweitern
- Captcha-Service in dein bestehendes Setup einfügen
captcha-auth:
build: ./crowdsec-bouncer-traefik-plugin/examples/captcha
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
→ captcha-config.yml enthält den Inhalt von config.yml aus dem Beispiel
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 --build
Testen
- Captchazwang auslösen
- cscli decisions add --ip DEINE.IP.ADRESSE --type captcha --duration 10m
- Aufruf im Browser
→ 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.