# 如何通过 CloudFlare 在 Discourse 上确定（并阻止）抓取器/机器人的 IP 地址？

**URL:** <https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986>\
**Category:** Self-hosting\
**Created:** [2021年五月11日 01:56 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986 "2021-05-11T01:56:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![mreach](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@mreach](https://meta.discourse.org/u/mreach)\
**Post date:** [2021年五月11日 01:56 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/1 "2021-05-11T01:56:31Z")

</div>

我遇到了一个情况：检测到超过 13,000 个爬虫，数据库流量激增。显然有人在抓取我们的论坛，但由于流量经过 CloudFlare DNS，我不确定如何确定其 IP 并采取相应措施。

对此有什么建议吗？

我想设置一个自动速率限制方案，能够检测激进的网络行为，然后对其实施速率限制或在一段时间内禁用其访问。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2021年五月11日 02:37 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/2 "2021-05-11T02:37:12Z")

</div>

你的 yml 配置文件中是否有 Cloudflare 模板？

---

<div class="post-metadata">

**Author:** ![mreach](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@mreach](https://meta.discourse.org/u/mreach)\
**Post date:** [2021年五月11日 05:07 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/3 "2021-05-11T05:07:41Z")

</div>

是的，这位于 `/var/discourse/containers/app.yml` 中：

```plaintext
  - "templates/cloudflare.template.yml"

```

---

<div class="post-metadata">

**Author:** ![mreach](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@mreach](https://meta.discourse.org/u/mreach)\
**Post date:** [2021年五月11日 05:19 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/4 "2021-05-11T05:19:37Z")

</div>

需要说明的是，我目前遇到了一个严重问题：数据库访问（我在同一站点使用另一台数据库服务器）持续保持在13到20 Mbps，当爬虫数量激增时，访问速率更是飙升，此后近两周一直未能回落。服务器控制面板显示，在同一时间段内流量飙升至极不合理的水平，且持续维持在这一高负载状态，若情况继续恶化，服务器甚至可能面临带宽耗尽的风险。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2021年五月12日 01:53 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/5 "2021-05-12T01:53:10Z")

</div>

您是否已包含限流模板？日志中是否显示了正确的 IP 地址（而非 Cloudflare 的 IP）？

---

<div class="post-metadata">

**Author:** ![mreach](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@mreach](https://meta.discourse.org/u/mreach)\
**Post date:** [2021年五月12日 06:00 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/6 "2021-05-12T06:00:36Z")

</div>

我的 `app.yml` 中也有这个：

```plaintext
  - "templates/web.ratelimited.template.yml"

```

我也能看到用户的正确 IP 地址——我不太明白你说的日志是什么意思。嗯。

---

<div class="post-metadata">

**Author:** ![mreach](https://avatars.discourse-cdn.com/v4/letter/m/9d8465/32.png) [@mreach](https://meta.discourse.org/u/mreach)\
**Post date:** [2021年五月13日 06:04 UTC](https://meta.discourse.org/t/how-to-determine-and-block-ip-addresses-of-scrapers-bots-through-cloudflare-on-discourse/189986/7 "2021-05-13T06:04:04Z")

</div>

如您所知，我曾考虑通过将所有连接改为使用内部私有 IP 地址来遏制当前的带宽消耗，因为这样至少能避免收到高额账单。

我还注意到另一个奇怪的现象。我将数据库连接从公共 IP 改为私有 IP，以减缓月度流量配额的使用速度。按理说，在数据库服务器上，我应该只看到来自 Discourse Docker 服务器的私有 IP 连接。现在虽然确实看到了来自本地私有 IP 的流量，但我仍然观察到大量来自公共 IP 的异常流量，导致月度配额仍在快速耗尽。

我在 Discourse Docker 服务器上反复查找了数据库服务器的公共 IP 地址和主机名，却怎么也找不到。即使我进入应用（`./launcher enter app`）并执行 `env | grep DB`，显示的也是当前局域网使用的正确私有 IP 地址。我遍历了整个文件系统，却找不到任何我预期的相关记录。

关于 Discourse 或其 Docker 镜像为何仍在访问错误的 IP，您有什么建议吗？我实在无法弄清楚 Discourse 服务器上这些公共 IP 流量究竟是从哪里产生的。
