Mars Warrior schreef op dinsdag 7 oktober 2025 @ 18:19:
Thanx voor de "heads up".
Ik draai - zoals vaker - nog heel wat oude versies in mijn setup. Ik update niet zo vaak.
Als de L4 plugin nu kapot is, dan ga ik daar ook veel last van krijgen. Dat is niet de bedoeling. Nu kun je met Docker gewoon weer de oude container starten, maar ik zit niet te wachten op dit soort gezeik na een update.

code:
1
2
3
4
5
6
7
8
9
10
11
| > [builder 2/2] RUN GOTOOLCHAIN=go1.24.1 xcaddy build --with github.com/caddy-dns/cloudflare --with github.com/greenpau/caddy-security --with github.com/hslatman/caddy-crowdsec-bouncer/http --with github.com/hslatman/caddy-crowdsec-bouncer/layer4 --with github.com/hslatman/caddy-crowdsec-bouncer/appsec --with github.com/lucaslorentz/caddy-docker-proxy/v2 --with github.com/mholt/caddy-l4 --with github.com/mholt/caddy-dynamicdns --with github.com/WeidiDeng/caddy-cloudflare-ip: 124.4 go: added github.com/joho/godotenv v1.5.1 124.4 go: added github.com/lucaslorentz/caddy-docker-proxy/v2 v2.10.0 124.4 2025/08/19 10:48:01 [INFO] exec (timeout=0s): /usr/local/go/bin/go get -v github.com/mholt/caddy-l4 github.com/caddyserver/caddy/v2@v2.10.0 124.5 go: downloading github.com/mholt/caddy-l4 v0.0.0-20250814163833-b0a5a508a938 124.8 go: accepting indirect upgrade from github.com/cloudflare/circl@v1.6.0 to v1.6.1 124.8 go: accepting indirect upgrade from github.com/quic-go/quic-go@v0.50.1 to v0.54.0 124.8 go: github.com/mholt/caddy-l4@v0.0.0-20250814163833-b0a5a508a938 requires 124.8 github.com/caddyserver/caddy/v2@v2.10.1-0.20250720214045-8ba7eefd0767, but v2.10.0 is requested 124.8 go: github.com/mholt/caddy-l4@upgrade (v0.0.0-20250814163833-b0a5a508a938) requires github.com/caddyserver/caddy/v2@v2.10.1-0.20250720214045-8ba7eefd0767, not github.com/caddyserver/caddy/v2@v2.10.0 124.8 2025/08/19 10:48:01 [FATAL] exit status 1 |
En dan heb ik net te weinig kaas gegeten van de moderne Go toolchain om daar chocola van te maken. Buiten dat ik ook gewoon geen zin heb in dit soort vage issues. Het versionen, en als dat maar met 0.0.1, vind ik dan een kleine moeite en voorkomt dit soort problemen.
Ik vond Traefik aan de praat krijgen best wel straight forward. Toegegeven ik ken geen grote of populaire reverse proxy waar ik geen (professionele) ervaring mee heb. Dus dat helpt wel enorm, maar kort door de bocht:
Docker Compose
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| services: traefik: container_name: traefik image: traefik:v3.5.3 restart: on-failure:10 networks: ingress: ipvlan: ipv4_address: 192.168.1.4 ipv6_address: aaaa:aaaa:aaaa:1:b00b::135 monitoring: volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /opt/appdata/traefik/traefik.yaml:/traefik.yaml:ro - /opt/appdata/traefik/config:/configs:ro - /opt/appdata/traefik/certs/acme.json:/acme.json:rw - logs:/logs:rw security_opt: - no-new-privileges=true cpus: 1 networks: ingress: name: swarm-overlay external: true ipvlan: name: br0 external: true monitoring: name: monitoring external: true volumes: logs: name: traefik-logs |
traefik.yaml
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| api: dashboard: True insecure: True entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https permanent: true websecure: address: ":443" asDefault: true http: tls: certResolver: letsEncrypt domains: - main: "example.com" sans: - "*.example.com" middlewares: - traefik-real-ip@file - security-headers@file - rate-limit@file http3: advertisedPort: 443 forwardedHeaders: trustedIPs: - 127.0.0.1/32 - 192.168.0.0/16 - 172.16.0.0/12 - 10.0.0.0/8 # Cloudflare IPs kunnen hier dns-over-tls: address: :853/tcp mqtt-over-tls: address: :8883/tcp smtp-over-tls: address: :465/tcp ssh: address: :22/tcp providers: providersThrottleDuration: 15s file: directory: "/configs" docker: watch: true exposedByDefault: false network: "swarm-overlay" certificatesResolvers: letsEncrypt: acme: email: alex3305@tweakers.net storage: /acme.json dnsChallenge: # Provider credentials should be stored in environment variables. provider: cloudflare resolvers: - "1.1.1.1:53" - "1.0.0.1:53" metrics: prometheus: {} |
configs/middlewares.yaml
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| http: middlewares: traefik-real-ip: plugin: traefik-real-ip: {} local-ips-allowed: ipAllowList: sourceRange: - 192.168.0.0/16 - 172.16.0.0/12 - 10.0.0.0/8 security-headers: headers: customResponseHeaders: browserXssFilter: true contentTypeNosniff: true frameDeny: true rate-limit: rateLimit: average: 100 period: 1 burst: 100 |
Ik heb hier wat ik geknipt, maar mijn basis Caddyfile was ook gewoon 190 regelsIk heb eerder / vaker met Treafik gespeeld en gewerkt, maar vind dat nog steeds een enorm waterhoofd.
Yes. Dat zit er dus echt nét inDe reden dat ik aan het experimentern was/ben met Traefik voor thuis is dat ik geen Cloudflare heb (veel docker services hangen aan verschillende subdomeinen en toplevel domeinen, die vanzelfsprekend extern worden beheerd). Nu gebruik ik wel wat WAFjes, maar ik wil eigenlijk het gros van het botverkeer met Anubis en Crowdsec eruit filteren, eigenlijk dus volgens jouw plaatje.
Caddy heeft icm Anubis meerdere lagen/instanties nodig, terwijl Traefik dat netjes met middlewares kan afhandelen.
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| services: forgejo: container_name: forgejo image: codeberg.org/forgejo/forgejo:12.0.4 networks: internal: ingress: forgejo: labels: traefik.enable: true traefik.http.routers.forgejo.rule: "Host(`example.com`)" traefik.http.routers.forgejo.middlewares: "forgejo-anubis@docker" traefik.http.services.forgejo.loadbalancer.server.port: "80" traefik.tcp.routers.forgejo-ssh.entrypoints: "ssh" traefik.tcp.routers.forgejo-ssh.rule: "HostSNI(`*`)" traefik.tcp.services.forgejo-ssh.loadbalancer.server.port: "22" anubis: container_name: forgejo-anubis image: ghcr.io/techarohq/anubis:v1.22.0 networks: internal: ingress: environment: BIND: ":8080" TARGET: " " COOKIE_DOMAIN: "example.com" SERVE_ROBOTS_TXT: "true" REDIRECT_DOMAINS: "example.com" PUBLIC_URL: "https://anubis.example.com" labels: traefik.enable: true traefik.http.routers.forgejo-anubis.rule: "Host(`anubis.example.com`)" traefik.http.services.forgejo-anubis.loadbalancer.server.port: "8080" traefik.http.middlewares.forgejo-anubis.forwardauth.address: "http://anubis:8080/.within.website/x/cmd/anubis/api/check" networks: internal: name: forgejo-internal attachable: false forgejo: name: forgejo attachable: true driver: overlay ingress: name: swarm-overlay external: true |
Van Crowdsec wel, Anubis niet. Crowdsec en inmiddels ook AppSec gebruik ik voor al mijn HTTP diensten die allemaal aan het internet hangen. Ik heb een aantal regioblokkades via Cloudflare lopen en de Unifi firewall filtert ook het e.e.a.. Toch heb ik momenteel 9 actieve bans en volgens de Crowdsec Console zijn er de afgelopen 7 dagen 4800 requests geblokkeert. De afgelopen 30 dagen blijkbaar zo'n 140 bans. Dat vind ik best wel veel.Crowdsec heb ik nog niet naar gekeken, maar zou ik dan ook willen toepassen.
Heb jij enig idee hoeveel verkeer jij met Anubis en Crowdsec blokkeert, ondanks dat je ook al Cloudflare gebruikt? Ik lees sterk varierende cijfers als je geen Cloudflare gebruikt: daar claimen mensen dat ze 70-90% van het verkeer kwijt zijn op hun backend services. Als ik zie wat Wordfence op Wordpress al blokkeert, dan wil ik dat best geloven.
Mijn doel is overigens niet om Cloudflare-vrij te worden, maar wel om minder afhankelijk te worden. Crowdsec en Anubis zijn daar mooie stappen voor.