6.1. Einleitung

Dieses Kapitel bietet einen Überblick über Traefik, ein Open Source Reverse Proxy und Load Balancer Tool. TEs wurde für die Kontrolle und Verwaltung des Datenverkehrs in einer verteilten Anwendungsumgebung entwickelt. Traefik arbeitet als Edge-Router, der Netzwerkverkehr von Clients empfängt und an die entsprechenden Backend-Dienste weiterleitet. Traefik ist besonders gut für den Einsatz in Container-Umgebungen geeignet und lässt sich nahtlos in Tools wie Docker, Kubernetes und andere Container-Orchestrierungssysteme integrieren. Es unterstützt verschiedene Load-Balancing-Strategien, um den Datenverkehr auf die Backend-Services zu verteilen und eine optimale Auslastung zu erreichen.

Traefik bietet auch Funktionen wie SSL/TLS-Terminierung, Middleware für Funktionen wie Authentifizierung und Ratenbegrenzung, automatische Zertifikatserstellung und -erneuerung mit Let’s Encrypt sowie Überwachungs- und Metrikfunktionen zur Überwachung des Zustands der Infrastruktur und des Datenverkehrs. Insgesamt ermöglicht Traefik eine effiziente Verteilung des Netzwerkverkehrs und verbessert die Skalierbarkeit, Zuverlässigkeit und Leistung von Anwendungen in einer verteilten Umgebung, was es zu einem attraktiven Tool für viele Platformen oder Entwickler macht

6.1.1. Motivation

Die effiziente Verteilung des Netzwerkverkehrs ist entscheidend für den reibungslosen Betrieb moderner Anwendungen. Mit dem Aufkommen von Containerisierungstechnologien und der Notwendigkeit, Anwendungen auf einer Vielzahl von Hosts und Infrastrukturen bereitzustellen, ist ein zuverlässiges und flexibles Werkzeug zur Traffic-Steuerung unerlässlich. Traefik bietet eine einfache und effektive Lösung für diese Anforderungen und ermöglicht es Entwicklern und Betreibern, den Traffic in ihrer Infrastruktur intelligent zu verteilen. Wir selber wollen auch unsere privaten Infrastrukturen umbauen und weniger “maintenancelastig” gestalten. Das Certificate-Management und die einfache Konfiguration eines neuen Dienstes ist für uns daher ausschlaggebened.

6.2. Grundlagen

6.2.1. Architektur

Die Architektur von Traefik basiert auf dem Konzept der “Edge-Router”. Traefik fungiert als Reverse Proxy und Load Balancer, der den Netzwerkverkehr von Clients entgegennimmt und an die entsprechenden Backend-Dienste weiterleitet. Es verwendet dynamische Konfigurationen, um die Backend-Dienste zu erkennen und den Verkehr auf der Grundlage verschiedener Algorithmen und Regeln zu verteilen.

Traefik kann als eigenständige Anwendung oder als Teil einer Container-Umgebung (wie Docker Swarm oder Kubernetes) eingesetzt werden. Es kann mit verschiedenen Backend-Diensten und Lastausgleichsstrategien integriert werden, um eine skalierbare und zuverlässige Datenverkehrskontrolle zu ermöglichen.

6.2.2. Wichtige Begriffe

  • Router: Ein Router in Traefik definiert eine Regel dafür, wie eingehender Datenverkehr an die entsprechenden Backend-Dienste weitergeleitet werden soll. Router können auf Basis von Hostnamen, Pfaden, Header-Werten und anderen Kriterien konfiguriert werden.

  • Middleware: Die Middleware in Traefik bietet Funktionen wie SSL/TLS-Terminierung, Rewrite-Regeln, Authentifizierung, Ratenbegrenzung und mehr. Sie können auf Router- oder Service-Ebene angewandt werden, um spezifische Verkehrsanforderungen zu erfüllen.

  • Service: Ein Service in Traefik stellt einen Backend-Service dar, auf den der eingehende Datenverkehr verteilt wird. Dabei kann es sich um eine einzelne Anwendung oder eine Gruppe von Anwendungen handeln, die denselben Zweck erfüllen.

  • Provider: Traefik unterstützt verschiedene Provider, um Informationen über Backend-Services und deren Konfigurationen zu erhalten. Beispiele für Provider sind Docker, Kubernetes, Consul, etcd und viele andere.

