ProxyTracer:VPN 与代理拦截器

:information_source: 摘要 使用 ProxyTracer API 在用户注册、登录期间或全局范围内检测和阻止 VPN、Tor 及代理流量。
:hammer_and_wrench: 仓库链接 https://github.com/ProxyTracer/discourse-proxytracer
:open_book: 安装指南 如何在 Discourse 中安装插件

本插件利用 ProxyTracer API 在 Discourse 中检测和阻止 VPN、Tor 及代理流量。

功能特性

  • 提供精细控制,可在用户新注册、现有用户认证或全局针对所有网站访客时阻止 VPN、Tor 和代理用户。如果您允许 VPN、Tor 和代理用户访问论坛内容,则可以节省 API 请求,仅启用注册和认证阶段的保护。
  • 采用缓存机制存储最近的 IP 地址评估结果,从而减少 API 请求并降低延迟。您可以在设置中控制 IP 地址评估结果的保留时长。
  • 若发生 API 超时或网络故障,插件将优先保障用户访问权限,以防止大规模锁定。此行为可通过选项进行更改。
  • 内置对精确 IP 地址和 CIDR 子网白名单的支持。

配置步骤

  1. ProxyTracer 仪表板 获取标准 API 密钥。
  2. 进入 Discourse 管理面板:管理 → 插件 → ProxyTracer,查找 ProxyTracer 的设置项。
  3. ProxyTracer API Key 字段中输入您的 API 密钥。
  4. 通过切换 Enabled during Signup(注册时启用)、Enabled during Login(登录时启用)和/或 Enabled for All Visitors(对所有访客启用)来启用保护参数。
  5. 将任何受信任的 IP 地址或 CIDR 范围添加到 Whitelisted IPs(白名单 IP)列表中。
  6. (可选)根据您的服务器具体流量需求,调整 API 超时时间和 Redis 缓存持续时间限制。
  7. (可选)自定义被阻止用户看到的阻止消息。例如,您可以添加联系网站管理员的说明,以防用户认为阻止不当,或他们并非通过代理、Tor 或 VPN 访问网站。

设置项

包含设置项及其说明的表格

名称 说明
API 超时(毫秒) 等待 API 响应的时间上限,超过此时间则视为超时。
缓存持续时间(小时) 在再次检查 API 之前,记住某个 IP 地址的时长。
错误时开放访问 如果 API 崩溃或超时,仍允许用户注册或登录,以防止锁定所有用户。
注册时启用 在新用户尝试注册时阻止代理和 VPN。
登录时启用 在现有用户尝试登录时阻止代理和 VPN。
对所有访客启用 阻止代理和 VPN 访问或查看论坛上的任何页面。(警告:此选项会检查每一位访客,并大量消耗您的 API 配额)。
阻止消息 用户被阻止时显示的确切错误消息。
白名单 IP 被严格允许绕过阻止的 IP 地址或 CIDR 范围(例如:192.168.1.0/24)。

网络配置:Cloudflare 与反向代理

:warning: 为确保 ProxyTracer 有效运行,Discourse 应用程序必须接收真实的客户端 IP 地址。

为确保正确的 IP 地址转发,您可以参考这些 详细说明

紧急访问

如果您将自己锁在系统外,可以按照这些 简单步骤 恢复访问权限。


如果您想进行测试,可以注册 ProxyTracer 并获取一些免费的 API 积分用于测试。

4 个赞

积分会在下个月重新开始计算吗?

你问的是注册时的免费积分吗?如果是的话,那只是一次性充值。

1 个赞

这难道不会完全违背该插件的初衷吗?任何人都可以使用安全模式。

2 个赞

这取决于具体情况。有一个站点设置允许您禁用安全模式,这对于受控主题组件以及其他用户不应轻易禁用的组件/插件(如广告、访客门禁等)很有帮助。但如果您已退出登录,这也会使管理员使用安全模式变得更加困难。我认为他们仍然可以通过 管理员登录 来启用它。

对于此插件,我怀疑安全模式是否有帮助。安全模式仅禁用插件的前端部分,而此插件完全由 Ruby 编写。因此,我认为禁用 JavaScript 自定义并无太大帮助。这一事实让我对该插件略存疑虑,同样令我怀疑的是,它包含了一个 about.json 文件,仿佛它是一个主题组件。但最终,每个人都要对自己在论坛上安装的代码负责。

