Crowdsec Traefik Bouncer: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 7: Zeile 7:
  
 
* Traefik als Reverse Proxy
 
* Traefik als Reverse Proxy
* CrowdSec mit aktiver Erkennung (bereits eingerichtet)
+
* CrowdSec mit aktiver Erkennung
* cs-traefik-bouncer (stellt Middleware für CAPTCHA bereit)
+
* cs-traefik-bouncer (als Docker-Container)
 
* Eine statische CAPTCHA-Webseite
 
* Eine statische CAPTCHA-Webseite
  
Zeile 16: Zeile 16:
  
 
→ Key notieren und in config.yml bei crowdsec_lapi_key eintragen.
 
→ Key notieren und in config.yml bei crowdsec_lapi_key eintragen.
 +
 +
==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_DEN_API_KEY_EINFÜGEN
 +
crowdsec_lapi_url: http://crowdsec:8080/
 +
log_level: info
 +
mode: captcha
  
 
==CAPTCHA-Seite bereitstellen==
 
==CAPTCHA-Seite bereitstellen==
Zeile 21: Zeile 31:
 
*mkdir /mnt/docker/traefik/captcha
 
*mkdir /mnt/docker/traefik/captcha
 
*vi /mnt/docker/traefik/captcha/index.html
 
*vi /mnt/docker/traefik/captcha/index.html
  (einfache Seite mit „Ich bin kein Bot“-Button oder Link)
+
  (einfache HTML-Seite mit Bestätigungsbutton oder Hinweistext)
  
 
==Docker-Traefik erweitern==
 
==Docker-Traefik erweitern==
  
*vi docker-compose.yaml
+
*vi /mnt/docker/traefik/docker-compose.yaml
 
   traefik-bouncer:
 
   traefik-bouncer:
 
     image: crowdsecurity/cs-traefik-bouncer
 
     image: crowdsecurity/cs-traefik-bouncer
 +
    container_name: traefik-bouncer
 
     volumes:
 
     volumes:
 
       - ./bouncer/config.yml:/config.yml:ro
 
       - ./bouncer/config.yml:/config.yml:ro
Zeile 33: Zeile 44:
 
     ports:
 
     ports:
 
       - "8081:8081"
 
       - "8081:8081"
    environment:
 
      - GIN_MODE=release
 
 
     restart: unless-stopped
 
     restart: unless-stopped
  
Zeile 64: Zeile 73:
 
==Funktion==
 
==Funktion==
  
* CrowdSec erkennt Angreifer
+
* CrowdSec erkennt Angreifer anhand der HTTP-Zugriffe
* Anstatt IP zu bannen, wird eine CAPTCHA-Decision getroffen
+
* Statt sofort zu blockieren, wird eine CAPTCHA-Entscheidung gesetzt
* Der Traefik-Bouncer erkennt das und schickt den Client auf die CAPTCHA-Seite
+
* Der Traefik-Bouncer prüft dies und leitet auf die CAPTCHA-Seite um
* Nach erfolgreichem Zugriff wird die IP freigegeben
+
* Nach erfolgreichem Aufruf wird die IP automatisch freigegeben
  
 
==Testen==
 
==Testen==
  
*curl -s http://example.com/.env Decision sollte CAPTCHA sein
+
*curl -s http://example.com/.env
 +
(Decision sollte CAPTCHA sein)
 +
 
 
*Browser aufrufen → CAPTCHA-Seite wird angezeigt
 
*Browser aufrufen → CAPTCHA-Seite wird angezeigt
  
 
==Fazit==
 
==Fazit==
Mit dem cs-traefik-bouncer kann CrowdSec in Traefik-Systemen nicht nur blocken, sondern auch intelligent steuern – mit CAPTCHA.
+
Mit dem cs-traefik-bouncer lässt sich CrowdSec um ein intelligentes CAPTCHA-System erweitern. Angreifer können automatisiert ausgebremst werden, ohne legitime Nutzer dauerhaft zu sperren.

Version vom 9. April 2025, 08:52 Uhr

Traefik + CrowdSec + CAPTCHA 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.

Komponenten

  • Traefik als Reverse Proxy
  • CrowdSec mit aktiver Erkennung
  • cs-traefik-bouncer (als Docker-Container)
  • Eine statische CAPTCHA-Webseite

Bouncer in CrowdSec registrieren

  • cscli bouncers add traefik-bouncer

→ Key notieren und in config.yml bei crowdsec_lapi_key eintragen.

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_DEN_API_KEY_EINFÜGEN
crowdsec_lapi_url: http://crowdsec:8080/
log_level: info
mode: captcha

CAPTCHA-Seite bereitstellen

  • mkdir /mnt/docker/traefik/captcha
  • vi /mnt/docker/traefik/captcha/index.html
(einfache HTML-Seite mit Bestätigungsbutton oder Hinweistext)

Docker-Traefik erweitern

  • vi /mnt/docker/traefik/docker-compose.yaml
 traefik-bouncer:
   image: crowdsecurity/cs-traefik-bouncer
   container_name: traefik-bouncer
   volumes:
     - ./bouncer/config.yml:/config.yml:ro
     - ./captcha:/www
   ports:
     - "8081:8081"
   restart: unless-stopped

Traefik Middleware konfigurieren

  • 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

Middleware verwenden

  • vi /mnt/docker/traefik/conf/router.yaml
http:
  routers:
    web:
      entryPoints:
        - web
      rule: Host(`example.com`)
      service: myservice
      middlewares:
        - crowdsec-captcha

Funktion

  • CrowdSec erkennt Angreifer anhand der HTTP-Zugriffe
  • Statt sofort zu blockieren, wird eine CAPTCHA-Entscheidung gesetzt
  • Der Traefik-Bouncer prüft dies und leitet auf die CAPTCHA-Seite um
  • Nach erfolgreichem Aufruf wird die IP automatisch freigegeben

Testen

(Decision sollte CAPTCHA sein)
  • Browser aufrufen → CAPTCHA-Seite wird angezeigt

Fazit

Mit dem cs-traefik-bouncer lässt sich CrowdSec um ein intelligentes CAPTCHA-System erweitern. Angreifer können automatisiert ausgebremst werden, ohne legitime Nutzer dauerhaft zu sperren.