Cloudflare Workers

在 Cloudflare Worker 中偵測機械人與 VPN

在網站前部署一個 Worker,檢查每位訪客,並將結果告知您的原始伺服器。

快速上手

三個步驟即可上線

  1. 1

    部署 Worker

    亦可使用上方的部署按鈕。

    shell
    git clone https://github.com/ipscanner/ipscanner-cloudflare
    cd ipscanner-cloudflare
    npm install
    npx wrangler deploy
  2. 2

    加入 API 金鑰

    shell
    npx wrangler secret put IPSCANNER_API_KEY
  3. 3

    將其置於網站之前

    使用自訂網域或 workers.dev 時,請改為將 ORIGIN_URL 設為您的後端位址。

    wrangler.jsonc
    "routes": [{
      "pattern": "example.com/*",
      "zone_name": "example.com"
    }]

運作原理

每個請求的處理過程

  1. 1

    Worker 讀取訪客的 IP、User-Agent,以及 Cloudflare 提供的 JA4。

  2. 2

    Agentscan 與 IP Detection 並行運作,按訪客快取,1.5 秒無回應即放行請求。

  3. 3

    monitor 模式向原始伺服器傳送判定標頭。enforce 模式亦會對被封鎖的訪客回傳 403。

  4. 4

    已驗證的爬蟲一律放行,用戶端自行傳送的 X-IPScanner-* 標頭會被移除。

標頭

原始伺服器收到的標頭

檢查失敗或被略過時,僅設定 X-IPScanner-Status。

標頭範例
X-IPScanner-ClassAgentscanhuman
X-IPScanner-ActionAgentscanallow
X-IPScanner-ConfidenceAgentscan0.92
X-IPScanner-Network-ClassIP Detectionresidential_clean
X-IPScanner-Anonymized兩者false
X-IPScanner-RiskIP Detection12
X-IPScanner-CountryIP DetectionDE
X-IPScanner-StatusWorkerok

設定

設定項目

在 wrangler.jsonc 的 vars 區塊中設定。

變數預設值
MODEmonitor 加入標頭,enforce 亦會封鎖monitor
CHECK_AGENT執行 Agentscantrue
CHECK_IP執行 IP Detectiontrue
BLOCK_CLASSESenforce 模式下封鎖的 Agentscan 類別malicious_automation
BLOCK_ANONYMIZEDenforce 模式下一併封鎖 VPN、代理及 Torfalse
TIMEOUT_MS每次呼叫的時限,逾時後放行請求1500
AGENT_TTLAgentscan 判定結果的快取秒數600
IP_TTLIP 查詢結果的快取秒數3600
SKIP_PATHS略過檢查的路徑正規表示式靜態資源
ORIGIN_URL未設定路由時轉發的後端位址空白

常見問題

Cloudflare Worker 常見問題

每位未命中快取的訪客,每項啟用的檢查消耗一次請求,兩項均啟用即為兩次。快取 TTL 內的重複造訪不消耗請求。

由 monitor 模式開始

先觀察一星期標頭,再決定封鎖甚麼。