6.2.3. Warum sollte man Traefik einsetzen?

Traefik ist eine gute Wahl, wenn es um die Steuerung und das Management des Datenverkehrs in einer verteilten Anwendungsumgebung geht. Es bietet eine Reihe von Vorteilen gegenüber Alternativen wie NGINX, Apache2 oder HAProxy.

Ein wichtiger Faktor ist, dass Traefik speziell für den Einsatz in Container-Umgebungen entwickelt wurde. Es lässt sich nahtlos in Tools wie Docker und Kubernetes integrieren und ermöglicht eine einfache Skalierung und Verwaltung von Anwendungen in einer Container-Umgebung. Traefik unterstützt die automatische Erkennung von Backend-Diensten und passt sich dynamisch an Veränderungen in der Umgebung an.

Darüber hinaus bietet Traefik eine einfache Konfiguration. Die deklarative Konfiguration in YAML oder TOML ist leicht zu verstehen und zu verwalten. Im Vergleich dazu erfordern NGINX, Apache2 und HAProxy oft eine detailliertere und komplexere Konfiguration.

Ein weiterer großer Vorteil von Traefik ist seine integrierte SSL/TLS-Unterstützung. Traefik bietet die automatische Erstellung und Erneuerung von Zertifikaten mit Let’s Encrypt, was die Einrichtung der SSL/TLS-Verschlüsselung vereinfacht und die Sicherheit der Anwendung gewährleistet. Dieser Prozess ist bei den anderen genannten Tools oft zeitaufwändig und kompliziert.

Traefik ermöglicht auch dynamisches Routing und Lastausgleich. Mit flexiblen Konfigurationsoptionen kann der Datenverkehr auf der Grundlage verschiedener Kriterien wie Hostnamen, Pfade und Header-Werte gesteuert werden. Dies ermöglicht eine intelligente Verteilung des Datenverkehrs auf die Backend-Dienste.

Ein weiterer Vorteil ist die Unterstützung für verschiedene Provider. Traefik kann mit verschiedenen Plattformen wie Docker, Kubernetes, Consul, etcd und anderen interagieren. Dies erleichtert die Integration in bestehende Infrastrukturen und ermöglicht eine nahtlose Zusammenarbeit mit anderen Tools.

Für Studenten ist Traefik ein spanndendes Tool, um verteilte Anwendungen miteinander zu verbinden und nach außen erreichbar zu machen.

6.3. Terraform verwenden

Traefik wird im Normalfall in Form eines Containers installiert. Das wird auch genauer in der Versuchsdurchführung besprochen.

6.3.1. Versuchsdurchführung

Der Versuch wird zusätzlich zu Traefik auch das Tool CrowdSec (ähnlich zu Fail2Ban) umfassen.

6.3.1.1. Voraussetzungen

Docker und Docker Compose müssen auf dem Host installiert sein.

6.3.1.2. Datei-/Verzeichnisstruktur

Für den Traefik Stack sollte am Anfang eine Dateistruktur erstellt werden, in welcher wir dann die Konfigurationen durchführen können.

$ mkdir -p /opt/containers/traefik-crowdsec-stack/{traefik,crowdsec/{config,data},config}
$ cd /opt/containers/traefik-crowdsec-stack

Nun müssen die initialen Dateien erstellt werden und die korrekten Berechtigungen gesetzt werden.

$ touch /opt/containers/traefik-crowdsec-stack/.env
$ touch /opt/containers/traefik-crowdsec-stack/config/{crowdsec.env,traefik.env,traefik-crowdsec-bouncer.env}
$ touch /opt/containers/traefik-crowdsec-stack/traefik/{acme_letsencrypt.json,traefik.yml,dynamic_conf.yml,tls_letsencrypt.json}
$ chmod 600 /opt/containers/traefik-crowdsec-stack/traefik/{acme_letsencrypt.json,tls_letsencrypt.json}

Nun muss die Docker Compose Datei für den Stack erstellt werden. nano docker-compose.yml

