Caddy 模組

攔截機械人、VPN 與 Tor 的 Caddy 模組

在網站區塊中加入一條 ipscanner 指令,每位訪客都會在 reverse_proxy 之前接受檢測。預設以 Monitor 模式運行,切換前不會攔截任何請求。

免費,MIT 授權Caddy 2.8+

流量類別

可以攔截哪些流量

每位訪客對應一個類別。可在控制台中攔截某個類別,亦可寫入 block_classes。

  • 真人human
  • 已驗證機械人verified_bot一律放行
  • AI 代理ai_agent
  • 惡意自動化malicious_automationEnforce 預設
  • Tortor
  • VPNvpn
  • 代理proxy
  • 主機託管hosting
  • 隱私中繼relay

安裝

四個步驟上線

  1. 1

    取得 API 金鑰

    Caddy 從 IPSCANNER_API_KEY 讀取,亦可在 Caddyfile 中以 api_key 設定。

    建立免費 API 金鑰
    shell
    export IPSCANNER_API_KEY=<your API key>
  2. 2

    編譯附帶模組的 Caddy

    使用 xcaddy 或在 Docker 中建置。需要 Caddy 2.8 或更新版本。

    xcaddy build --with github.com/ipscanner/ipscanner-caddy
    ./caddy list-modules | grep ipscanner
  3. 3

    在控制台中新增網站

    網站保存政策並顯示流量。複製其 Site ID。

    新增網站
    example.comCaddyMonitor

    Site ID

    site_4fQ8nZ2kLm7xR1vT9cBw

  4. 4

    加入指令

    無需全域 order 行:它在 basic_auth 和 reverse_proxy 之前運行。

    Caddyfile
    example.com {
    	ipscanner {
    		site_id site_4fQ8nZ2kLm7xR1vT9cBw
    	}
    	reverse_proxy localhost:8080
    }

不使用網站

Caddyfile 或 JSON

在設定中指定模式和要攔截的類別。ipscanner /app/* 一類的匹配器可將檢測限於部分路徑。

example.com {
	ipscanner {
		mode enforce
		block_classes malicious_automation tor
	}
	reverse_proxy localhost:8080
}

佔位符

在記錄和匹配器中使用判定結果

由指令設定,可用於 log_append、vars 匹配器和請求標頭。

佔位符
{http.vars.ipscanner.status}ok, error, timeout, backoff, skipped
{http.vars.ipscanner.class}流量類別,狀態為 ok 時設定
{http.vars.ipscanner.action}allow, flag, block, would_flag, would_block
Caddyfile
log_append ipscanner_class {http.vars.ipscanner.class}
log_append ipscanner_action {http.vars.ipscanner.action}

@flagged vars ipscanner.action flag
request_header @flagged X-Review 1

用戶端 IP

位於負載平衡器或 CDN 之後

模組檢測 Caddy 解析出的用戶端 IP。請信任您的代理,trusted_proxies_strict 可防止訪客偽造中間節點。

Caddyfile
{
	servers {
		trusted_proxies static 10.0.0.0/8
		trusted_proxies_strict
	}
}

設定

子指令

全部為可選項。JSON 設定使用相同名稱。

子指令預設值
api_keyAPI 金鑰。未設定時所有請求放行。{env.IPSCANNER_API_KEY}
site_id控制台中的網站,決定模式和政策。空
modemonitor 或 enforce。設定網站後僅 monitor 生效。monitor
block_classes未設定網站時,Enforce 模式下攔截的類別。malicious_automation
timeout單次檢測的時間上限。1.5s
cache_ttl每位訪客的判定快取時間。10m
cache_size判定快取項目數。10000
policy_ttl網站政策的快取時間。30s
skip_paths不檢測的路徑(正規表示式)。靜態資源
block_message403 頁面的文字。Blocked by IPScanner edge guard.
debug除錯回應標頭,並為每次判定記錄一行。關閉
api_urlAPI 基本 URL。https://ipscanner.io

一律放行

永不攔截的流量

  • 經過驗證的搜尋引擎和 AI 爬蟲。
  • 私有位址、迴環位址和 OPTIONS 請求。
  • 靜態資源和 skip_paths 中的路徑。
  • IPScanner 回應緩慢或無法使用時的所有請求。

常見問題

Caddy 模組常見問題

不會。Monitor 模式將請求標記為 would_block 並放行。確認記錄無誤後,再將網站或 Caddyfile 切換為 Enforce。

從 Monitor 模式開始

編譯附帶模組的 Caddy,觀察一星期的判定,再開始攔截。