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