version: "3.9"
services:
  crowdsec:
    container_name: ${SERVICES_CROWDSEC_CONTAINER_NAME:-crowdsec}
    env_file: ./config/crowdsec.env
    hostname: ${SERVICES_CROWDSEC_HOSTNAME:-crowdsec}
    healthcheck:
      test: ["CMD", "cscli", "version"]
      interval: 20s
      timeout: 2s
      retries: 5
      start_period: 10s
    image: ${SERVICES_CROWDSEC_IMAGE:-crowdsecurity/crowdsec}:${SERVICES_CROWDSEC_IMAGE_VERSION:-latest}
    networks:
      crowdsec:
        ipv4_address: ${SERVICES_CROWDSEC_NETWORKS_CROWDSEC_IPV4:-172.31.254.254}
    restart: unless-stopped
    security_opt:
      - no-new-privileges=true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /var/log/auth.log:/var/log/auth.log:ro
      - /var/log/traefik:/var/log/traefik:ro
      - ./crowdsec/config:/etc/crowdsec
      - ./crowdsec/data:/var/lib/crowdsec/data
  traefik:
    container_name: ${SERVICES_TRAEFIK_CONTAINER_NAME:-traefik}
    depends_on:
      crowdsec:
        condition: service_healthy
    env_file: ./config/traefik.env
    hostname: ${SERVICES_TRAEFIK_HOSTNAME:-traefik}
    healthcheck:
      test: ["CMD", "traefik", "healthcheck", "--ping"]
      interval: 10s
      timeout: 1s
      retries: 3
      start_period: 10s
    image: ${SERVICES_TRAEFIK_IMAGE:-traefik}:${SERVICES_TRAEFIK_IMAGE_VERSION:-2.10}
    labels:
      traefik.docker.network: proxy
      traefik.enable: "true"
      traefik.http.routers.traefik.entrypoints: websecure
      traefik.http.routers.traefik.middlewares: default@file
      traefik.http.routers.traefik.rule: Host(${SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST})
      traefik.http.routers.traefik.service: api@internal
      traefik.http.routers.traefik.tls: "true"
      traefik.http.routers.traefik.tls.certresolver: http_resolver
      traefik.http.services.traefik.loadbalancer.sticky.cookie.httpOnly: "true"
      traefik.http.services.traefik.loadbalancer.sticky.cookie.secure: "true"
      traefik.http.routers.pingweb.rule: PathPrefix(`/ping`)
      traefik.http.routers.pingweb.service: ping@internal
      traefik.http.routers.pingweb.entrypoints: websecure
    networks:
      crowdsec:
        ipv4_address: ${SERVICES_TRAEFIK_NETWORKS_CROWDSEC_IPV4:-172.31.254.253}
      proxy:
        ipv4_address: ${SERVICES_TRAEFIK_NETWORKS_PROXY_IPV4:-172.30.255.254}
    ports:
      - "80:80"
      - "443:443"
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /var/log/traefik/:/var/log/traefik/
      - ./traefik/traefik.yml:/traefik.yml:ro
      - ./traefik/acme_letsencrypt.json:/acme_letsencrypt.json
      - ./traefik/tls_letsencrypt.json:/tls_letsencrypt.json
      - ./traefik/dynamic_conf.yml:/dynamic_conf.yml
  traefik_crowdsec_bouncer:
    container_name: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_CONTAINER_NAME:-traefik_crowdsec_bouncer}
    depends_on:
      crowdsec:
        condition: service_healthy
    env_file: ./config/traefik-crowdsec-bouncer.env
    hostname: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_HOSTNAME:-traefik-crowdsec-bouncer}
    image: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE:-fbonalair/traefik-crowdsec-bouncer}:${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE_VERSION:-latest}
    networks:
      crowdsec:
        ipv4_address: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_NETWORKS_CROWDSEC_IPV4:-172.31.254.252}
    restart: unless-stopped
