Anubis 深度解析:用策略与工作量证明保护自托管网站
分析 Anubis 如何作为反向代理判断请求、向可疑客户端发放浏览器工作量证明,并说明策略、部署、可观测性、无障碍、安全与误拦截代价。
项目定位与关注理由
Anubis 是部署在源站前的开源 Web 防护代理,目标是让大规模自动抓取付出计算成本,同时让符合策略的用户进入网站。本次抓取有 20,826 个 Star,近 30 天约 23 次提交,最新版本是 v1.25.0。它因 AI 数据抓取压力受到关注,但维护者也把它描述为高摩擦手段,不能只按热度采用。
场景与关键能力
它适合文档站、代码托管、个人服务或公共社区在机器人洪峰下保护有限 CPU、带宽和数据库连接。策略可以允许、拒绝、挑战或为请求加权,识别已知机器人和自定义路径;通过挑战的客户端获得签名通行凭据。项目还提供 Prometheus 指标,便于观察挑战、失败、策略命中和请求流量。
请求处理与工作量证明
请求先经过按顺序评估的策略规则。ALLOW 直接放行,DENY 拒绝,CHALLENGE 进入验证,WEIGH 调整后续难度。挑战页面在浏览器计算一个满足目标的结果,服务端用较低成本验证,成功后签发带时效的凭据。该机制把批量抓取成本转移给客户端,却不会证明访问者的真实身份,也不能保证脚本永远无法求解。
技术栈与集成方式
核心服务用 Go 编写,挑战界面使用 Preact,策略以 YAML 配置。通行凭据涉及签名与 JWT,项目文档说明 Ed25519 密钥和会话配置。它通常置于 nginx、Caddy、HAProxy、Traefik 或 Kubernetes 入口与源站之间,也可用容器、系统包或服务运行。指标可交给 Prometheus;可信代理头、真实客户端地址和目标 URL 必须配置正确。
最小部署路径
先选择官方支持的容器镜像或对应平台安装包,在隔离环境让 Anubis 代理一个测试站点,并设置目标服务、监听地址和密钥。随后配置外层 TLS 与反向代理头,从默认策略开始,只为已验证的搜索引擎、监控和内部网络增加最小允许规则。上线前测试首页、API、静态资源、登录、无 JavaScript 客户端和缓存,并保存快速回滚路径。
收益与实际代价
工作量证明让普通请求的服务端验证便宜、批量客户端的累计成本升高,也可在不依赖托管防护商的情况下自控策略。代价是首次访问延迟、移动设备耗电、JavaScript 依赖、无障碍问题和误拦截;先进抓取器仍可执行挑战。难度太低没有保护效果,太高会伤害真实用户,策略维护与监控因此比安装本身更重要。
安全、隐私与许可证
Anubis 不应直接信任来自公网的 `X-Forwarded-For`,只有明确的上游代理才能提供客户端地址。密钥应持久保存并限制权限,管理和调试端点不应暴露,日志与指标也要避免记录敏感查询。挑战 Cookie 不是账户登录;源站仍需认证、授权、补丁和速率限制。项目采用 MIT 许可证,部署方还要评估计算挑战对隐私、能耗和访问公平性的影响。