Discourse 论坛
官方为 Discourse 打造的 ProxyTracer 集成插件。此插件为您的社区引入企业级 IP 威胁情报,自动识别已知的 VPN、代理、数据中心机房及 Tor 节点,支持在注册、登录或全站访问层面精准拦截恶意流量。
该插件通过此 Github repository 进行分发与开源。
功能特性
- 精细化防护策略:支持在全站访问、新用户注册、老用户登录或仅后台管理面板等不同层级启用 VPN / 代理检测。
- 内置 Redis 缓存系统,自动复用对同一 IP 的近期检测结果,大幅削减外部 API 请求量并实现零延迟放行。
- 在发生 API 超时或网络异常时,插件优先放行合规用户以防止大规模误封。该行为可通过选项进行调整。
- 内置支持精确 IP 及 CIDR 子网白名单。
安装指南
-
通过 SSH 连接至服务器并进入 Discourse 目录:
cd /var/discourse -
打开容器配置文件进行编辑:
nano containers/app.yml -
找到
hooks区域,并在docker_manager安装配置下方直接追加仓库克隆命令:hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/proxytracer/discourse-proxytracer.git -
保存配置文件并重新构建 Discourse 容器以编译插件:
./launcher rebuild app
配置说明:
- 从 ProxyTracer Dashboard 获取标准 API 密钥凭据。
- 进入 Discourse 管理后台:Admin → Plugins → ProxyTracer 找到 ProxyTracer 的设置项。
-
将您的 API 密钥填入
ProxyTracer API Key字段。 -
通过勾选
Enabled during Signup、Enabled during Login和/或Enabled for All Visitors启用防护参数。 -
将受信任的 IP 或 CIDR 网段添加至
Whitelisted IPs列表。 - (可选)根据服务器的具体流量需求,调整 API 超时时间与 Redis 缓存时长限制。
- (可选)自定义向被拦截用户展示的拦截提示消息。例如,您可以添加联系站点管理员的操作指引,以便用户在认为拦截有误且未通过代理/VPN 访问时发起申诉。

网络配置:Cloudflare 与反向代理
请遵循下方与您的服务器架构相匹配的配置指南,以确保正确的 IP 转发。
直连 Cloudflare 架构(标准安装)
这适用于您的 Discourse 服务器直连互联网,且仅使用 Cloudflare 进行 DNS 解析和边缘代理的标准场景。在此配置下,您必须配置 Discourse 信任 Cloudflare 的 IP 范围,并从传入的请求头中提取真实客户端 IP。
-
通过 SSH 连接到您的服务器并编辑容器配置:
nano /var/discourse/containers/app.yml -
找到
templates:配置块,追加官方 Cloudflare 模板templates/cloudflare.template.yml:templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/cloudflare.template.yml" -
保存文件并重新构建 Discourse 容器以生效:
./launcher rebuild app
多层代理架构(Cloudflare + 本地反向代理)
适用于 Discourse 部署在本地反向代理(如 CloudPanel、Nginx Proxy Manager、Traefik、Plesk)之后且最外层接入了 Cloudflare 的多层代理场景。在这种“双重反向代理”架构下,官方的 cloudflare.template.yml 会失效,因为请求是由宿主机本地网卡转发给容器而非 Cloudflare 直连。在此场景下切勿使用该模板。
相反,您必须配置本地反向代理从 CF-Connecting-IP 请求头解析真实客户端 IP,且必须仅对来自受信任 Cloudflare 官方 IP 网段的流量生效。若不校验来源盲目信任该请求头,将导致恶意用户能够通过伪造 IP 绕过速率限制和封禁。
# Cloudflare IPv4 地址段,参见 https://www.cloudflare.com/ips/
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
# Cloudflare IPv6 地址段
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;接下来找到您的 location / 或 @reverse_proxy 指令。得益于上述配置,现在 Nginx 只有在请求实际通过 Cloudflare 时,才会安全地将 $remote_addr 解析为真实的客户端 IP。修改您的 IP 转发请求头如下:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}保存配置文件并重新加载宿主机的 Nginx 服务。此步骤无需重新构建 Discourse 容器。
配置验证与测试
要验证网络配置是否已成功向 ProxyTracer 传递真实访客 IP:
- 进入 Discourse 管理后台:Admin → Users。
-
查看近期活动用户的
Registration IP或Last IP列。-
配置异常: 如果您查看到的是 Cloudflare IP(参见此处获取完整列表)或本地局域网 IP(如
127.0.0.1、172.x.x.x),说明 IP 透传未生效。在此状态下 ProxyTracer 将无法有效保护您的站点。 - 配置正确: 如果您查看到的是标准、唯一的真实住宅 IP 地址,则说明网络架构配置正确,ProxyTracer 正在积极监控您的流量。
-
配置异常: 如果您查看到的是 Cloudflare IP(参见此处获取完整列表)或本地局域网 IP(如
紧急访问恢复
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exit开源协议
本项目基于 GNU Affero General Public License v3.0 (AGPLv3) 开源协议发布。