networks:
  proxy:
    name: ${NETWORKS_PROXY_NAME:-proxy}
    driver: bridge
    ipam:
      config:
      - subnet: ${NETWORKS_PROXY_SUBNET_IPV4:-172.30.0.0/16}
    attachable: true
  crowdsec:
    name: ${NETWORKS_CROWDSEC_NAME:-crowdsec}
    driver: bridge
    ipam:
      config:
      - subnet: ${NETWORKS_CROWDSEC_SUBNET_IPV4:-172.31.0.0/16}
    attachable: true

Die meisten Einstellungen, darunter Containernamen, Hostnamen, Netzwerkeinstellungen und verwendete Docker-Images, werden im nächsten Schritt über Umgebungsvariablen in einer .env-Datei definiert.

nano /opt/containers/traefik-crowdsec-stack/.env

# Service Crowdsec
SERVICES_CROWDSEC_CONTAINER_NAME=crowdsec
SERVICES_CROWDSEC_HOSTNAME=crowdsec
SERVICES_CROWDSEC_IMAGE=crowdsecurity/crowdsec
SERVICES_CROWDSEC_IMAGE_VERSION=latest
SERVICES_CROWDSEC_NETWORKS_CROWDSEC_IPV4=172.31.254.254

# Service Traefik
SERVICES_TRAEFIK_CONTAINER_NAME=traefik
SERVICES_TRAEFIK_HOSTNAME=traefik
SERVICES_TRAEFIK_IMAGE=traefik
SERVICES_TRAEFIK_IMAGE_VERSION=2.10
SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST=`traefik.dvaplaceholder.de`
SERVICES_TRAEFIK_NETWORKS_CROWDSEC_IPV4=172.31.254.253
SERVICES_TRAEFIK_NETWORKS_PROXY_IPV4=172.30.255.254

# Service Traefik Crowdsec Bouncer
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_CONTAINER_NAME=traefik_crowdsec_bouncer
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_HOSTNAME=traefik-crowdsec-bouncer
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE=fbonalair/traefik-crowdsec-bouncer
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE_VERSION=latest
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_NETWORKS_CROWDSEC_IPV4=172.31.254.252

# Netzwerkeinstellungen
NETWORKS_PROXY_NAME=proxy
NETWORKS_PROXY_SUBNET_IPV4=172.30.0.0/16
NETWORKS_CROWDSEC_NAME=crowdsec
NETWORKS_CROWDSEC_SUBNET_IPV4=172.31.0.0/16

Die einzige Zeile, die angepasst werden muss, ist SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST. Hier wird die eigene Domain für das Traefik-Dashboard definiert.

Die Konfiguration in der Docker-Compose-Datei verwendet Healthchecks für Traefik und CrowdSec. Healthchecks sind praktische Funktionen, mit denen überprüft werden kann, ob ein Dienst ordnungsgemäß ausgeführt wird. Wenn ein Healthcheck fehlschlägt, weiß Docker, dass mit diesem Dienst etwas nicht stimmt und kann entsprechend reagieren. Die Healthchecks sind in diesem Zusammenhang besonders wichtig, weil sie und die Funktion depends_on es uns ermöglichen, die Reihenfolge und die Abhängigkeiten der einzelnen Dienste in unserem Stack besser zu kontrollieren.

Warum verwenden wir feste IP-Adressen? Der IP-Adressbereich jedes Netzes ist festgelegt, um eine gewisse Konsistenz in unserer Einrichtungskonfiguration zu gewährleisten. Wir weisen jeder Service-Instanz in jedem Netzwerk eine bestimmte IP-Adresse zu, die am Ende des verfügbaren IP-Bereichs liegt. Auf diese Weise stellen wir sicher, dass die IP-Adressen der Dienste konstant bleiben und nicht versehentlich durch den DHCP-Dienst von Docker einem anderen Container zugewiesen werden. Dies könnte zu Adresskonflikten führen.

6.3.1.3. Traefik Konfiguration an sich

Nun wenden wir unsere Aufmerksamkeit der traefik.yml-Konfigurationsdatei zu. In dieser Datei legen wir statische Konfigurationsoptionen fest.

nano /opt/containers/traefik-crowdsec-stack/traefik/traefik.yml

api:
  dashboard: true

metrics:
  prometheus:
    addrouterslabels: true

