1.8.0 ist weitgehend additiv (Bot-Detection ist opt-in, dazu eine k8s-Quelle) und schliesst zwei DoS-Luecken in der HTTP- und der k8s-audit-Acquisition - beide nutzen wir hier nicht, GHSA-g2x2-jgfg-pg7g und GHSA-rh69-4vqj-9gj8. 1.8.1 korrigiert nur einen Fehlalarm der Bot-Erkennung. Vor dem Austausch beide Volumes kalt gesichert (Config 446K, DB 38M unter /home/lutz/backups). Danach geprueft: Collections alle enabled, Syslog-Quelle der Synologies lauscht wieder auf 5514, Traefik-Access-Log wird getailt, Decisions erhalten. Den MikroTik-Bouncer hinterher bewusst neu gestartet statt auf "Container laeuft" zu vertrauen - er merkt einen LAPI-Neustart erst beim naechsten Handshake, genau daran hing der stille Ausfall im September. Er meldet wieder "Address ... already present" gegen die Address-List der AX3. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
98 lines
4.0 KiB
YAML
98 lines
4.0 KiB
YAML
# docker-compose.yml
|
|
# Traefik + CrowdSec - migriert von CreateTraefikPod.sh
|
|
#
|
|
# Laeuft mit `docker compose` UND `podman compose` (Podman >= 4.1).
|
|
# Wegen Bind auf :443 und :1194 ist ROOTFUL noetig (rootless kann <1024 nur
|
|
# mit net.ipv4.ip_unprivileged_port_start-Tweak).
|
|
# Die Volume-Mounts behalten dein SELinux-Relabel (:Z) bei.
|
|
|
|
services:
|
|
traefik:
|
|
image: traefik:v3.7.16 # 2026-10-24: von v3.7.5 gepinnt (vorher floating v3.7)
|
|
container_name: traefik
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- crowdsec
|
|
networks:
|
|
- proxy
|
|
volumes:
|
|
# deine bestehende statische + dynamische Config (unveraendert uebernommen)
|
|
- /srv/TRAEFIK/etc/traefik:/etc/traefik:Z
|
|
# Access-Log -> geteiltes Named Volume, das CrowdSec read-only mountet
|
|
- traefik-logs:/var/log/traefik
|
|
ports:
|
|
- "192.168.0.141:1180:1180"
|
|
- "192.168.0.142:443:443"
|
|
- "192.168.0.142:8880:8880"
|
|
- "192.168.0.142:40022:40022"
|
|
- "192.168.0.142:8888:8888"
|
|
- "192.168.0.142:54321:54321/udp"
|
|
- "192.168.0.142:5001:5001"
|
|
- "192.168.0.142:5000:5000"
|
|
- "192.168.0.142:8443:8443"
|
|
- "192.168.0.142:1194:1194"
|
|
- "192.168.0.142:1194:1194/udp"
|
|
|
|
crowdsec:
|
|
image: crowdsecurity/crowdsec:v1.8.1 # 2026-10-24: 1.7.8 -> 1.8.1 (zwei DoS-Fixes in HTTP-/k8s-Acquisition, beide hier ungenutzt)
|
|
container_name: crowdsec
|
|
restart: unless-stopped
|
|
networks:
|
|
- proxy
|
|
environment:
|
|
# Collections, die die Traefik-Logs parsen und Scan-/CVE-/DoS-Muster erkennen
|
|
COLLECTIONS: "crowdsecurity/traefik crowdsecurity/http-cve crowdsecurity/base-http-scenarios crowdsecurity/http-dos"
|
|
# GID: "1000" # nur setzen, falls CrowdSec das Access-Log nicht lesen darf (Permissions)
|
|
volumes:
|
|
- crowdsec-config:/etc/crowdsec # Named Volume -> Image-Defaults bleiben erhalten
|
|
- crowdsec-db:/var/lib/crowdsec/data
|
|
- traefik-logs:/var/log/traefik:ro # liest Traefiks Access-Log
|
|
- ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.d/traefik.yaml:ro,Z
|
|
# Syslog-Quelle Synology (fids/fids2) + lokaler Parser dazu. Beides liegt
|
|
# im Repo (nicht nur im crowdsec-config-Volume), damit es ein Volume-Reset
|
|
# ueberlebt.
|
|
- ./crowdsec/acquis-synology.yaml:/etc/crowdsec/acquis.d/synology.yaml:ro,Z
|
|
- ./crowdsec/parsers/famfihome-synology-connection.yaml:/etc/crowdsec/parsers/s01-parse/famfihome-synology-connection.yaml:ro,Z
|
|
# Eskalierende Ban-Dauer ((count+1)*12h, max 168h) - haendisch gepflegt
|
|
- ./crowdsec/profiles.yaml:/etc/crowdsec/profiles.yaml:ro,Z
|
|
ports:
|
|
- "192.168.0.142:6060:6060" # Prometheus-Metriken (CrowdSec) fuer 192.168.0.23
|
|
- "192.168.0.142:5514:514/udp" # Syslog von den Synologies (DSM Log Center)
|
|
|
|
# MikroTik-Bouncer: spiegelt CrowdSec-Decisions in eine RouterOS-Firewall-
|
|
# Address-List ("crowdsec") auf der AX3 -> Edge-Drop (alle Ports, auch VPN/SSH).
|
|
# Verbindet sich per RouterOS-API ueber TLS (api-ssl 8729). Der Hostname
|
|
# mt-az.famfi.home (extra_hosts -> 192.168.0.2) muss zum Cert-SAN passen;
|
|
# das OpenBAO-Root+Intermediate-Bundle wird via SSL_CERT_FILE vertraut.
|
|
crowdsec-mikrotik-bouncer:
|
|
image: ghcr.io/funkolab/cs-mikrotik-bouncer:latest
|
|
container_name: crowdsec-mikrotik-bouncer
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- crowdsec
|
|
networks:
|
|
- proxy
|
|
extra_hosts:
|
|
- "mt-az.famfi.home:192.168.0.2"
|
|
environment:
|
|
CROWDSEC_URL: "http://crowdsec:8080/"
|
|
MIKROTIK_HOST: "mt-az.famfi.home:8729"
|
|
MIKROTIK_USER: "apics"
|
|
MIKROTIK_TLS: "true"
|
|
MIKROTIK_IPV6: "false"
|
|
LOG_LEVEL: "1"
|
|
SSL_CERT_FILE: "/etc/ssl/famfi-ca.pem" # trust OpenBAO CA for the RouterOS api-ssl cert
|
|
env_file:
|
|
- .mikrotik.env # MIKROTIK_PASS + CROWDSEC_BOUNCER_API_KEY (root-only, git-ignored)
|
|
volumes:
|
|
- ./crowdsec/famfi-ca-bundle.pem:/etc/ssl/famfi-ca.pem:ro
|
|
|
|
networks:
|
|
proxy:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
traefik-logs:
|
|
crowdsec-config:
|
|
crowdsec-db:
|