Plugin Traefik
Bots, Tor, VPN et proxys, vérifiés routeur par routeur avec un seul label. Démarre en mode monitor et ne bloque rien tant que vous ne basculez pas.
Gratuit, licence MITTesté avec Traefik v3.7
Entrypoint
websecure:443Routeur
app@dockerHost(`example.com`)Middlewares
gzip@dockeripscanner@dockerHumainAutoriserService
app@docker200X-IPScanner-Class: humanX-IPScanner-Action: allowJournal d'accès
Classes de trafic
Chaque visiteur reçoit une classe. Votre service la reçoit dans X-IPScanner-Class.
Installation
Placez-la dans l'environnement du conteneur Traefik. Chaque middleware ipscanner la lit.
environment:
IPSCANNER_API_KEY: pk_live_...Dans la configuration statique, ou avec deux flags CLI. Redémarrez Traefik.
experimental:
plugins:
ipscanner:
moduleName: github.com/ipscanner/ipscanner-traefik
version: v0.1.0siteIdLe mode et la politique viennent alors du tableau de bord, sans rechargement.
Ajouter un site dans le tableau de bordtraefik.http.middlewares.ipscanner.plugin.ipscanner.siteId=site_...Les autres routeurs le réutilisent sous ipscanner@docker.
traefik.http.routers.app.middlewares=ipscannerVotre stack
Le même plugin, où que Traefik lise sa configuration.
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-myappUn nom de middleware par app, ajouté à chaque routeur généré par Coolify. Derrière Cloudflare, définissez aussi trustedProxies=cloudflare et 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 et Compose seul lisent les mêmes labels.
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ipscanner
spec:
plugin:
ipscanner:
apiKey: urn:k8s:secret:ipscanner:apiKey
siteId: site_...Référencez-le depuis une IngressRoute ou avec l'annotation router.middlewares sur un Ingress.
http:
middlewares:
ipscanner:
plugin:
ipscanner:
apiKeyFile: /run/secrets/ipscanner_api_key
siteId: site_...La clé vient d'un secret Docker ou Kubernetes monté.
Tableau de bord Sites
Autorisez, signalez ou bloquez chaque classe depuis le tableau de bord. Le middleware applique un changement en 30 secondes.
Politique
Options
Définissez-les sur le middleware : en labels, en YAML ou dans la CRD.
| Option | Par défaut | Rôle |
|---|---|---|
siteIdVotre site dans le tableau de bord ; mode et politique en viennent | Vide | Votre site dans le tableau de bord ; mode et politique en viennent |
modemonitor ou enforce, sans siteId | monitor | monitor ou enforce, sans siteId |
blockClassesClasses bloquées en mode enforce sans siteId | malicious_automation | Classes bloquées en mode enforce sans siteId |
trustedProxiesProxys dont les en-têtes IP sont fiables : CIDR, private, cloudflare | Vide | Proxys dont les en-têtes IP sont fiables : CIDR, private, cloudflare |
ipHeadersEn-têtes lus depuis un proxy de confiance, dans l'ordre | X-Forwarded-For | En-têtes lus depuis un proxy de confiance, dans l'ordre |
timeoutDélai d'une vérification, puis la requête passe | 1500ms | Délai d'une vérification, puis la requête passe |
cacheTTLCache des verdicts par visiteur | 10m | Cache des verdicts par visiteur |
cacheSizeVisiteurs gardés en cache | 10000 | Visiteurs gardés en cache |
policyTTLDurée de validité d'une politique chargée | 30s | Durée de validité d'une politique chargée |
skipPathsRegex de chemin qui saute la vérification | Fichiers statiques | Regex de chemin qui saute la vérification |
apiKeyFileFichier contenant la clé API, pour les secrets | Vide | Fichier contenant la clé API, pour les secrets |
debugAjoute les en-têtes aux réponses et journalise chaque décision | false | Ajoute les en-têtes aux réponses et journalise chaque décision |
Questions
Ajoutez le middleware, lisez une semaine de trafic dans le tableau de bord, puis bloquez.