4 个赞

您完全正确,我可以通过在 freshly 启动的 Discourse 实例上进行测试来确认这一点。我随即更新了文档,添加了实际有效的操作说明,即登录服务器并手动禁用该插件:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exit

我可以确认,当“对所有访问者启用”设置处于开启状态,且有人尝试通过 VPN/代理连接并访问安全模式时,安全模式将无法访问

确实,对于标准插件而言,about.json 是多余的,我已将其从仓库中移除。

感谢 @Moin 的所有反馈。如果您有任何其他意见或建议,欢迎在此留言。代码完全开源,欢迎任何贡献:GitHub - ProxyTracer/discourse-proxytracer

1 个赞

@ProxyTracer 当我尝试使用 Cloudflare Warp 登录时,返回的是“未知错误”,而不是被拦截的提示。

发现得很及时!这个问题应该在 0.1.1 版本中已修复。能否确认升级后问题是否已解决?

1 个赞

我正在测试你们的服务,想了解一下它与 ‘templates/cloudflare.template.yml’ 是否存在冲突,以及该插件是否会支持 Discourse 核心版本的后续更新。

我想知道,在一个注重隐私保护的社区里,如何找到一种折中方案,以免失去像我这样的用户。

感谢进行测试!README.md 中关于 Cloudflare 集成 的文档明确建议包含 "templates/cloudflare.template.yml",因为这是确保论坛位于 Cloudflare 之后时,Discourse 能够提取用户真实 IP 的必要条件。因此,这与该模板并不冲突,实际上包含它是必需的。

是的,我们致力于跟进 Discourse 的核心更新,以确保与较新版本的完全兼容。

2 个赞

我在想,如果增加一个选项——不直接封禁用户,而是要求他们通过 hCaptcha 验证,并将此选项设为默认设置——是否会是一个很好的折中方案?因为它增加了恰到好处的门槛,既能提高垃圾信息发送者和封号规避者的操作难度,又能让那些希望通过 VPN、Tor 等工具保护自身在线隐私的合法用户正常使用。当然,对于那些仍希望完全封禁上述网络的管理员来说,他们依然可以保留原有的封禁选项。大家怎么看?

1 个赞

非常感谢!我刚刚在沙盒环境中做了一个测试,运行得非常完美。

你们是否考虑添加与移动网络 IP/ASN 相关的功能?在我的论坛中,经常遇到这种情况:用户从宽带网络切换到运营商的 4G/5G 网络以获取不同的 IP,从而试图绕过 Discourse 中的注册或登录限制。

如果能识别出 IP 是否属于移动运营商的 ASN,并可选地允许在注册/登录过程中以不同方式处理这些 IP,将会非常有用。

也许这有点超出了 ProxyTracer 的范围,因为它不一定与 VPN/代理有关,但对于解决 Discourse 如何处理每个 IP 的账户数量限制这一特定问题来说,会很有帮助。

就 hCaptcha 而言,我在自己的安装中已经在使用了,效果非常好!也许可以将 Discourse 核心中已有的那个插件与你的插件结合起来,作为额外功能?

我认同完全封锁的想法,毕竟这正是目标所在。不过,针对固定和移动网络的 IPv4 和 IPv6,通过设置验证挑战来限制访问似乎非常有用,因为 AI 特别喜欢在论坛上注册账号。

你好,感谢你能考虑我的回复。这确实是一件让我非常感兴趣的事情,我认为对于用户和管理员双方来说,这是一个特别敏感的实施方案。

说实话,我觉得自己就像是一个正在完成验证码(CAPTCHA)以证明自己是人类的机器人,故意表现得像个机器人一样。我在相关主题中提到过,Anubis 的实现方式(POW)在我看来要更令人愉悦且实用得多。

我理解这超出了本项目的范围,但就我目前的分析来看,使用你提到的那种验证码是可行的,而且从字面意义上说,它完全不会阻碍那些重视隐私、希望在不被拒之门外的前提下做出贡献的用户。

该插件还可以提供的另一项信息是,哪个账户曾尝试通过 VPN/代理进行登录。