7. Stack konfigurieren
7.1. docker-compose.yml
-Datei
In diesem Schritt beginnen wir mit der Konfiguration unserer docker-compose.yml
-Datei. Dafür verwenden wir den Texteditor nano
. Um die Verwaltung unseres Stacks übersichtlicher zu gestalten, wird die Konfiguration in mehrere Abschnitte aufgeteilt. Jeder Abschnitt deckt einen bestimmten Teil der Stack-Konfiguration ab.
nano docker-compose.yml
Mit dem obigen Befehl öffnen wir den Editor nano
die Datei docker-compose.yml
.
Der Inhalt der Datei wird wie folgt strukturiert, indem wir verschiedene Konfigurationsdateien aus dem compose
-Verzeichnis einbinden:
include: - compose/crowdsec.yml - compose/socket-proxy.yml - compose/traefik-crowdsec-bouncer.yml - compose/traefik.yml - compose/networks.yml
Jeder dieser Abschnitte bezieht sich auf eine spezifische Dienstkonfiguration innerhalb unseres Stacks und ermöglicht eine saubere und modulare Aufteilung.
7.2. compose
-Dateien
In diesem Schritt befassen wir uns mit den einzelnen modularen Konfigurationsdateien im Verzeichnis compose/
. Jede dieser Dateien enthält eine spezifische Konfiguration für die jeweiligen Dienste, die wir in unserem Stack verwenden. Durch die Aufteilung in mehrere Dateien wird die Verwaltung und Anpassung der einzelnen Dienste vereinfacht und die Übersichtlichkeit erhöht.
Die folgenden Dateien werden konfiguriert:
nano /opt/containers/traefik-crowdsec-stack/compose/crowdsec.yml nano /opt/containers/traefik-crowdsec-stack/compose/socket-proxy.yml nano /opt/containers/traefik-crowdsec-stack/compose/traefik-crowdsec-bouncer.yml nano /opt/containers/traefik-crowdsec-stack/compose/traefik.yml nano /opt/containers/traefik-crowdsec-stack/compose/networks.yml
services: crowdsec: container_name: ${SERVICES_CROWDSEC_CONTAINER_NAME:-crowdsec} env_file: ${ABSOLUTE_PATH}/data/crowdsec/.env hostname: ${SERVICES_CROWDSEC_HOSTNAME:-crowdsec} healthcheck: test: ["CMD", "cscli", "version"] timeout: 2s interval: 20s 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.127.254} ipv6_address: ${SERVICES_CROWDSEC_NETWORKS_CROWDSEC_IPV6:-fd00:1:be:a:7001:0:3e:6fff} socket_proxy: ipv4_address: ${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.252} ipv6_address: ${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8ffd} restart: unless-stopped security_opt: - no-new-privileges=true volumes: - ${ABSOLUTE_PATH}/data/crowdsec/config:/etc/crowdsec - ${ABSOLUTE_PATH}/data/crowdsec/data:/var/lib/crowdsec/data - /var/log/auth.log:/var/log/auth.log:ro - /var/log/traefik:/var/log/traefik:ro
services: socket-proxy: container_name: ${SERVICES_SOCKET_PROXY_CONTAINER_NAME:-socket-proxy} env_file: ${ABSOLUTE_PATH}/data/socket-proxy/.env hostname: ${SERVICES_SOCKET_PROXY_HOSTNAME:-socket-proxy} healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:2375/_ping || exit 1"] timeout: 3s interval: 20s retries: 3 start_period: 10s image: ${SERVICES_SOCKET_PROXY_IMAGE:-lscr.io/linuxserver/socket-proxy}:${SERVICES_SOCKET_PROXY_IMAGE_VERSION:-latest} networks: socket_proxy: ipv4_address: ${SERVICES_SOCKET_PROXY_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.254} ipv6_address: ${SERVICES_SOCKET_PROXY_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8fff} read_only: true restart: unless-stopped tmpfs: - /run volumes: - /var/run/docker.sock:/var/run/docker.sock:ro
services: traefik_crowdsec_bouncer: container_name: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_CONTAINER_NAME:-traefik_crowdsec_bouncer} depends_on: crowdsec: condition: service_healthy env_file: ${ABSOLUTE_PATH}/data/traefik-crowdsec-bouncer/.env hostname: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_HOSTNAME:-traefik-crowdsec-bouncer} image: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE:-ghcr.io/freifunkmuc/traefik-crowdsec-bouncer}:${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE_VERSION:-latest} networks: crowdsec: ipv4_address: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_NETWORKS_CROWDSEC_IPV4:-172.31.127.252} ipv6_address: ${SERVICES_TRAEFIK_CROWDSEC_BOUNCER_NETWORKS_CROWDSEC_IPV6:-fd00:1:be:a:7001:0:3e:6ffd} restart: unless-stopped
services: traefik: container_name: ${SERVICES_TRAEFIK_CONTAINER_NAME:-traefik} depends_on: crowdsec: condition: service_healthy socket-proxy: condition: service_healthy env_file: ${ABSOLUTE_PATH}/data/traefik/.env hostname: ${SERVICES_TRAEFIK_HOSTNAME:-traefik} healthcheck: test: ["CMD", "traefik", "healthcheck", "--ping"] timeout: 1s interval: 10s retries: 3 start_period: 10s image: ${SERVICES_TRAEFIK_IMAGE:-traefik}:${SERVICES_TRAEFIK_IMAGE_VERSION:-3.1} labels: traefik.enable: "true" traefik.http.routers.traefik-dashboard.entrypoints: websecure traefik.http.routers.traefik-dashboard.middlewares: traefik-dashboard-auth@file traefik.http.routers.traefik-dashboard.rule: ${SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST:-HOST(`traefik.yourdomain.com`)} traefik.http.routers.traefik-dashboard.service: api@internal traefik.http.routers.traefik-dashboard.tls: "true" traefik.http.routers.traefik-dashboard.tls.certresolver: tls_resolver traefik.http.services.traefik-dashboard.loadbalancer.sticky.cookie.httpOnly: "true" traefik.http.services.traefik-dashboard.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.127.253} ipv6_address: ${SERVICES_TRAEFIK_NETWORKS_CROWDSEC_IPV6:-fd00:1:be:a:7001:0:3e:6ffe} proxy: ipv4_address: ${SERVICES_TRAEFIK_NETWORKS_PROXY_IPV4:-172.31.191.254} ipv6_address: ${SERVICES_TRAEFIK_NETWORKS_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:7fff} socket_proxy: ipv4_address: ${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.253} ipv6_address: ${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8ffe} ports: - mode: host target: 80 published: "80" protocol: tcp - mode: host target: 443 published: "443" protocol: tcp restart: unless-stopped security_opt: - no-new-privileges:true volumes: - /etc/localtime:/etc/localtime:ro - ${ABSOLUTE_PATH}/data/traefik/traefik.yml:/etc/traefik/traefik.yml - ${ABSOLUTE_PATH}/data/traefik/.htpasswd:/etc/traefik/.htpasswd - ${ABSOLUTE_PATH}/data/traefik/certs/acme_letsencrypt.json:/etc/traefik/acme_letsencrypt.json - ${ABSOLUTE_PATH}/data/traefik/certs/tls_letsencrypt.json:/etc/traefik/tls_letsencrypt.json - ${ABSOLUTE_PATH}/data/traefik/dynamic_conf:/etc/traefik/dynamic_conf:ro - /var/log/traefik/:/var/log/traefik/
networks: crowdsec: name: ${NETWORKS_CROWDSEC_NAME:-crowdsec} driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: ${NETWORKS_CROWDSEC_SUBNET_IPV4:-172.31.64.0/18} - subnet: ${NETWORKS_CROWDSEC_SUBNET_IPV6:-fd00:1:be:a:7001:0:3e:6000/116} attachable: true proxy: name: ${NETWORKS_PROXY_NAME:-proxy} driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: ${NETWORKS_PROXY_SUBNET_IPV4:-172.31.128.0/18} - subnet: ${NETWORKS_PROXY_SUBNET_IPV6:-fd00:1:be:a:7001:0:3e:7000/116} attachable: true socket_proxy: name: ${NETWORKS_SOCKET_PROXY_NAME:-socket_proxy} driver: bridge enable_ipv6: true ipam: driver: default config: - subnet: ${NETWORKS_SOCKET_PROXY_SUBNET_IPV4:-172.31.192.0/18} - subnet: ${NETWORKS_SOCKET_PROXY_SUBNET_IPV6:-fd00:1:be:a:7001:0:3e:8000/116} attachable: true internal: true
7.3. DOTENV anpassen
In diesem Schritt passen wir die .env
-Datei für unsere spezifischen Anforderungen an. Im Rahmen dieses Projekts haben wir mehrere .env
-Dateien erstellt, um die Konfigurationen flexibel und servicebezogen anpassen zu können. Dies ermöglicht uns, die Einstellungen für jeden Dienst gezielt zu verwalten und bei Bedarf zu modifizieren.
7.3.1. Allgemeine .env
-Datei
Zunächst bearbeiten wir die allgemeine .env
-Datei, die sich im Hauptverzeichnis unseres Projekts befindet:
nano /opt/containers/traefik-crowdsec-stack/.env
ABSOLUTE_PATH=${PWD} TZ=Europe/Berlin SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST=HOST(`unserewunschdomain.de`)
Erklärung der Konfiguration:
- ABSOLUTE_PATH=${PWD}: Dieser Wert wird automatisch auf das aktuelle Arbeitsverzeichnis gesetzt, um dynamische Pfade innerhalb des Projekts zu ermöglichen.
- TZ=Europe/Berlin: Die Zeitzone wird auf Mitteleuropäische Zeit (CET/CEST) festgelegt. Dies stellt sicher, dass alle zeitbasierten Aktionen korrekt in der deutschen Zeitzone durchgeführt werden.
- SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST=
HOST(unserewunschdomain.de)
: Hier legen wir den Hostnamen fest, den Traefik verwendet. Ob wir uns für eine Second-Level-Domain oder eine Third-Level-Domain entscheidest, bleibt dabei uns überlassen. Wichtig ist dabei, die richtige Notation mit den Backticks (`
) einzuhalten, um sicherzustellen, dass die Domain korrekt interpretiert wird. Dies sollte die gewünschte Domain des Projekts sein, um Anfragen richtig weiterzuleiten.
Hinweis:
Wir beschränken uns bewusst darauf, nur die nötigsten Variablen in der allgemeinen .env
-Datei zu definieren. Zusätzliche Variablen, die in spezifischen compose
-Dateien verwendet werden, nehmen wir hier nicht auf, um die Konfiguration schlank und übersichtlich zu halten. Diese zusätzlichen Variablen werden nur bei Bedarf in den jeweiligen Dienst-Konfigurationsdateien gesetzt.
7.3.2. .env
-Datei für CrowdSec
Im nächsten Schritt passen wir die .env
-Datei von CrowdSec an, um unsere spezifischen Anforderungen und Konfigurationen für den CrowdSec-Container festzulegen. Diese Datei steuert wichtige Einstellungen für den Betrieb von CrowdSec.
Wir öffnen die Datei mit dem folgenden Befehl:
nano /opt/containers/traefik-crowdsec-stack/data/crowdsec/.env
TZ=$TZ # Zugriff auf Docker-Socket-Proxy DOCKER_HOST=tcp://socket-proxy:2375 # Bouncers BOUNCER_KEY_TRAEFIK=$BOUNCER_KEY_TRAEFIK BOUNCER_KEY_FIREWALL=$BOUNCER_KEY_FIREWALL # Hub NO_HUB_UPGRADE="false" # Überspringen des Updates via Hub / Upgrade beim Start des Containers COLLECTIONS="crowdsecurity/linux crowdsecurity/traefik" # Sammlungen (Collections), die installiert werden sollen, getrennt durch Leerzeichen: COLLECTIONS="crowdsecurity/linux crowdsecurity/traefik" # PARSERS="" # Parser, die installiert werden sollen, getrennt durch Leerzeichen. # SCENARIOS="" # Szenarien, die installiert werden sollen, getrennt durch Leerzeichen. # POSTOVERFLOWS="" # Postoverflows, die installiert werden sollen, getrennt durch Leerzeichen. # CONTEXTS="" # Kontextdateien, die installiert werden sollen, getrennt durch Leerzeichen. # APPSEC_CONFIGS="" # AppSec-Konfigurationsdateien, die installiert werden sollen, getrennt durch Leerzeichen. # APPSEC_RULES="" # AppSec-Regeln, die installiert werden sollen, getrennt durch Leerzeichen. # DISABLE_COLLECTIONS="" # Sammlungen, die entfernt werden sollen, getrennt durch Leerzeichen: DISABLE_COLLECTIONS="crowdsecurity/linux crowdsecurity/nginx" # DISABLE_PARSERS="" # Parser, die entfernt werden sollen, getrennt durch Leerzeichen. # DISABLE_SCENARIOS="" # Szenarien, die entfernt werden sollen, getrennt durch Leerzeichen. # DISABLE_POSTOVERFLOWS="" # Postoverflows, die entfernt werden sollen, getrennt durch Leerzeichen. # DISABLE_CONTEXTS="" # Kontextdateien, die entfernt werden sollen, getrennt durch Leerzeichen. # DISABLE_APPSEC_CONFIGS="" # AppSec-Konfigurationsdateien, die entfernt werden sollen, getrennt durch Leerzeichen. # DISABLE_APPSEC_RULES="" # AppSec-Regeln, die entfernt werden sollen, getrennt durch Leerzeichen. # Log-Verbosity # LEVEL_FATAL=false # Erzwingen des FATAL-Protokollierungslevels für die Container-Protokolle. # LEVEL_ERROR=false # Erzwingen des ERROR-Protokollierungslevels für die Container-Protokolle. # LEVEL_WARN=false # Erzwingen des WARN-Protokollierungslevels für die Container-Protokolle. # LEVEL_INFO=false # Erzwingen des INFO-Protokollierungslevels für die Container-Protokolle. # LEVEL_DEBUG=false # Erzwingen des DEBUG-Protokollierungslevels für die Container-Protokolle. # LEVEL_TRACE=false # Erzwingen des TRACE-Protokollierungslevels (sehr ausführlich) für die Container-Protokolle.
- TZ: Hier wird die Zeitzone festgelegt, die auf die allgemeine Zeitzoneneinstellung des Systems ($TZ) verweist.
- NO_HUB_UPGRADE: Legt fest, ob automatische Updates über den CrowdSec Hub beim Start des Containers durchgeführt werden sollen.
- COLLECTIONS: Hier definieren wir, welche Sammlungen (z. B. für traefik oder linux) automatisch installiert werden sollen.
- Log-Verbosity: Ermöglicht das Einstellen der Protokollierungsstufen für den Container, um detaillierte Informationen über den Zustand und mögliche Fehler des Containers zu erhalten.
Optionale Einstellungen wie Parser, Szenarien oder AppSec-Regeln können nach Bedarf angepasst oder hinzugefügt werden, um spezifische Sicherheitsanforderungen abzudecken.
7.3.3. .env
-Datei für den Socket-Proxy
Nun passen wir die .env
-Datei für den Socket-Proxy an. Diese Datei befindet sich im Verzeichnis data/socket-proxy/.env
. Da das Docker-Image des Socket-Proxy kein tzdata
-Paket enthält, ist es hier nicht nötig, die Zeitzone (TZ
) anzugeben. Stattdessen konzentrieren wir uns auf die spezifischen Konfigurationsoptionen für den Socket-Proxy.
Öffne die Datei zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/socket-proxy/.env
INFO=1 CONTAINERS=1 POST=0 BUILD=0 COMMIT=0 CONFIGS=0 DISTRIBUTION=0 EXEC=0 GRPC=0 IMAGES=0 NETWORKS=0 NODES=0 PLUGINS=0 SERVICES=0 SESSION=0 SWARM=0 SYSTEM=0 TASKS=0 VOLUMES=0
Erklärung der Konfiguration:
- INFO=1: Aktiviert grundlegende Informationen für den Socket-Proxy.
- CONTAINERS=1: Aktiviert die Unterstützung für Container.
- POST=0, BUILD=0, COMMIT=0, usw.: Diese Optionen deaktivieren bestimmte Funktionen, die für diesen Proxy-Dienst nicht benötigt werden.
Durch das Setzen dieser Umgebungsvariablen können wir die Funktionen und das Verhalten des Socket-Proxy-Dienstes gezielt steuern.
7.3.4. .env
-Datei für den CrowdSec Bouncer für Traefik
Im nächsten Schritt bearbeiten wir die .env
-Datei für den CrowdSec Bouncer, der speziell für die Integration mit Traefik konfiguriert wird. Diese Datei befindet sich im Verzeichnis data/traefik-crowdsec-bouncer/.env
. Hier definieren wir die Zeitzone sowie die API-Konfiguration, um den Bouncer mit dem CrowdSec-Agent zu verbinden.
Öffne die Datei zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik-crowdsec-bouncer/.env
TZ=$TZ GIN_MODE="debug" # Wenn das System sauber läuft kann hier "release" gesetzt werden CROWDSEC_BOUNCER_API_KEY=$BOUNCER_KEY_TRAEFIK CROWDSEC_AGENT_HOST=${SERVICES_CROWDSEC_HOSTNAME:-crowdsec}:8080
Erklärung der Konfiguration:
- TZ=$TZ: Verwendet die globale Zeitzoneneinstellung (
$TZ
), die in der allgemeinen.env
-Datei festgelegt wurde. - CROWDSEC_BOUNCER_API_KEY=$BOUNCER_KEY_TRAEFIK: Hier wird der generierte API-Schlüssel für den Traefik-Bouncer verwendet, den wir später in der
.env
-Datei speichern werden. Dies ermöglicht die Authentifizierung des Bouncers bei CrowdSec. - CROWDSEC_AGENT_HOST=${SERVICES_CROWDSEC_HOSTNAME:-crowdsec}:8080: Definiert den Hostnamen des CrowdSec-Agenten. Standardmäßig wird der Dienst auf
crowdsec:8080
erwartet, es sei denn, der Wert wird durch eine andere Umgebungsvariable (SERVICES_CROWDSEC_HOSTNAME
) überschrieben.
Diese Einstellungen sorgen dafür, dass der CrowdSec Bouncer korrekt mit dem Traefik-Dienst und dem CrowdSec-Agenten kommunizieren kann, um verdächtige Anfragen zu blockieren und den Schutz zu gewährleisten.
7.3.5. .env
-Datei für Traefik
Nun passen wir die .env
-Datei für den Traefik-Dienst an. Diese Datei befindet sich im Verzeichnis data/traefik/.env
. Hier wird die Zeitzoneneinstellung (TZ
) festgelegt, die für die allgemeine Konfiguration von Traefik benötigt wird.
Öffne die Datei zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/.env
TZ=$TZ
Erklärung der Konfiguration:
- TZ=$TZ: Hier wird die globale Zeitzoneneinstellung (
$TZ
) verwendet, die in der allgemeinen.env
-Datei des Projekts definiert wurde. Diese Einstellung stellt sicher, dass Traefik die gleiche Zeitzone wie die anderen Dienste verwendet.
Mit dieser Konfiguration bleibt der Traefik-Dienst konsistent in Bezug auf Zeitzoneneinstellungen, was wichtig ist, um Logs und zeitbasierte Aktionen richtig zu synchronisieren.
7.3.6. API Key für den CrowdSec Bouncer für Traefik generieren
Um den API-Schlüssel für den CrowdSec Bouncer zu generieren, verwenden wir einen sicheren Schlüssel, der mit openssl
erstellt wird. Dieser Schlüssel wird sowohl in der .env
-Datei gespeichert als auch im Terminal angezeigt, damit er bei Bedarf kopiert werden kann.
Führe die folgenden Befehle aus, um den API-Schlüssel zu generieren:
BOUNCER_PASSWORD=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#$%^&*()-_=+[]{}<>?|') echo "BOUNCER_KEY_TRAEFIK=\"$BOUNCER_PASSWORD\"" >> /opt/containers/traefik-crowdsec-stack/.env echo "Generated BOUNCER_KEY_TRAEFIK: $BOUNCER_PASSWORD"
Erklärung der Schritte:
- BOUNCER_PASSWORD=$(openssl rand -base64 48 | tr -dc ‘a-zA-Z0-9!@#$%^&*()-_=+[]{}<>?|’):
- Mit diesem Befehl wird ein komplexes, sicheres Passwort generiert, das 48 Zeichen lang ist und eine Kombination aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält.
- echo “BOUNCER_KEY_TRAEFIK=\”$BOUNCER_PASSWORD\”” >> /opt/containers/traefik-crowdsec-stack/.env:
- Das generierte Passwort wird als
BOUNCER_KEY_TRAEFIK
in die.env
-Datei geschrieben, um es für den Traefik Bouncer zu speichern.
- Das generierte Passwort wird als
- echo “Generated BOUNCER_KEY_TRAEFIK: $BOUNCER_PASSWORD”:
- Der generierte API-Schlüssel wird im Terminal ausgegeben, sodass er vom Benutzer kopiert und an anderer Stelle verwendet werden kann.
7.4. Traefik konfigurieren
7.4.1. Konfiguration der traefik.yml
In diesem Abschnitt widmen wir uns der statischen Konfiguration von Traefik in der Datei traefik.yml
. Diese Datei definiert die grundlegenden Einstellungen für den Traefik-Dienst, wie API-Zugriff, Protokolle, ACME-Zertifikate und Netzwerkeinstellungen.
Öffne die Konfigurationsdatei mit folgendem Befehl:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/traefik.yml
api: dashboard: true metrics: prometheus: addRoutersLabels: true certificatesResolvers: http_resolver: acme: email: "deine@email.de" storage: "/etc/traefik/acme_letsencrypt.json" httpChallenge: entryPoint: web tls_resolver: acme: email: "deine@email.de" storage: "/etc/traefik/tls_letsencrypt.json" tlsChallenge: {} entryPoints: ping: address: ':88' web: address: ':80' http: redirections: entryPoint: to: websecure scheme: https websecure: address: ':443' http: middlewares: - default@file ping: entryPoint: "ping" global: checknewversion: true sendanonymoususage: false providers: docker: endpoint: "tcp://socket-proxy:2375" exposedByDefault: false network: "proxy" file: directory: "/etc/traefik/dynamic_conf" watch: true providersThrottleDuration: 10s log: level: INFO filePath: "/var/log/traefik/traefik.log" format: json maxSize: 10 maxBackups: 10 maxAge: 14 accessLog: filePath: "/var/log/traefik/access.log" format: json bufferingSize: 50 fields: defaultMode: keep
Erklärung der Konfiguration:
- API und Dashboard:
api.dashboard: true
: Aktiviert das Traefik-Dashboard, welches über die API bereitgestellt wird.
- Metrics:
metrics.prometheus.addRoutersLabels: true
: Aktiviert Prometheus-Metriken und fügt Router-Labels hinzu.
- Zertifikatsresolver (Let’s Encrypt):
certificatesResolvers
: Hier konfigurieren wir zwei Resolver:- http_resolver für HTTP-Challenges.
- tls_resolver für TLS-Challenges.
- E-Mail-Adresse: Passe die E-Mail-Adresse unter beiden Resolvers an, da diese von Let’s Encrypt verwendet wird. Wichtig: Beide Resolver müssen die gleiche E-Mail-Adresse verwenden, um Fehler zu vermeiden.
- Entry Points:
- web: Der HTTP-Eingangspunkt auf Port 80 leitet alle Anfragen per HTTPS weiter (über
websecure
). - websecure: HTTPS-Eingangspunkt auf Port 443
- ping: Ein spezieller Ping-Endpoint auf Port 88 zur Gesundheitsüberwachung.
- web: Der HTTP-Eingangspunkt auf Port 80 leitet alle Anfragen per HTTPS weiter (über
- Global:
checknewversion: true
: Aktiviert die Überprüfung auf neue Versionen von Traefik.sendanonymoususage: false
: Deaktiviert das Senden von anonymen Nutzungsdaten.
- Providers:
- Docker: Konfiguriert den Docker-Provider für die automatische Erkennung von Diensten über einen Socket-Proxy.
- File: Aktiviert die Dateikonfiguration über ein Verzeichnis für dynamische Konfigurationen.
- Log- und Access-Log-Einstellungen:
- Log: Legt das Log-Level auf
INFO
fest und gibt den Speicherort der Logs an. - AccessLog: Aktiviert das Access-Log und speichert es in der angegebenen Datei. Bestimmte Felder wie
StartUTC
werden ausgeblendet.
- Log: Legt das Log-Level auf
Wichtiger Hinweis:
Die E-Mail-Adresse unter certificatesResolvers
muss für beide Resolver identisch sein. Sollten zwei verschiedene E-Mail-Adressen verwendet werden, führt dies zu einem Fehler:
traefik.go:81: command traefik error: unable to initialize certificates resolver "tls_resolver", all the acme resolvers must use the same email
Daher ist es wichtig, dass du die E-Mail-Adresse korrekt anpasst und beide Resolver auf die gleiche Adresse setzen, um Let’s Encrypt zu nutzen.
7.4.2. Konfiguration von TLS
In diesem Schritt konfigurieren wir die TLS-Einstellungen in der Datei tls.yml
, um die Sicherheitsstandards für die HTTPS-Kommunikation in Traefik festzulegen. Diese Datei befindet sich im Verzeichnis data/traefik/dynamic_conf/
.
Öffne die Datei zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/tls.yml
tls: options: default: minVersion: VersionTLS12 cipherSuites: - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA curvePreferences: - CurveP521 - CurveP384 sniStrict: true
Erklärung der Konfiguration:
- minVersion: VersionTLS12: Diese Option legt fest, dass Traefik nur TLS-Verbindungen ab Version 1.2 zulässt. Dies sorgt für eine erhöhte Sicherheit, da ältere TLS-Versionen wie 1.0 und 1.1 als unsicher gelten.
- cipherSuites: Hier werden die bevorzugten Cipher-Suiten festgelegt. Dies sind Algorithmen, die für die Verschlüsselung von Verbindungen verwendet werden. Die aufgelisteten Suiten bieten eine hohe Sicherheit und sind weit verbreitet.
- curvePreferences: Die bevorzugten elliptischen Kurven werden hier definiert. Diese werden in der TLS-Verschlüsselung verwendet und bieten eine starke kryptografische Sicherheit. Die Kurven
CurveP521
undCurveP384
werden bevorzugt. - sniStrict: true: Diese Option aktiviert den SNI (Server Name Indication)-Modus und erzwingt, dass der Hostname bei TLS-Verbindungen übereinstimmen muss. Dies erhöht die Sicherheit, da die Verbindung nur zustande kommt, wenn der angeforderte Hostname korrekt ist.
Diese Konfiguration sorgt dafür, dass die HTTPS-Verbindungen in deinem Traefik-Setup mit hohen Sicherheitsstandards verschlüsselt und abgesichert werden.
7.4.3. Konfiguration von http.middlewares.*
In diesem Abschnitt konfigurieren wir die HTTP-Middlewares, die Traefik zur Sicherung und Optimierung der Webanfragen verwenden soll. Diese Konfiguration wird in der Datei http.middlewares.default.yml
definiert und enthält wichtige Sicherheits-Header sowie eine Komprimierungsoption für HTTP-Antworten. Die Middleware „default“ wird standardmäßig für die web
und websecure
EntryPoints in der traefik.yml
geladen. Um der Granularität weiter zu folgend werden wir die einzelnen Middlewares auch einzeln ablegen.
Öffne die Datei zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.default.yml nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.default-security-headers.yml nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.gzip.yml
http: middlewares: default: chain: middlewares: - default-security-headers - gzip
http: middlewares: default-security-headers: headers: browserXssFilter: true contentTypeNosniff: true forceSTSHeader: true frameDeny: true stsIncludeSubdomains: true stsPreload: true stsSeconds: 31536000 customFrameOptionsValue: "SAMEORIGIN" customResponseHeaders: Referrer-Policy: "strict-origin-when-cross-origin" Content-Security-Policy: "frame-ancestors 'self';" Permissions-Policy: "geolocation=(), microphone=(), camera=()"
http: middlewares: gzip: compress: {}
Erklärung der Konfiguration:
- default:
- Dies ist die Hauptmiddleware, die in der
traefik.yml
als Standard-Middleware für dieweb
undwebsecure
EntryPoints verwendet wird. Sie besteht aus einer Kette (chain
) von Middlewares:- default-security-headers: Fügt Sicherheits-Header zu allen HTTP-Antworten hinzu.
- gzip: Komprimiert HTTP-Antworten, um die Datenübertragung zu optimieren.
- Dies ist die Hauptmiddleware, die in der
- default-security-headers:
- browserXssFilter: true: Aktiviert den Browser XSS-Schutz (Cross-Site-Scripting).
- contentTypeNosniff: true: Verhindert, dass der Browser den Dateityp anhand des Inhalts rät.
- forceSTSHeader: true: Aktiviert den HSTS (HTTP Strict Transport Security)-Header, der Browser anweist, nur HTTPS-Verbindungen zuzulassen.
- frameDeny: true: Verhindert das Laden der Seite in einem
<frame>
oder<iframe>
, um Clickjacking-Angriffe zu verhindern. - stsIncludeSubdomains: true: Erzwingt HSTS auch für alle Subdomains.
- stsPreload: true: Signalisiert, dass diese Seite in die HSTS-Preload-Liste aufgenommen werden kann, sodass HSTS auch ohne den ersten HTTP-Aufruf greift.
- stsSeconds: 31536000: Setzt die Gültigkeit des HSTS-Headers auf ein Jahr (31536000 Sekunden).
- customFrameOptionsValue: “SAMEORIGIN”: Erlaubt das Einbetten von Inhalten nur innerhalb der eigenen Domain (
SAMEORIGIN
).
- gzip:
- compress: {}: Aktiviert die GZIP-Komprimierung für HTTP-Antworten, was die Übertragungsgeschwindigkeit optimiert, indem die Daten komprimiert werden.
Wichtig:
Die Middleware „default“ wird in der traefik.yml
an die web
und websecure
EntryPoints angehängt und standardmäßig bei Anfragen über diese Endpunkte mitgeladen. Diese Konfiguration sorgt dafür, dass alle Anfragen über HTTPS gesichert und optimiert werden, und fügt wichtige Sicherheitsmaßnahmen wie XSS-Schutz und HSTS hinzu.
7.4.4. Konfiguration von http.middlewares.traefik-dashboard-auth.yml
In diesem Schritt fügen wir eine Basic-Auth-Authentifizierung für das Traefik-Dashboard hinzu. Diese Konfiguration schützt den Zugriff auf das Dashboard mithilfe eines Passworts, das in einer .htpasswd-Datei gespeichert wird.
Erstelle die Datei http.middlewares.traefik-dashboard-auth.yml
:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.traefik-dashboard-auth.yml
http: middlewares: traefik-dashboard-auth: basicAuth: realm: "Traefik Dashboard" usersFile: "/etc/traefik/.htpasswd"
Erklärung der Konfiguration:
- traefik-dashboard-auth: Diese Middleware implementiert eine Basic-Auth-Authentifizierung für das Traefik-Dashboard.
- basicAuth:
- realm: Der Authentifizierungsbereich wird als “Traefik Dashboard” festgelegt.
- usersFile: Der Pfad zur .htpasswd-Datei, die die Benutzername-Passwort-Kombinationen enthält.
- basicAuth:
7.4.5. Passwort für Traefik-Dashboard festlegen
Um die Benutzername-Passwort-Kombination für die Basic-Auth festzulegen, müssen wir .htpasswd-Datei
mit Informationen füttern. Zuerst überprüfen wir ob der Befehl verfügbar ist und installieren die notwendigen Pakete:
command -v htpasswd >/dev/null 2>&1 || apt update && apt install -y apache2-utils
Nun generieren wir für unseren Benutzer ein Passwort und schreiben es in unsere .htpasswd-Datei
:
htpasswd /opt/containers/traefik-crowdsec-stack/data/traefik/.htpasswd <deinBenutzername>
Benutzername und Passwort sind “case-sensitive”, das bedeutet, Groß- und Kleinschreibung müssen exakt übereinstimmen. Wir können mit dem genannten Befehl jederzeit beliebig viele Nutzer zur .htpasswd-Datei hinzufügen. Allerdings müssen wir, wenn Traefik bereits läuft, den Container neu starten, damit die Änderungen wirksam werden.
7.4.6. Konfiguration von http.middlewares.traefik-bouncer.yml
In diesem Abschnitt fügen wir den CrowdSec Bouncer als Middleware hinzu. Diese Middleware prüft eingehende Anfragen auf ihre Berechtigung, basierend auf der CrowdSec-Bannliste. Der Bouncer wird als Middleware konfiguriert und sorgt dafür, dass unerwünschte Anfragen blockiert werden.
Öffne die Datei http.middlewares.traefik-bouncer.yml
zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.traefik-bouncer.yml
http: middlewares: traefik-bouncer: forwardAuth: address: http://traefik-crowdsec-bouncer:8080/api/v1/forwardAuth trustForwardHeader: true
Erklärung der Konfiguration:
- traefik-bouncer: Diese Middleware verwendet die
forwardAuth
-Methode, um Anfragen über den CrowdSec Bouncer zu leiten. - address: Gibt die Adresse des Bouncers an, der auf
http://traefik-crowdsec-bouncer:8080/api/v1/forwardAuth
läuft. Dieser prüft, ob die IP-Adresse des Anfragenden auf der Bannliste steht. - trustForwardHeader: true: Traefik vertraut auf die im
Forwarded
-Header enthaltenen Informationen, um die Authentifizierung korrekt durchzuführen.
7.4.7. Integration des Bouncers in traefik.yml
Damit der Bouncer aktiv Anfragen überprüfen kann, müssen wir die traefik.yml
bearbeiten und die Middleware zu den web
und websecure
EntryPoints hinzufügen.
Öffne die traefik.yml
zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/traefik/traefik.yml
Füge in den Einträgen web
und websecure
die traefik-bouncer
-Middleware hinzu. Die Konfiguration sollte folgendermaßen aussehen:
entryPoints: ping: address: ':88' web: address: ':80' http: redirections: entryPoint: to: websecure scheme: https websecure: address: ':443' http: middlewares: - default@file - traefik-bouncer@file
Erklärung der Änderungen:
- traefik-bouncer@file: Diese Zeile fügt den CrowdSec Bouncer als zusätzliche Middleware hinzu. Dadurch wird jede Anfrage, die über
web
oderwebsecure
kommt, zuerst durch den Bouncer überprüft. Der Bouncer entscheidet, ob die Anfrage basierend auf der Bannliste zugelassen oder blockiert wird.
Durch diese Konfiguration wird sichergestellt, dass Anfragen an den Traefik-Proxy, die auf der Bannliste von CrowdSec stehen, standardmäßig blockiert werden. Dies erhöht die Sicherheit des Systems und schützt es vor bekannten Bedrohungen.
7.5. CrowdSec konfigurieren
7.5.1. Acquisition anpassen
Damit CrowdSec Angriffe oder unberechtigte Zugriffsversuche erkennen und die potenziellen Gefährder blockieren kann, müssen wir CrowdSec mit den relevanten Logs versorgen. CrowdSec überwacht und analysiert die Logs der Dienste, um nach vordefinierten Mustern verdächtige Aktivitäten zu erkennen und entsprechend zu reagieren.
Als ersten Schritt lassen wir CrowdSec die Standardkonfiguration laden:
docker compose up crowdsec -d && docker compose down
# Diese Anleitung setzt voraus, dass sie als Root-User ausgeführt wird. # Um Root-Rechte zu erlangen, kann folgender Befehl verwendet werden: sudo su # Wenn du stattdessen in deiner Umgebung auf `sudo` angewiesen bist, # sollte der Befehl an dieser Stelle in der Anleitung wie folgt lauten: sudo -E docker compose up crowdsec -d && docker compose down
Der Hinweis darf ignoriert werden:
WARN[0000] The "BOUNCER_KEY_FIREWALL" variable is not set. Defaulting to a blank string.
Nun können wir die Acquisition-Konfiguration anpassen, damit CrowdSec die richtigen Log-Dateien überwacht. Wir öffnen die Datei acquis.yaml
zur Bearbeitung:
nano /opt/containers/traefik-crowdsec-stack/data/crowdsec/config/acquis.yaml
Dort entfernen wir alle bestehenden Einträge und füge die folgenden Einträge hinzu, um die relevanten Logs hinzuzufügen:
filenames: - /var/log/auth.log - /var/log/syslog labels: type: syslog --- filenames: - /var/log/traefik/access.log labels: type: traefik ---
# Unter Debian 12 kann es sein, dass `/var/log/auth.log` nicht vorhanden ist, da Debaian 12 grundsätzlich `journalctl`nutzt. # Dies lässt sich überprüfen mit cat /var/log/auth.log # Sollte die Datei nicht vorhanden sein, dann wird `rsyslog` benötigt: apt install rsyslog && sudo systemctl restart ssh
Erklärung der Konfiguration:
• /var/log/auth.log und /var/log/syslog: Diese Logs enthalten sicherheitsrelevante Informationen, wie Anmeldeversuche und Systemmeldungen, die CrowdSec überwachen soll. Der Log-Typ ist hier syslog.
• /var/log/traefik/*.log: Hier überwachen wir die Traefik-Logs. CrowdSec wird diese Logs durchsuchen, um verdächtige Aktivitäten zu identifizieren. Der Log-Typ ist traefik.
Diese Konfiguration sorgt dafür, dass CrowdSec die wichtigen System- und Traefik-Logs durchforstet und auf unberechtigte Zugriffe reagiert, indem es entsprechende Maßnahmen ergreift, z.B. das Blockieren von IP-Adressen.
Wäre es möglich mit dieser Anleitung auch Quick/http3 zu unterstützen was muss dafür alles angepasst werden?
Das aktuelle System läuft bei mir gar nicht. Es kommt immer die Meldung :
ERROR: In file ‘./docker-compose.yml’, services ‘include’ must be a mapping not an array.
Hallo,
grundsätzlich läuft das System bei mir auch. Heute musste ich allerdings Traefik intern in einer “.local” Domain aufsetzen. ACME ist natürlich dann ohne Funktion, da es keine valide TLD ist. Gibts da eine Möglichkeit, dass trotzdem gangbar zu bekommen?
Traefik läuft bei mir mit der aktuellsten Version 3.4.1 ohne Probleme bisher. Hat jemand bereits auch aktualisiert von euch?
Ich bekomme seit ein paar Tagen die Meldung, dass Crowdsec nicht aktuell ist: „A new CrowdSec release is available (v1.6.9). Your version is ‘v1.6.8’. Please update it to use new parsers/scenarios/collections.“ Zum updaten sollte doch, wie beschrieben, ein Neustart des Containers ausreichen? Funktioniert hat es bei mir allerdings nicht. Oder sind die Images einfach nur noch nicht auf dem aktuellen Stand?
Falls jemand Probleme nach einem Update hat und z.B. folgende Fehlermeldungen findet:
Ich habe Kapitel 10.3 wiederholt. Danach bekam ich folgende Fehler:
Das konnte ich beheben indem ich den API-Key “FIREWALL” gelöscht habe und den dann manuell eingetragen habe:
Der Key “XXXXXXX” ist der neue Key der im Schritt 10.3.3 erzeugt wurde.
lg,
Max
Ich würde gerne den Zugriff aus bestimmten Ländern blockieren, bzw. nur aus bestimmten Ländern erlauben. Wie mache ich das am geschicktesten? Wäre für einen Tipp sehr dankbar.
Hallo Zusammen.
Auch ich bin begeistert von dieser Anleitung und dem Aufwand, den sich @psycho0verload hier gemacht hat.
Um die Serverprovisionierung zu automatisieren (basierend auf einem “frischen” Debian 11/12 VPS) habe ich ein Ansible-Projekt geschrieben.
Auf eure Resonanz hierzu würde ich mich freuen:
https://github.com/oberator/ansible_goneuland_traefik_v3
Hi zusammen,
ich habe das Problem, dass ich nach dieser Anleitung alles gemacht habe funktioniert soweit auch alles.
Leider habe ich das Problem wenn ich mit meinem Handy mobil unterwegs bin ich mit der Nextcloud App nicht auf die Daten kommen.
Wenn ich aber mit dem selben Handy über den Browser gehe funktioniert es.
Wenn ich mich mit dem Handy in einem Wlan (nicht dagheim) befinde in dem es nur eine IPV4 gibt geht wieder beides.
Irgendwie habe ich die Vermutung, dass es an IPV6 liegt aber warum dann nur die App?
Ich möchte den Zugriff auf bestimmte Container ausschliessich aus dem LAN (192.168.1.0/24) erlauben hierbei jedoch nicht auf die SSL Verschlüsselung verzichten.
So wie ich das verstanden habe muss man hierfür die Regel des Routers bei dem der Host festgelegt wird um ClientIP erweitern.
Der entspr. Bereich in der docker-compose.yaml sieht bei mir dann folgendermassen aus
labels:
– “traefik.enable=true”
– “traefik.http.routers.spoolman.entrypoints=websecure”
– “traefik.http.routers.spoolman.rule=Host(
spoolman.mydomain.de
) && ClientIP(192.168.1.0/24
)”– “traefik.http.routers.spoolman.middlewares=default@file”
– “traefik.http.routers.spoolman.tls=true”
– “traefik.http.routers.spoolman.service=spoolman”
– “traefik.http.services.spoolman.loadbalancer.server.port=8000”
– “traefik.docker.network=proxy”
Leider bekomme ich aber egal, ob aus dem LAN oder Internet immer eine 404 Meldung.
Ich habe es jetzt, aus Mangel an Testmöglichkeiten, nicht mit einer reinen Traefik Umgebung getestet. Möglicherweise spielt hier CrowdSec noch mit rein, ich habe es aber nicht geschafft auch noch das 172.0.0.0/8er Netz frei zu geben.
Ohne den ClientIP Block läuft natürlich alles ohne Probleme, aber eben auch mit Zugriff aus dem Internet. BasicAuth ist auch keine Option, da andere Dienste auf die Seite zugreiffen können müssen und die können mit BasicAuth nicht umgehen.
Irgendwelche Ideen?
Hallo,
erstmal vielen Dank für die tolle Anleitung! Funktioniert wirklich hervorragend. 🙂
Einen Hinweis hab ich noch für Nextcloud-Nutzer. Beim Upload von großen Dateien schlägt bei mir nach dem Update auf Traefik3 dieser nach 60s fehl. Das liegt daran dass im Traefik der transport.respondingTimeouts.readTimeout Default-Wert von 0s auf 60s verändert wurde. Siehe https://doc.traefik.io/traefik/v2.0/routing/entrypoints/#respondingtimeouts vs https://doc.traefik.io/traefik/routing/entrypoints/#respondingtimeouts)
Ich hab diesen bei mir erstmal in der data/traefik/traefik.yml unter entryPoints – websecure auf 3601s, also gut ein Stunde angepasst, die eigentlich reichen sollte um den Default 100MB Chunk in die Nextcloud hochzuladen. Habs aber noch nicht endgültig getestet, im Zweifel setzt man den Wert halt wieder auf das alte Default von 0s.
Meine data/traefik/dynamic_conf/nextcloud.yml sieht im Moment wie folgt aus. Eventuell kann man den respondingTimeout auch hier speziell nur für Nextcloud einbauen, hab ich aber bisher nicht weiter geschaut:
Viele Grüße othiman
Kleiner Hinweis zu 7.2 compose-Dateien: Bei der crowdsec.yml soll vermutlich statt SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4 => SERVICES_CROWDSEC_NETWORKS_SOCKET_PROXY_IPV4 stehen. Kann zu einem Fehler führen, wenn man nicht mit mehreren .env Dateien arbeitet, da die gleiche Variable derzeit bei traefik.yml definiert ist und auf eine andere IP zeigen soll.
Bei mir gab es einige Probleme bei ipv6: Der Pi (Debian Bookworm) startete den Docker.Service nicht mehr. Folgende Konfiguration funktioniert bei mir:
Hat schon jemand versucht unter traefik V3 (installiert gemäß der Anleitung hier) einen onlyoffice/documentserver zu installieren und mit Nextcloud zu verbinden? Bei meinem Versuch läuft der Onlyoffice Server und die Verbindung mit Nextcloud scheint zu klappen, aber bei der Erstellung eines neuen Dokuments oder dem Bearbeiten eines bestehenden Dokuments mit Nextcloud lehnt der Onlyoffice Server die Verbindung ab.
Hat jemand eine Idee?
Moin!
Ich habe gerade gesehen, dass bei meiner Installation das Zertifikat abgelaufen ist – hätte das nicht automatisch erneuert werden sollen?
Hi,
kann ich den ganzen Stack einfach so Updaten, ohne das alles im arsch ist ? 😀
Ich habe die komplette Anleitung gelesen und denke auch, dass ich einiges verstanden habe, aber wenn ich dann bei 8.1.
docker compose up -d mache startet der docker-socket-proxy nicht.
Wo finde ich die logs was da schief läuft? Ich bin nicht der große docker Held 😉
Funktioniert die neue Anleitung auch mit Wildcard-Zertifikaten, wie es bei der alten Anleitung war?
Meine Services sind aktuell alle so aufgebaut und bekommen ein gültiges Zertifikat:
app1.local.meinedomain.com
app2.local.meinedomain.com
etc.
certificatesResolvers:
cloudflare:
acme:
email: “x@y.com”
storage: “acme.json”
dnsChallenge:
provider: cloudflare
resolvers:
– “1.1.1.1:53”
– “1.0.0.1:53”
Rührt der Hinweis zu Debian 12 nicht einfach nur daher, dass es keine Log-Dateien im herkömmlichen Sinne mehr gibt, sondern nur nach Journald-Einträge, die man über journalctl abrufen kann? Wäre es da nicht viel sinnvoller, diese moderneren Varianten zu verwenden anstatt alte Zöpfe nachträglich wieder anzubringen?
Es gibt ja bei CrowdSec auch Möglichkeiten dafür, z. B. hier: https://docs.crowdsec.net/docs/data_sources/journald/
Leider kenne ich mich mit dieser Thematik nicht aus. Das ist mir als erstes in den Sinn gekommen, als ich den Hinweis gelesen habe. Falls ich völlig daneben liegen sollte, bitte ich das zu entschuldigen.
Wenn sich jemand damit auskennen sollte, würde ich mich gerne über Aufklärung freuen 🙂
zur Anleitung auf Seite 8 / Git-Repository
—————————————————–
Nach meinem Verständnis wird in folgender Datei der HOST nicht gesetzt:
/compose/traefik.yml
Ich vermute, dass hier ‘traefik.yourdomain.com’ noch für den eigenen Host umgestellt (d.h. entsprechend ersetzt) werden muss.
Ansonsten funktioniert die Installation damit prima.
Danke dafür!!!
Ich habe Theather mit dem crowdsec container. Ich bin auf meinem Server gebannt und wenn ich mich entbannen möchte, bekomme ich folgende Meldung:
level=error msg=”error while performing request: dial tcp 0.0.0.0:8080: connect: connection refused; 4 retries left”
level=info msg=”retrying in 18 seconds (attempt 2 of 5)”
In den logs finde ich dann folgendes:
Local agent already registered
Check if lapi needs to register an additional agent
/etc/crowdsec was found in a volume
Running hub update
level=warning msg=”Unable to retrieve latest crowdsec version: unable to send request to https://version.crowdsec.net/latest: Get \”https://version.crowdsec.net/latest\”: dial tcp: lookup version.crowdsec.net on 127.0.0.11:53: server misbehaving, using hub branch ‘master'”
level=warning msg=”Failed to check last modified: failed to make HEAD request for https://cdn-hub.crowdsec.net/crowdsecurity/master/.index.json?with_content=true: Head \”https://cdn-hub.crowdsec.net/crowdsecurity/master/.index.json?with_content=true\”: dial tcp: lookup cdn-hub.crowdsec.net on 127.0.0.11:53: server misbehaving” url=”https://cdn-hub.crowdsec.net/crowdsecurity/master/.index.json?with_content=true”
Downloading /etc/crowdsec/hub/.index.json
Error: failed to update hub: failed http request for https://cdn-hub.crowdsec.net/crowdsecurity/master/.index.json?with_content=true: Get “https://cdn-hub.crowdsec.net/crowdsecurity/master/.index.json?with_content=true”: dial tcp: lookup cdn-hub.crowdsec.net on 127.0.0.11:53: server misbehaving
/var/lib/crowdsec/data was found in a volume
Running hub upgrade
level=warning msg=”Unable to retrieve latest crowdsec version: unable to send request to https://version.crowdsec.net/latest: Get \”https://version.crowdsec.net/latest\”: dial tcp: lookup version.crowdsec.net on 127.0.0.11:53: server misbehaving, using hub branch ‘master'”
downloading https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb
level=warning msg=”Failed to check last modified: failed to make HEAD request for https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb: Head \”https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb\”: dial tcp: lookup hub-data.crowdsec.net on 127.0.0.11:53: server misbehaving” url=”https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb”
Error: while downloading data for /etc/crowdsec/parsers/s02-enrich/geoip-enrich.yaml: while getting data: failed http request for https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb: Get “https://hub-data.crowdsec.net/mmdb_update/GeoLite2-City.mmdb”: dial tcp: lookup hub-data.crowdsec.net on 127.0.0.11:53: server misbehaving
Running: cscli parsers install “crowdsecurity/docker-logs”
Nothing to do.
level=warning msg=”Unable to retrieve latest crowdsec version: unable to send request to https://version.crowdsec.net/latest: Get \”https://version.crowdsec.net/latest\”: dial tcp: lookup version.crowdsec.net on 127.0.0.11:53: server misbehaving, using hub branch ‘master'”
Jemand ein Tipp wie ich das lösen kann?
Vielen Dank für die großartige Anleitung,
psycho0verload! 🙂
Eine kleine Anmerkung: Das obige Setup führt zu folgendem Fehler:
Hintergund ist ein kleiner Tippfehler in der /data/traefik/dynamic_conf/http.middlewares.traefik-bouncer.yml:
Fügt man hier statt forwardauth = forwardAuth ein, funktioniert es. 🙂
Hallo,
ich habe folgende Fehlermeldung nach Aufruf von:
systemctl status crowdsec-firewall-bouncer
Process: 1911999 ExecStartPre=/usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml -t (code=exited, status=1/FAILURE)
Ein restart wird auch mit einer Fehlermedlung quittiert.
Hat jemand eine Idee. Vielen Dank. Gruß Andreas
Der hier benutzte fbonalair/traefik-crowdsec-bouncer wird seit 3 Jahren nicht mehr geupdated und führt bei mir zu 403 forbidden Problemen in einem Subprojekt.
Eine aktuell gepflegte Alternative wäre maxlerebourg/crowdsec-bouncer-traefik-plugin.
Ein Update wäre cool! 🙂
Hi,
danke für die super Anleitung und das tolle Skipt.
ich habe jetzt nur das Problem, dass ich meinen homeassisten Server über das Handy extern nicht mehr erreiche.
Nextclout welches als Docker läuft aber schon. Daher gehe ich irgendwie davon aus, dass es an der Weiterleitung an eine IP im zusammenhang von IPv4 und IPv6 zu tun haben könnte.
Denn wenn ich wieder außerhalb in einem fremden Wlan mit IPv4 bin komme ich wieder auf den HA Server drauf.
Ich habe in der http.middlewares.default.yml
folgendes eingetragen:
routers:
homeassistent:
entryPoints:
– websecure
rule: “Host(
ha.test.de
)”service: “homeassistent”
middlewares:
– default@file
– traefik-bouncer
tls:
certresolver: http_resolver
services:
homeassistent:
loadBalancer:
servers:
– url: “http://192.168.178.79:8123”
passHostHeader: true
damit hatte es unter Traefik 2 super funktioniert und hatte keine Probleme.
Was mache ich flasch?
Gruß
Ich habe festgestellt, dass man bei den Traefik-Labels inzwischen auf fünf Labels reduzieren kann.
traefik.docker.network: proxy
: Das Netzwerk wird in der statischen Configproviders.docker.network
schon definiert und ist hier redundant. https://doc.traefik.io/traefik/providers/docker/#networktraefik.http.routers.wordpress.middlewares: default@file
: Die Middleware wird auch schon in der statischen Config definiert inentryPoints.websecure.http.middlewares
.traefik.http.routers.wordpress.service: wordpress
: Ein Service wird automatisch erstellt oder automatisch assigned, wenn die Konfiguration durch Labels geschieht. https://doc.traefik.io/traefik/routing/providers/docker/#service-definitiontraefik.http.routers.wordpress.tls: true
: Wenn ein TLS-Konfigurationslabel angegeben ist, also dencertresolver
, dann wird TLS implizit auftrue
gesetzt. https://doc.traefik.io/traefik/routing/routers/#generalDamit bleiben am Ende die Labels fürenable
,entrypoint
,rule
,certresolver
undport
.Hallo zusammen,
zunächst einmal vielen Dank – dank dieser Anleitung habe ich den Umstieg auf eine selbstgehostete Nextcloud geschafft.
Allerdings habe ich ein Problem – nachdem die Installation fast 3 Wochen lang fehlerfrei lief, konnte ich heute nachmittag nicht mehr zugreifen. Wenn ich traefik aufrufe, kommt “forbidden”. Auch bei der Nextcloud.
Ich habe daraufhin Traefik nach der Anleitung nochmal komplett neu installiert, dann konnte ich wieder mit meiner Nexcloud arbeiten – und nach ca. 5 Minuten flog ich raus und es kam wieder “forbidden”.
Ich habe nach dem unten aufgeführten Post das data/crowdsec/data Verzeichnis gelöscht, danach läuft es auch wieder – für 10 Minuten. Dann tritt das Problem wieder auf.
Bin für jede Hilfe dankbar.
Dietmar
Hallo Zusammen
Ich habe ein Problem mit der Acquisition Metrics. Ich habe Traefik einmal Punkt für Punkt nach der Anleitung Installiert und einmal mit dem Shell Scripte auf einem Debian 12 gehostet von Netcup.
Beides Mal steht nach dem Befehl
docker exec crowdsec cscli metrics
nichts von Traefik.log oder access.log unter Acquisition Metrics.
Das komische ist, ich habe das ganze nur ein paar Stunden vorher auf einem Debian 12 Server eines anderen Hoster installiert und dort wurden mehr Menü Punkte angezeigt.
Folgendes fehlt bei Netcup
—————————————————————————————————————————-+
| Acquisition Metrics |
+———————————-+————+————–+—————-+————————+——————-+
| Source | Lines read | Lines parsed | Lines unparsed | Lines poured to bucket | Lines whitelisted |
+———————————-+————+————–+—————-+————————+——————-+
| file:/var/log/traefik/access.log | 714 | 714 | – | 1.09k | – |
+———————————-+————+————–+—————-+————————+——————-+
+—————————————————-+
| Local API Alerts |
+——————————————–+——-+
| Reason | Count |
+——————————————–+——-+
| crowdsecurity/http-admin-interface-probing | 2 |
| crowdsecurity/http-probing | 9 |
| crowdsecurity/http-sensitive-files | 13 |
| crowdsecurity/http-wordpress-scan | 1 |
| crowdsecurity/netgear_rce | 1 |
+——————————————–+——-+
+——————————————————————————————-+
| Bouncer Metrics (FIREWALL) since 2025-02-22 20:48:06 +0000 UTC |
+—————————-+——————+——————-+———————–+
| Origin | active_decisions | dropped | processed |
| | IPs | bytes | packets | bytes | packets |
+—————————-+——————+———+———+———–+———–+
| CAPI (community blocklist) | 46.98k | 810.46k | 17.35k | – | – |
| crowdsec (security engine) | 0 | 0 | 0 | – | – |
+—————————-+——————+———+———+———–+———–+
| Total | 46.98k | 810.46k | 17.35k | 1.32G | 442.26k |
Kann mir jemand da einen Tipp geben?
Hallo zusammen,
tja, das war wohl etwas voreilig (siehe hier drunter).
Die Container starten und laufen nun alle, doch mehrere Dinge liegen im Argen, weshalb ich sowohl beim Zugriff auf die Traefik-Management-Seite, als auch beim Zugriff auf meinen Immich-Dienst ausschließlich ein ‘Forbidden’ bekommen.
Identifizierte Problemstellen:
Das Zertifikat für meinen Dienst hat Traefik gezogen, doch – wie beschrieben: Ich bekomme ausschließlich ein ‘Forbidden’ in der linken, oberen Ecke, und dasselbe bekomme ich auch schon ohne den Dienst für die Traefik-Management-Seite (also keine HTTP-Authentifizierung).
Kann mir jemand weiterhelfen?
Viele Grüße
Matthias
ps Ach ja: In der docker-compose von Traefik habe ich “3.1” durch “3.3” ersetzt.
Hallo zusammen,
zunächst vielen Dank an psycho0verload für die fantastische Anleitung!👌
Nach bestem Wissen und Gewissen bin ich sie durch und habe auch ein paar Kleinigkeiten aus den Kommentaren ergänzt bzw. korrigiert.
Doch bei mir will der Traefik-Container nicht starten bzw. bleibt im ‘restarting’.
Meine Frage: Wie kann ich herausfinden, woran das liegt? /var/log/traefik bleibt leer.🙄
Wer hat mir einen Tipp? Wo und wie kann ich schauen, was da los ist?
Viele Grüße aus Stuttgart
Matthias
Hallo
psycho0verload in der Versionierung 02.02.2025 schreibst du u.a. “Traefik-Version auf 3.3 angepasst” Ich sehe allerdings noch 3.1 im compose file, hast du dich da vertippt? Hast du die 3.3 getestet? Danke Gruss Marco
In meinem Setup habe ich einige Änderungen vorgenommen, die es einerseits für mich noch weiter vereinfachen und andererseits meinen persönlichen Vorstellungen und meinen anderen Projekten besser passen, was rein Geschmacksache ist.
Die Zeitzone mit der Variable
TZ
muss nicht in jeder.env
-Subdatei neu definiert werden. Wie man bei derABSOLUTE_PATH
-Variable sieht, ist dies nicht notwendig, sondern reicht einmal zentral. Das Gleiche gilt fürBOUNCER_KEY_TRAEFIK
. Die muss in der.env
-Datei für CrowdSec nicht neudefiniert werden.Beim Einfügen von Werten in Dateien wie bei
BOUNCER_KEY_TRAEFIK
in „7.3.6. API Key für den CrowdSec Bouncer für Traefik generieren“ bevorzuge ichsed
-Editor stattecho
mit Umleitung. Es vermeidet Duplikate in der Datei und vermeidet, wenn man dochsudo
verwendet, ein “Permission denied”.sed -i -e "/^BOUNCER_KEY_TRAEFIK=/c\BOUNCER_KEY_TRAEFIK=\"$BOUNCER_PASSWORD\"" \
-e "\$aBOUNCER_KEY_TRAEFIK=\"$BOUNCER_PASSWORD\"" \
/opt/containers/traefik-crowdsec-stack/.env
Ich habe auf Debian 12 Probleme mit
PWD
-Variable. PWD ist auf dem Host-System vorhanden und in der Bash nutzbar. Jedoch übergibt Docker die Variable nicht an den Container weiter und ist damit dort nicht anwendbar. Eine mögliche Lösung ist, den Pfad fest zu codieren. Eine andere Lösung besteht darin, wieder zu relativen Pfaden zurückzukehren, wie es bei älteren Anleitungen üblich war. Beispielhaft antraefik.yml
-Compose-Datei:volumes:
- /etc/localtime:/etc/localtime:ro
- ../data/traefik/traefik.yml:/etc/traefik/traefik.yml
- ../data/traefik/.htpasswd:/etc/traefik/.htpasswd
- ../data/traefik/certs/acme_letsencrypt.json:/etc/traefik/acme_letsencrypt.json
- ../data/traefik/certs/tls_letsencrypt.json:/etc/traefik/tls_letsencrypt.json
- ../data/traefik/dynamic_conf:/etc/traefik/dynamic_conf:ro
- /var/log/traefik/:/var/log/traefik/
Bei der oben genannten Variable
BOUNCER_KEY_TRAEFIK
und ggf. unten angegebeneSERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL
bevorzuge ich diese in der zentralen.env
-Datei zu speichern. Da sie neben den anderen Variablen in dieser Datei in den meisten Fällen die einzigen Variablen sind, die für jeden Host spezifiziert werden müssen. Bei derGIN_MODE
-Variable kommt es darauf an, ob man beim allerersten Mal diesen Wert aufdebug
setzen will, oder dass man jedes Mal mit diesem Wert starten möchte. Auch bevorzuge ich, persönlich die.env
Dateien neben den Compose-Dateien zu legen und sie entsprechend zu benennen, z. B.traefik.env
. Natürlich müssen dieenv_file
-Pfade infolge angepasst werden.Was ich gerne noch anpassen würde, aber bisher nicht hinbekommen habe, ist die E-Mail-Adresse über die Compose-Datei bereitzustellen. Weder mit Label noch mit Command hat es bisher funktioniert.
services:
traefik:
labels:
traefik.certificatesResolvers.http_resolver.acme.email: ${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL:-user@example.com}
traefik.certificatesResolvers.tls_resolver.acme.email: ${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL:-user@example.com}
# Alternatsyntax
- "traefik.certificatesResolvers.http_resolver.acme.email=${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL:-user@example.com}"
- "traefik.certificatesResolvers.tls_resolver.acme.email=${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL:-user@example.com}"
# oder mit command
command:
- "--certificatesresolvers.http_resolver.acme.email=${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL}"
- "--certificatesresolvers.tls_resolver.acme.email=${SERVICES_TRAEFIK_CERTIFICATESRESOLVERS_EMAIL}"
Danke erstmal für die detaillierte Anleitung, alles läuft super bis auf die Erreichbarkeit von home assistant über das web.
In der Vergangenheit musste man in HA einen trusted_proxy eintragen und Traefik einen extra Host geben
extra_hosts:
– host.docker.internal:172.17.0.1
oder ähnlich, danmit der Zugriff funktioniert hat, da HA im Host-Modus läuft. Allerdings funktioniert das bei mir nicht mehr. Weder meldet HA einen unbefugten Zugriff, wodurch ich dann die IP wüsste, noch klappen andere Ansätze, wie im Standard Network die Traefik domain raus suchen, da Traefik nur in seinen drei Netzwerken (crowdsec, proxy, socket_proxy) vertreten ist.
Eventuell weiß jemand nen guten Ansatz? Danke!
Hey mir ist bei einem Security Test aufgefallen das wir hier noch etwas verbessern sollten um das Sicherheitslevel hoch zu setzten, bei den Headern ist noch einiges zu tun :
Damit gibts ein A+ Rating bei https://securityheaders.com/
/opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.default.yml
Bei den permissions könnt ihr anpassen wie ihr es braucht (Je nach App)
Blockiert wird mit =() , zugelassen wird es durch bsp.: permissionsPolicy: “camera=*, microphone=*”
Edit: für die meisten Anwendungen reicht auch als Standard:
contentSecurityPolicy: “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data: blob: https:; font-src ‘self’ data:; connect-src ‘self’ wss: https:; frame-ancestors ‘self’; base-uri ‘self’; form-action ‘self'”
referrerPolicy: “strict-origin-when-cross-origin”
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”
# Sichere Content Security Policy ohne unsafe-inline/eval
contentSecurityPolicy: “default-src ‘self’; script-src ‘self’ ‘nonce-{RANDOM}’; style-src ‘self’; img-src ‘self’ data: https:; font-src ‘self’; frame-ancestors ‘self’; base-uri ‘self’; form-action ‘self'”
# Referrer Policy
referrerPolicy: “strict-origin-when-cross-origin”
# Permissions Policy
permissionsPolicy: “accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), interest-cohort=()”
gzip:
compress: {}
Läuft bei euch eigentlich der Socket Proxy? Bei mir hat er noch nie funktioniert. Ich habe gestern Abend nochmal rum probiert, aber kam nicht weiter. Im Log vom Socket Proxy kommt aktuell alle 10 Sekunden:
Ich werde nicht schlau draus. Habt ihr ne Idee?
Außerdem passt die Zeitzone nicht, aber dafür hätte ich ne Lösungsidee. Für das andere nicht.
Hat jemand bereits raus gefunden wie man es bewerkstelligen kann das wenn crowdsec eine IP Bannen tut das dort eine Custom Error pages angezeigt wird.
der Bouncer gibt normalerweise ein 403 zurück
Bin bis Schritt 8.1 ohne Fehler gekommen. Wenn ich jedoch auf das Dashboard zugreifen möchte, ist die Seite komplett leer bis auf “Account : w011d26a” das in der mitte steht. Hat Jemand eine Idee dazu? Danke
Danke für die ausführliche Anleitung + erweiterte Erklärungen. Sieht alles sehr durchdacht aus!
Bei der Implementation sind mir folgende Aspekte aufgefallen (EDIT: noch etwas aufgefallen):
In der traefik.yml im compose-Stack (/opt/containers/traefik-crowdsec-stack/compose/traefik.yml) (und möglicherweise an anderen Stellen ist ein Tippfehler – ohne Auswirkungen auf die Funktionalität – traefik-dashboad statt traefik.dashboaRdWarum wurde für die traefik-dashboard und pingweb router- und service-Definition auf docker labels zurückgegriffen statt diese auch in @ files Definitionen auszulagern? Der Rest des Stacks ist ja sehr gut strukturiert, aber genau hier wird es (aus meiner Sicht) uneinheitlich. Gibt es dafür einen Grund?In der compose von traefik unter /opt/containers/traefik-crowdsec-stack/compose/traefik.yml ist ein Tippfehler beim volumemapping: ${ABSOLUTE_PATH}/data/traefik/certs/acme_letsencrypt.json:/etc/traefik//acme_letsencrypt.json <- Hier ist ein “/” zu viel
Ansonsten eine kurze Anregung auf die Gesamtimplementation der Stacks:
Aktuell ist nur eine Anleitung für weitere Container angehängt. Wenn man mehrere Hosts betreibt, hat man vielleicht schon Services woanders laufen, die vielleicht nicht über den gleichen Docker Stack angesprochen werden. Dies kann man mit einer @ file einfach ergänzen (hier nur als Skelett):
http:
routers:
router-whoami:
rule: Host(
whoami.example.org
)service: service-whoami
tls:
certResolver: letsencrypt
services:
service-whoami:
loadBalancer:
servers:
– url: http://192.168.100.100:80
Dazu noch folgende Anfrage: ich meine, es gab mal hier auf GoNeuland eine sehr ausführliche Anleitung, wie man einen getrennten ReverseProxy auf einem öffentlichen VPS + lokalen Reverse Proxy verwenden kann (NICHT https://goneuland.de/wireguard-ui-vpn-nutzen-um-dienste-im-traefik-crowdsec-stack-extern-oder-intern-zu-nutzen/). Ich finde den Post allerdings nicht mehr.
Ich zum Beispiel implementiere die aktuelle Anleitung als DMZ Proxy zu Hause und will dann später über einen VPS per ProxyProtocol von außen noch aufschalten um keine Port Forwards zu haben. Vielleicht könnte man hierzu auch noch einen Post daraus machen?
In jedem Fall: vielen Dank und ein frohes neues Jahr!
In der neusten Traefik-Version (3.3.1) habe ich Probleme mit dem Dashboard bekommen. Unabhängig von meiner Authentik-Middleware hat die Seite nicht geladen.
Stattdessen wurde mir eine Datei vom Typ “application/octet-stream” zum Download angeboten. Dieser Fehler tritt scheinbar auf, wenn der Header fehlerhaft modifiziert wird. Ich konnte das Problem auf “contentTypeNosniff: true” zurückführen. Nachdem ich die Zeile in der Datei “/opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.middlewares.default.yml” auskommentiert habe, lief es wieder.
Ich weiß nicht, ob es sich um einen Bug der aktuellen Version handelt, der dieses Problem verursacht. Aber ich verstehe auch nicht ganz, warum contentTypeNosniff überhaupt benötigt wird. Soll der Browser doch raten, um welche Art von Inhalt es sich handelt 🤷🏻♂️
Hat schon jemand die Traefik-Versionen > 3.3 zum Laufen gekriegt? Hatte es gestern Abend mal probiert bei mir – ging leider nicht.
Ich möchte einfach nur ein ganz herzliches Dankeschön aussprechen für diese wirklich gute Anleitung. Die Installation selber habe ich mit dem Installationsscript gemacht und es hat alles funktioniert 😀 Ich habe es unter Proxmox in einem frischen Container mit Debian 12 installiert. Es gab keinerlei Probleme und auch andere Anleitungen von hier wie etwa Nextcloud oder Paperless NGX liefen einwandfrei 👍
Gibt es eine Möglichkeit den Crowdsec Firewall bunder welcher auf dem System läuft zu sagen er soll nur port 443 und 80 sperren und nicht das gesamte Spektrum da ich schon fail2ban hab laufen
ban_proto und ban_ports funktionieren irgendwie nicht :-/
Beim Update anderer Traefik Instanzen ist mir aufgefallen das per pull hier nicht die aktuellste Version des Images genommen wird sonder noch der 3.1.* Branch :
image:${SERVICES_TRAEFIK_IMAGE:traefik}:${SERVICES_TRAEFIK_IMAGE_VERSION:-3.1}
Nur als Hinweis für andere wenn man auf neuere 3er Versionen will sollte man ja eher :
image:${SERVICES_TRAEFIK_IMAGE:traefik}:${SERVICES_TRAEFIK_IMAGE_VERSION:-3} benutzen. und das Updaten wäre per Script auch gut machbar, hab das mit paar Infos mal bei mir so aktuell:
Hallo können wir bei 7.4.5. Passwort für Traefik-Dashboard festlegennoch dazu schreiben, dass Unterstriche für den Benutzername nicht funktionieren, sie hebeln die Traefik Authentifizierung direkt aus.
Besten Dank für die tolle Anleitung.
Beim anpassen der IP Adressen über DOTENV mittels der vorgegebenen Variabeln aus den Compose Dateien ist mir ein Fehler aufgefallen.
In der “crowdsec.yml” sind zwei Variabeln für IP Adressen identisch zur traefik.yml und sollten angepasst werden.
crowdsec.yml:
alt -> neu
SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4 -> SERVICES_CROWDSEC_NETWORKS_SOCKET_PROXY_IPV4
SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV6 -> SERVICES_CROWDSEC_NETWORKS_SOCKET_PROXY_IPV6
Super wäre noch eine Variante mit Wildcard Option für die Domain(s). Ich habe versucht, die alte Anleitung von 2020 mit dieser zu verheiraten, keine Chance.
Herzlichen dank für die Tolle Anleitung.
Ich habe probiert bei einem Bestimmten Diest per Middleware einen Passwortschutz zu hinterlegen. leider ohne Erfolg.
ich komme da irgendwie nicht weiter.
was habe ich da falsch?
danke schon mal ganz Herzluch für euren Tipp.
Hat jemand mit Cloudflare und den origin Cert erfahrung.
wie kann man diese Einbinden ?
Hallo, erst mal vielen Dank für die super Anleitungen. Ich habe jedoch eine Frage zur Sicherheit des Proxies. In der alten Anleitung ist der entryPoint websecure wie folgt konfiguriert:
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
in der neuen nur noch:
websecure:
address: ‘:443’
http:
middlewares:
– default@file
Wäre es nicht sicherer die trustedIPs-Einstellungen in Traefik wieder zu konfigurieren, um sicherzustellen, dass nur vertrauenswürdige Proxies (z. B. aus dem Docker-Netzwerk) Forwarded-Header setzen dürfen?