我遇到了一个情况:检测到超过 13,000 个爬虫,数据库流量激增。显然有人在抓取我们的论坛,但由于流量经过 CloudFlare DNS,我不确定如何确定其 IP 并采取相应措施。
对此有什么建议吗?
我想设置一个自动速率限制方案,能够检测激进的网络行为,然后对其实施速率限制或在一段时间内禁用其访问。
我遇到了一个情况:检测到超过 13,000 个爬虫,数据库流量激增。显然有人在抓取我们的论坛,但由于流量经过 CloudFlare DNS,我不确定如何确定其 IP 并采取相应措施。
对此有什么建议吗?
我想设置一个自动速率限制方案,能够检测激进的网络行为,然后对其实施速率限制或在一段时间内禁用其访问。
你的 yml 配置文件中是否有 Cloudflare 模板?
是的,这位于 /var/discourse/containers/app.yml 中:
- "templates/cloudflare.template.yml"
需要说明的是,我目前遇到了一个严重问题:数据库访问(我在同一站点使用另一台数据库服务器)持续保持在13到20 Mbps,当爬虫数量激增时,访问速率更是飙升,此后近两周一直未能回落。服务器控制面板显示,在同一时间段内流量飙升至极不合理的水平,且持续维持在这一高负载状态,若情况继续恶化,服务器甚至可能面临带宽耗尽的风险。
您是否已包含限流模板?日志中是否显示了正确的 IP 地址(而非 Cloudflare 的 IP)?
我的 app.yml 中也有这个:
- "templates/web.ratelimited.template.yml"
我也能看到用户的正确 IP 地址——我不太明白你说的日志是什么意思。嗯。
如您所知,我曾考虑通过将所有连接改为使用内部私有 IP 地址来遏制当前的带宽消耗,因为这样至少能避免收到高额账单。
我还注意到另一个奇怪的现象。我将数据库连接从公共 IP 改为私有 IP,以减缓月度流量配额的使用速度。按理说,在数据库服务器上,我应该只看到来自 Discourse Docker 服务器的私有 IP 连接。现在虽然确实看到了来自本地私有 IP 的流量,但我仍然观察到大量来自公共 IP 的异常流量,导致月度配额仍在快速耗尽。
我在 Discourse Docker 服务器上反复查找了数据库服务器的公共 IP 地址和主机名,却怎么也找不到。即使我进入应用(./launcher enter app)并执行 env | grep DB,显示的也是当前局域网使用的正确私有 IP 地址。我遍历了整个文件系统,却找不到任何我预期的相关记录。
关于 Discourse 或其 Docker 镜像为何仍在访问错误的 IP,您有什么建议吗?我实在无法弄清楚 Discourse 服务器上这些公共 IP 流量究竟是从哪里产生的。