这是一个用于对抗低效率大规模 AI 抓取和机器人的自托管滥用检测和规则执行工具go-away
,使用常规非核选项。
功能特点:
- 丰富的规则匹配:使用 Common Expression Language (CEL),允许任意选择客户端属性,支持布尔运算符,可定义模板用于规则匹配和挑战条件。
- 路径修改:可修改挑战服务的路径和包名,无需编辑源代码或进行分叉,通过命令行参数
--path
指定新路径。 - 页面模板和定制支持:可加载内部或外部模板来自定义挑战或错误页面的外观,支持多种主题和自定义 logo,可直接在
config.yml
文件中修改语言和字符串。 - 高级动作:除常见的 PASS / CHALLENGE / DENY 规则外,还提供更多动作,并可通过代码扩展。
- 多挑战匹配:可为规则提供多个挑战选项,用户通过之前通过的挑战可不受影响。
- 非 JavaScript 挑战:提供多种不依赖 JavaScript 的挑战,用于轻量级请求检查。
- 自定义 JavaScript / WASM 挑战:提供 WASM 接口用于服务器端证明生成和检查,可实现 Captchas 或浏览器指纹测试。
- 上游 PROXY 支持:支持 HAProxy PROXY 协议,可发送客户端 IP 而不更改连接或 HTTP 头,适用于 HAProxy、Caddy、nginx 等。
- 自动 TLS 支持和 HTTP/2 支持:可通过 ACME 目录启用自动证书生成和 TLS,支持 HTTP/2 明文或通过配置上游代理发送
h2c://
。 - TLS 指纹识别:运行 TLS 时进行客户端的 TLS 指纹识别,可用于条件或其他应用逻辑。
- 网络范围和自动过滤:检查来源网络范围,可通过获取 JSON / TXT / HTML 页面或列表加载网络范围,并使用
jq
或正则表达式进行过滤。 - 多后端支持:支持多个后端,可定义特定于后端的规则和条件,并支持子域通配符。
- IPv6 Happy Eyeballs 挑战重试:客户端通过 IPv4 或 IPv6 连接时,挑战将自动重试,并标记挑战的地址类型。
示例策略:
- Forgejo:提供用于 Forgejo 实例的策略文件,可编辑
http-cookie-check
挑战、调整网络范围等。 - Generic:提供适用于任何站点的基线策略文件,可编辑
homesite
规则、允许静态文件访问等。 - Snippets:可定义要包含的代码片段,支持 YAML 锚点/别名。
- Forgejo:提供用于 Forgejo 实例的策略文件,可编辑
- 开发背景和目标:过去几年,该工具所在的 Git 实例遭受大量抓取,最初部署了 Anubis,后开发
go-away
以替代 Anubis,减少对合法用户的影响,并提供更多动态目标新攻击波的选项。 - 未来计划:完成代码重构、完善文档、改进策略文件语法、允许用户选择备用挑战、替换默认模板、添加多语言支持、优化测试路径、缓存临时获取的数据、支持动态策略重载、实现多域/子域与一个后端处理、合并规则和条件为一个大型 AST、探索暴露用于 Caddy 的模块、更明确地选择 HTTP/HTTP(s)监听器和证书、暴露挑战解决率的指标等。
- 其他类似项目:列举了多个类似的自我托管工具,包括 Anubis、powxy、PoW! Bot Deterrent、CSSWAF、anticrawl、ngx_http_js_challenge_module、haproxy-protection 等,介绍了它们的源代码、描述和使用的方法。
- 开发信息:Go 包可作为
git.gammaspectra.live/git/go-away/cmd/go-away
的命令或git.gammaspectra.live/git/go-away/lib
的库使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。