Crowdsec Traefik Bouncer: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Traefik + CrowdSec + CAPTCHA (HTTPS) absichern=
+
=FORWARD und DOCKER-USER Kette müssen auch gesperrt werden=
 
+
*vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
==Ziel==
+
  iptables_chains:
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.
+
   - INPUT
 
+
  - FORWARD
==Voraussetzungen==
+
   - DOCKER-USER
 
+
=Bouncer neustarten=
* Traefik läuft im Docker-Container mit aktiviertem HTTPS (Let's Encrypt)
+
*systemctl restart crowdsec-firewall-bouncer.service
* 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
 
<pre>
 
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"
 
</pre>
 
 
 
==System starten==
 
 
 
*docker compose up -d
 
 
 
==Testen==
 
 
 
*curl -s https://uptime-kuma.samogo.de/.env
 
(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.
 

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