Crowdsec Traefik Bouncer: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
=Traefik mit CrowdSec und CAPTCHA absichern (lokaler ForwardAuth-Service mit Go-Plugin)=
+
=FORWARD und DOCKER-USER Kette müssen auch gesperrt werden=
 
+
*vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
==Ziel==
+
  iptables_chains:
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.
+
   - INPUT
 
+
  - FORWARD
==Voraussetzungen==
+
  - DOCKER-USER
* Traefik läuft als Container
+
=Bouncer neustarten=
* HTTPS ist aktiv (Wildcard oder certresolver)
+
*systemctl restart crowdsec-firewall-bouncer.service
* 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 und in die Konfigurationsdatei einfügen (siehe Schritt Go-Plugin in Traefik integrieren)
 
 
 
==Go-Plugin in Traefik integrieren==
 
;Wir brauchen golang
 
*apt install golang
 
;Repo klonen und Plugin kompilieren
 
*cd /mnt/docker/traefik/
 
*git clone https://github.com/fbonalair/traefik-crowdsec-bouncer
 
*cd traefik-crowdsec-bouncer/
 
*go build -o plugin.so .
 
;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"
 
 
 
==Captcha-ForwardAuth einrichten==
 
;Captcha-ForwardAuth konfigurieren
 
*vi /mnt/docker/traefik/captcha-config.yml
 
listen_uri: 0.0.0.0:8081
 
crowdsec_lapi_key: '''HIER_DEN_API_KEY_EINFÜGEN'''  # API-Key hier einfügen
 
crowdsec_lapi_url: http://host.docker.internal:8080/
 
log_level: info
 
mode: captcha
 
 
 
==Middleware in Traefik definieren==
 
 
 
*vi /mnt/docker/traefik/conf/middleware.yaml
 
http:
 
  middlewares:
 
    crowdsec-captcha:
 
      forwardAuth:
 
        address: http://localhost:8081/api/v1/forwardAuth
 
        trustForwardHeader: true
 
        authResponseHeaders:
 
          - X-Crowdsec-Captcha-Result
 
 
 
==Middleware in Router einbinden (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
 
*https://uptime-kuma.samogo.de
 
 
 
→ 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.
 

Aktuelle Version vom 9. April 2025, 14:27 Uhr

FORWARD und DOCKER-USER Kette müssen auch gesperrt werden

  • vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
iptables_chains:
  - INPUT
  - FORWARD
  - DOCKER-USER

Bouncer neustarten

  • systemctl restart crowdsec-firewall-bouncer.service