Traefik-Plugin
Bots, Tor, VPNs und Proxys, pro Router mit einem Label geprüft. Startet im Monitor-Modus und blockiert nichts, bis Sie umschalten.
Kostenlos, MIT-LizenzGetestet mit Traefik v3.7
Entrypoint
websecure:443Router
app@dockerHost(`example.com`)Middlewares
gzip@dockeripscanner@dockerMenschZulassenService
app@docker200X-IPScanner-Class: humanX-IPScanner-Action: allowAccess-Log
Traffic-Klassen
Jeder Besucher erhält eine Klasse. Ihr Service bekommt sie als X-IPScanner-Class.
Einrichtung
Hinterlegen Sie ihn in der Umgebung des Traefik-Containers. Jede ipscanner-Middleware liest ihn.
environment:
IPSCANNER_API_KEY: pk_live_...In der statischen Konfiguration oder als zwei CLI-Flags. Danach Traefik neu starten.
experimental:
plugins:
ipscanner:
moduleName: github.com/ipscanner/ipscanner-traefik
version: v0.1.0siteId setzenModus und Richtlinie kommen dann aus dem Dashboard, ohne Neuladen.
Website im Dashboard anlegentraefik.http.middlewares.ipscanner.plugin.ipscanner.siteId=site_...Andere Router nutzen sie als ipscanner@docker.
traefik.http.routers.app.middlewares=ipscannerIhr Stack
Dasselbe Plugin, egal wo Traefik seine Konfiguration liest.
command:
# ...the flags Coolify set
- '--experimental.plugins.ipscanner.modulename=github.com/ipscanner/ipscanner-traefik'
- '--experimental.plugins.ipscanner.version=v0.1.0'
environment:
- IPSCANNER_API_KEY=pk_live_...traefik.http.middlewares.ipscanner-myapp.plugin.ipscanner.siteId=site_...
traefik.http.routers.https-0-<uuid>.middlewares=gzip,ipscanner-myappEin Middleware-Name pro App, angehängt an jeden Router, den Coolify erzeugt hat. Hinter Cloudflare zusätzlich trustedProxies=cloudflare und ipHeaders=CF-Connecting-IP setzen.
services:
traefik:
image: traefik:v3.7
command:
- --providers.docker=true
- --entrypoints.web.address=:80
- --experimental.plugins.ipscanner.modulename=github.com/ipscanner/ipscanner-traefik
- --experimental.plugins.ipscanner.version=v0.1.0
environment:
IPSCANNER_API_KEY: ${IPSCANNER_API_KEY}
ports: ["80:80"]
volumes: ["/var/run/docker.sock:/var/run/docker.sock:ro"]
app:
image: traefik/whoami:v1.11.0
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`example.com`)
- traefik.http.routers.app.middlewares=ipscanner
- traefik.http.middlewares.ipscanner.plugin.ipscanner.siteId=site_...Dokploy und einfaches Compose lesen dieselben Labels.
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ipscanner
spec:
plugin:
ipscanner:
apiKey: urn:k8s:secret:ipscanner:apiKey
siteId: site_...Aus einer IngressRoute referenzieren oder per router.middlewares-Annotation an einem Ingress.
http:
middlewares:
ipscanner:
plugin:
ipscanner:
apiKeyFile: /run/secrets/ipscanner_api_key
siteId: site_...Der Schlüssel kommt aus einem eingebundenen Docker- oder Kubernetes-Secret.
Websites im Dashboard
Erlauben, markieren oder blockieren Sie jede Klasse im Dashboard. Die Middleware übernimmt eine Änderung innerhalb von 30 Sekunden.
Richtlinie
Optionen
Setzen Sie sie an der Middleware: als Labels, in YAML oder in der CRD.
| Option | Standard | Funktion |
|---|---|---|
siteIdIhre Website im Dashboard; Modus und Richtlinie kommen von dort | Leer | Ihre Website im Dashboard; Modus und Richtlinie kommen von dort |
modemonitor oder enforce, wenn keine siteId gesetzt ist | monitor | monitor oder enforce, wenn keine siteId gesetzt ist |
blockClassesKlassen, die ohne siteId im Enforce-Modus blockiert werden | malicious_automation | Klassen, die ohne siteId im Enforce-Modus blockiert werden |
trustedProxiesProxys, deren IP-Header vertraut wird: CIDRs, private, cloudflare | Leer | Proxys, deren IP-Header vertraut wird: CIDRs, private, cloudflare |
ipHeadersHeader, die von einem vertrauenswürdigen Proxy gelesen werden, in Reihenfolge | X-Forwarded-For | Header, die von einem vertrauenswürdigen Proxy gelesen werden, in Reihenfolge |
timeoutZeitbudget pro Prüfung, danach geht die Anfrage durch | 1500ms | Zeitbudget pro Prüfung, danach geht die Anfrage durch |
cacheTTLVerdict-Cache pro Besucher | 10m | Verdict-Cache pro Besucher |
cacheSizeBesucher im Cache | 10000 | Besucher im Cache |
policyTTLWie lange eine geladene Richtlinie gültig bleibt | 30s | Wie lange eine geladene Richtlinie gültig bleibt |
skipPathsPfad-Regex, die die Prüfung überspringt | Statische Dateien | Pfad-Regex, die die Prüfung überspringt |
apiKeyFileDatei mit dem API-Schlüssel, für Secrets | Leer | Datei mit dem API-Schlüssel, für Secrets |
debugFügt die Header den Antworten hinzu und loggt jede Entscheidung | false | Fügt die Header den Antworten hinzu und loggt jede Entscheidung |
Fragen
Middleware hinzufügen, eine Woche Traffic im Dashboard lesen, dann blockieren.