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 模式开始

先观察一周请求头,再决定拦截什么。