Traefik-plugin
Bots, Tor, VPN's en proxy's, per router gecontroleerd met één label. Start in monitor-modus en blokkeert niets tot je omschakelt.
Gratis, MIT-licentieGetest met Traefik v3.7
Entrypoint
websecure:443Router
app@dockerHost(`example.com`)Middlewares
gzip@dockeripscanner@dockerMensToestaanService
app@docker200X-IPScanner-Class: humanX-IPScanner-Action: allowAccess-log
Verkeersklassen
Elke bezoeker krijgt één klasse. Je service ontvangt die als X-IPScanner-Class.
Installatie
Zet hem in de omgeving van de Traefik-container. Elke ipscanner-middleware leest hem.
environment:
IPSCANNER_API_KEY: pk_live_...In de statische configuratie, of als twee CLI-flags. Herstart Traefik.
experimental:
plugins:
ipscanner:
moduleName: github.com/ipscanner/ipscanner-traefik
version: v0.1.0siteIdModus en beleid komen dan uit het dashboard, zonder herladen.
Voeg een site toe in het dashboardtraefik.http.middlewares.ipscanner.plugin.ipscanner.siteId=site_...Andere routers hergebruiken hem als ipscanner@docker.
traefik.http.routers.app.middlewares=ipscannerJouw stack
Dezelfde plugin, waar Traefik zijn config ook leest.
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-myappEén middlewarenaam per app, toegevoegd aan elke router die Coolify heeft aangemaakt. Achter Cloudflare zet je ook trustedProxies=cloudflare en ipHeaders=CF-Connecting-IP.
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 en gewone Compose lezen dezelfde labels.
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ipscanner
spec:
plugin:
ipscanner:
apiKey: urn:k8s:secret:ipscanner:apiKey
siteId: site_...Verwijs ernaar vanuit een IngressRoute of met de router.middlewares-annotatie op een Ingress.
http:
middlewares:
ipscanner:
plugin:
ipscanner:
apiKeyFile: /run/secrets/ipscanner_api_key
siteId: site_...De sleutel komt uit een gekoppeld Docker- of Kubernetes-secret.
Sites-dashboard
Sta elke klasse toe, markeer of blokkeer hem in het dashboard. De middleware neemt een wijziging binnen 30 seconden over.
Beleid
Opties
Zet ze op de middleware: als labels, in YAML of op de CRD.
| Optie | Standaard | Wat het doet |
|---|---|---|
siteIdJe site in het dashboard; modus en beleid komen daarvandaan | Leeg | Je site in het dashboard; modus en beleid komen daarvandaan |
modemonitor of enforce, als er geen siteId is | monitor | monitor of enforce, als er geen siteId is |
blockClassesKlassen die zonder siteId in enforce-modus worden geblokkeerd | malicious_automation | Klassen die zonder siteId in enforce-modus worden geblokkeerd |
trustedProxiesProxy's waarvan de IP-headers vertrouwd worden: CIDR's, private, cloudflare | Leeg | Proxy's waarvan de IP-headers vertrouwd worden: CIDR's, private, cloudflare |
ipHeadersHeaders die van een vertrouwde proxy worden gelezen, op volgorde | X-Forwarded-For | Headers die van een vertrouwde proxy worden gelezen, op volgorde |
timeoutTijd voor één controle, daarna gaat het verzoek door | 1500ms | Tijd voor één controle, daarna gaat het verzoek door |
cacheTTLVerdict-cache per bezoeker | 10m | Verdict-cache per bezoeker |
cacheSizeBezoekers in de cache | 10000 | Bezoekers in de cache |
policyTTLHoe lang een opgehaald beleid geldig blijft | 30s | Hoe lang een opgehaald beleid geldig blijft |
skipPathsPad-regex die de controle overslaat | Statische bestanden | Pad-regex die de controle overslaat |
apiKeyFileBestand met de API-sleutel, voor secrets | Leeg | Bestand met de API-sleutel, voor secrets |
debugZet de headers op responses en logt elke beslissing | false | Zet de headers op responses en logt elke beslissing |
Vragen
Voeg de middleware toe, bekijk een week verkeer in het dashboard en blokkeer dan.