Traefik 外掛
機械人、Tor、VPN 和代理,每個路由只需一個標籤即可偵測。預設以 Monitor 模式運行,切換前不會攔截任何請求。
免費,MIT 授權已在 Traefik v3.7 上測試
入口點
websecure:443路由
app@dockerHost(`example.com`)中介軟體
gzip@dockeripscanner@docker真人放行服務
app@docker200X-IPScanner-Class: humanX-IPScanner-Action: allow存取日誌
流量類別
每位訪客都會被歸入一個類別,您的服務透過 X-IPScanner-Class 收到它。
安裝
environment:
IPSCANNER_API_KEY: pk_live_...寫入靜態設定,或使用兩個 CLI 參數,然後重新啟動 Traefik。
experimental:
plugins:
ipscanner:
moduleName: github.com/ipscanner/ipscanner-traefik
version: v0.1.0traefik.http.middlewares.ipscanner.plugin.ipscanner.siteId=site_...其他路由可透過 ipscanner@docker 重用它。
traefik.http.routers.app.middlewares=ipscanner您的技術堆疊
無論 Traefik 從何處讀取設定,都是同一個外掛。
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-myapp每個應用程式使用一個獨立的中介軟體名稱,並加入 Coolify 產生的每個路由。如網站位於 Cloudflare 之後,亦需設定 trustedProxies=cloudflare 和 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 和一般 Compose 讀取相同的標籤。
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: ipscanner
spec:
plugin:
ipscanner:
apiKey: urn:k8s:secret:ipscanner:apiKey
siteId: site_...在 IngressRoute 中引用,或在 Ingress 上使用 router.middlewares 註解。
http:
middlewares:
ipscanner:
plugin:
ipscanner:
apiKeyFile: /run/secrets/ipscanner_api_key
siteId: site_...金鑰來自掛載的 Docker 或 Kubernetes Secret。
網站控制台
在控制台中為每個類別選擇允許、標記或攔截。中介軟體會在 30 秒內套用變更。
策略
選項
在中介軟體上設定:透過標籤、YAML 或 CRD。
| 選項 | 預設值 | 作用 |
|---|---|---|
siteId控制台中的網站,模式和策略由它決定 | 空 | 控制台中的網站,模式和策略由它決定 |
mode未設定 siteId 時使用 monitor 或 enforce | monitor | 未設定 siteId 時使用 monitor 或 enforce |
blockClasses未設定 siteId 時 enforce 模式下攔截的類別 | malicious_automation | 未設定 siteId 時 enforce 模式下攔截的類別 |
trustedProxies可信任其 IP 標頭的代理:CIDR、private、cloudflare | 空 | 可信任其 IP 標頭的代理:CIDR、private、cloudflare |
ipHeaders按順序從可信代理讀取的標頭 | X-Forwarded-For | 按順序從可信代理讀取的標頭 |
timeout單次偵測的時限,逾時後請求放行 | 1500ms | 單次偵測的時限,逾時後請求放行 |
cacheTTL每位訪客的判定快取 | 10m | 每位訪客的判定快取 |
cacheSize快取中保留的訪客數目 | 10000 | 快取中保留的訪客數目 |
policyTTL已取得策略的有效時間 | 30s | 已取得策略的有效時間 |
skipPaths略過偵測的路徑正規表示式 | 靜態資源 | 略過偵測的路徑正規表示式 |
apiKeyFile存放 API 金鑰的檔案,用於 Secret | 空 | 存放 API 金鑰的檔案,用於 Secret |
debug在回應中加入標頭並記錄每次判定 | false | 在回應中加入標頭並記錄每次判定 |
常見問題