certificatesResolvers:
  http_resolver:
    acme:
      email: "rzkennung@hs-augsburg.de"
      storage: "acme_letsencrypt.json"
      httpChallenge:
        entryPoint: web
  tls_resolver:
    acme:
      tlsChallenge: true
      email: "rzkennung@hs-augsburg.de"
      storage: "tls_letsencrypt.json"
entryPoints:
  ping:
    address: ":88"
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: "websecure"
          scheme: "https"
      middlewares:
        - traefik-crowdsec-bouncer@file
  websecure:
    address: ":443"
    http:
      middlewares:
        - traefik-crowdsec-bouncer@file
    proxyProtocol:
      trustedIPs:
       - 10.0.0.0/8
       - 172.16.0.0/12
       - 192.168.0.0/16
    forwardedHeaders:
      trustedIPs:
       - 10.0.0.0/8
       - 172.16.0.0/12
       - 192.168.0.0/16

ping:
  entryPoint: "ping"

global:
  checknewversion: true
  sendanonymoususage: false

experimental:
  plugins:
    real-ip:
      moduleName: github.com/Paxxs/traefik-get-real-ip
      version: "v1.0.2"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: "proxy"
  file:
    filename: "./dynamic_conf.yml"
    watch: true
  providersThrottleDuration: 10

log:
  level: "INFO"
  filePath: "/var/log/traefik/traefik.log"
accessLog:
  filePath: "/var/log/traefik/access.log"
  bufferingSize: 100

Hier muss die RZ-Kennung E-Mail Adresse gegen eine richtige E-Mail Adresse ausgetauscht werden.

Nun zur “dynamischen Konfiguration” in welcher wir die TLS Optionen und header, etc. setzen

tls:
  options:
    default:
      minVersion: VersionTLS12
      cipherSuites:
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256
      curvePreferences:
        - CurveP521
        - CurveP384
      sniStrict: true
http:
  middlewares:
    default:
      chain:
        middlewares:
          - default-security-headers
          - gzip

    default-security-headers:
      headers:
        browserXssFilter: true
        contentTypeNosniff: true
        forceSTSHeader: true
        frameDeny: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000
        customFrameOptionsValue: "SAMEORIGIN"

    gzip:
      compress: {}

    traefik-crowdsec-bouncer:
      forwardauth:
        address: http://traefik-crowdsec-bouncer:8080/api/v1/forwardAuth
        trustForwardHeader: true

    real-ip-cf:
      plugin:
        real-ip:
          Proxy:
            - proxyHeadername: "*"
              realIP: Cf-Connecting-Ip
              OverwriteXFF: true

6.3.1.4. CrowdSec

Nun ist die initiale Konfiguration von Traefik fertig. Nun widmen wir uns dem zweiten Part: Crowdsec.

nano /opt/containers/traefik-crowdsec-stack/config/crowdsec.env

PGID="1000"
COLLECTIONS="crowdsecurity/traefik crowdsecurity/http-cve crowdsecurity/whitelist-good-actors crowdsecurity/postfix crowdsecurity/dovecot crowdsecurity/nginx"

Diese Umgebungsvariablen sind entscheidend für die Konfiguration von CrowdSec. Sie ermöglichen es, das Verhalten von CrowdSec fein abzustimmen und an die spezifischen Anforderungen deines Systems anzupassen

  • PGID: Dies steht für “Group ID” und bestimmt, unter welcher Gruppen-ID der CrowdSec-Prozess ausgeführt wird. In diesem Fall ist es die Gruppen-ID “1000”. Die Gruppen-ID sollte mit der ID einer bestehenden Gruppe in Ihrem System übereinstimmen, die über die erforderlichen Zugriffsrechte verfügt.

  • COLLECTIONS: Dies ist eine Liste von sogenannten “Sammlungsnamen”. Eine Sammlung in CrowdSec ist eine Gruppe von Szenarien, Parsern und Post Overflows, die einem bestimmten Zweck dienen. In diesem Fall werden die folgenden Collections verwendet:

  • crowdsecurity/traefik: Diese Sammlung ist speziell für die Überwachung und den Schutz von Traefik, einem modernen Reverse Proxy und Load Balancer.

  • crowdsecurity/http-cve: Diese Sammlung enthält Szenarien zur Erkennung bekannter Schwachstellen und Angriffe (CVEs) auf HTTP-Servern.

  • crowdsecurity/whitelist-good-actors: Eine Sammlung, die sicherstellt, dass bekannte “gute” Akteure nicht fälschlicherweise als bösartig erkannt werden.

  • crowdsecurity/postfix und crowdsecurity/dovecot: Diese beiden Sammlungen sind speziell für die Überwachung und den Schutz von Postfix- und Dovecot-Mailservern gedacht.

  • crowdsecurity/nginx: Eine Sammlung, die speziell für die Überwachung und den Schutz von Nginx-Webservern entwickelt wurde.

Nun müssen wir einige Daten von CrowdSec generieren lassen.

$ cd /opt/containers/traefik-crowdsec-stack
$ docker compose up crowdsec -d && docker compose down

Anpassung der Acquis-Datei: nano /opt/containers/traefik-crowdsec-stack/crowdsec/config/acquis.yaml

filenames:
 - /var/log/auth.log
 - /var/log/syslog
labels:
  type: syslog
---
filenames:
  - /var/log/traefik/*.log
labels:
  type: traefik
---

Im ersten Abschnitt der Konfigurationsdatei werden die Dateien auth.log und syslog zur Analyse hinzugefügt. Diesen Dateien wird die Bezeichnung “syslog” zugewiesen. Dadurch kann CrowdSec auf diese Dateien bestimmte Analysemethoden anwenden, die für Syslog-Protokolle geeignet sind.

Im zweiten Abschnitt der Konfigurationsdatei fügen wir alle Protokolldateien hinzu, die sich im Verzeichnis /var/log/traefik/ befinden und deren Dateinamen mit .log enden. Wir weisen diesen Dateien die Bezeichnung “traefik” zu. Dies ermöglicht CrowdSec die Anwendung spezifischer Analysemethoden, die für traefik-Protokolle geeignet sind.

6.3.1.4.1. CrowdSec und Traefik verbinden - Traefik CrowdSec Bouncer

CrowdSec ist jetzt in der Lage, Protokolldateien zu analysieren und verdächtige IP-Adressen in eine Sperrliste aufzunehmen - das ist ein großer Schritt! Aber in der aktuellen Konfiguration haben wir noch keine Maßnahmen ergriffen, um potenzielle Angriffe tatsächlich zu blockieren. Das ist die Aufgabe der sogenannten “Bouncer” in CrowdSec.

nano /opt/containers/traefik-crowdsec-stack/config/traefik-crowdsec-bouncer.env

# Access-Token damit Bouncer und CrowdSec kommunizieren können
CROWDSEC_BOUNCER_API_KEY=
# Hostname mit richtigem Port von CrowdSec
CROWDSEC_AGENT_HOST=${SERVICES_CROWDSEC_HOSTNAME}:8080

Nun muss noch der Access Token generiert werden.

$ cd /opt/containers/traefik-crowdsec-stack
$ docker compose up crowdsec -d
$ docker compose exec -t crowdsec cscli bouncers add traefik-crowdsec-bouncer
$ docker compose down

In der Ausgabe sollte etwas ähnliches wie folgt stehen

Api key for 'traefik-crowdsec-bouncer':
   eeee212hojhsdfsdsdeeeee

Dieser Schlüssel muss nun in die .env Datei kopiert werden.

nano /opt/containers/traefik-crowdsec-stack/config/traefik-crowdsec-bouncer.env

# Access-Token damit Bouncer und CrowdSec kommunizieren können
CROWDSEC_BOUNCER_API_KEY=eeee212hojhsdfsdsdeeeee
# Hostname mit richtigem Port von CrowdSec
CROWDSEC_AGENT_HOST=${SERVICES_CROWDSEC_HOSTNAME}:8080

Nun kann der Stack gestartet werden und die rudimentäre Konfiguration ist fertig.

$ cd /opt/containers/traefik-crowdsec-stack
$ docker compose up -d

Nach einer Zeit und einigen Aufrufen sollten wir auch erste Metriken zu den Verbindungsversuchen sehen können docker exec crowdsec cscli metrics

6.3.2. Literaturverzeichnis