返回更新列表
新发布Sep 20, 2026

miasma v0.4.3

将AI网页爬虫困在无尽的毒坑中。

分享

🌀 Miasma

No AI crates.io downloads Docker Pulls GitHub commits since latest release

Web crawlers getting stuck in a cloud of poison miasma.

AI 公司持续以巨大规模抓取互联网,吞噬其全部内容,用作其下一代模型的训练数据。如果你拥有一个公开网站,他们已经在窃取你的劳动成果。

Miasma 就是来帮你反击的!启动服务器,将任何恶意流量引向它。Miasma 会从毒泉发送被投毒的训练数据,并附带多个自引用链接。对垃圾机器来说,这是一场无尽的垃圾盛宴。

Miasma 速度极快,内存占用极低——你不应该为了抵御互联网上的吸血鬼而浪费计算资源。

[!CAUTION] 部署此软件存在固有风险。使用前请完整阅读配置免责声明

用法

你可以在本地运行 Miasma,也可以使用官方 docker 镜像

如果你想将 Miasma 集成到现有的 Rust 服务器中,也可以Miasma 作为库使用

本地运行

使用 cargo 安装(推荐):

cargo install miasma

或者,从 releases 下载预构建的二进制文件。

社区维护的软件包也可用于各种包管理器:

Packaging status

使用默认配置启动 Miasma

miasma

查看所有可用的配置选项

miasma --help

使用 Docker 运行

使用官方 docker 镜像运行 Miasma

docker run --rm -p 9999:9999 austinweeks/miasma:latest

传入与本地运行时相同的配置标志

docker run --rm -p 9999:9999 austinweeks/miasma:latest \
    --link-prefix '/naughty-bots' \
    --max-in-flight 30

或者,在 docker compose 集群中运行:

services:
  miasma:
    image: austinweeks/miasma:latest
    command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
    ports:
      - 9999:9999

如何诱捕爬虫

让我们通过一个示例,演示如何设置服务器以使用 Miasma 诱捕爬虫。我们将选择 /naughty-bots 作为服务器上引导爬虫流量的路径。我们将使用 Nginx 作为服务器的反向代理,但许多不同的设置也能实现相同的结果。

完成后,爬虫将像这样被诱捕:

Flow chart depicting cycle of trapped scrapers.

嵌入隐藏链接

在我们的网站中,我们将包含几个指向 /naughty-bots 的隐藏链接。

<a
  href="https://github.com/austin-weeks/miasma/blob/main/naughty-bots"
  style="display: none;"
  aria-hidden="true"
  tabindex="-1"
>
  Amazing high quality data here!
</a>

style="display: none;"aria-hidden="true"tabindex="-1" 属性确保链接对人类访客完全不可见,并且会被屏幕阅读器和键盘导航忽略。它们将对爬虫可见。

配置我们的 Nginx 代理

由于我们的隐藏链接指向 /naughty-bots/,我们将配置此路径以将请求代理到 Miasma。假设我们在端口 9855 上运行 Miasma

我们还将基于爬虫的 user agent 设置激进的速率限制,以帮助确保我们不会意外地对自己发起 DDoS。

http {
  # Reserve 8MB memory for tracking user agents
  limit_req_zone $http_user_agent zone=miasma:8m rate=1r/s;

  server {
    location = /naughty-bots {
      port_in_redirect off;
      return 301 /naughty-bots/;
    }
    location /naughty-bots/ {
      # Rate limit via the 'miasma' zone with no queueing
      limit_req_status 429;
      limit_req zone=miasma burst=5 nodelay;

      # Proxy requests to Miasma
      proxy_pass http://localhost:9855/;
    }
  }
}

此配置将捕获 /naughty-bots 路径的所有变体 -> /naughty-bots/naughty-bots//naughty-bots/12345 等。

运行 Miasma

最后,我们将启动 Miasma 并指定 /naughty-bots 作为链接前缀。这会指示 Miasma/naughty-bots/ 开头生成链接,从而确保爬虫通过我们的 Nginx 代理正确路由回 Miasma

让我们将最大在途连接数限制为 50。在 50 个连接时,我们可以预期峰值内存使用量为 50-60 MB。请注意,任何超过此限制的请求将立即收到 429 响应,而不是被添加到队列中。

我们还将强制 Miasma 对所有响应进行 gzip 压缩,无论爬虫的 Accept-Encoding 头是什么。由于 gzip 压缩后的响应明显更小,这将帮助我们降低出口成本。

虽然我们可以让爬虫永远被困住,但我们将使用链接数量和最大深度选项,让爬虫在消耗约 10 万个被投毒页面后离开。在此设置下,Miasma 将为每个爬虫发送约 250MB 的总数据。

miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8

尽情享受!

让我们部署并观看行为不端的机器人贪婪地从我们无尽的垃圾机器中进食!

robots.txt

请务必通过你的 robots.txt 保护行为良好的机器人和搜索引擎免受 Miasma 影响!

User-agent: *
Disallow: /naughty-bots

指标

Miasma 能够按唯一 User-Agent 跟踪爬虫请求计数。这对于识别哪些机器人最频繁地访问你的网站非常有用。指标会写入本地 SQLite 数据库文件,并可在你选择的端点上查看。

配置

Miasma 可以通过 CLI 标志或配置文件进行配置。

选项默认值描述
config-file从指定文件路径加载配置选项。支持 YAML、TOML 和 JSON 格式。示例见 docs
port9999服务器应绑定的端口。
hostlocalhost服务器应绑定的主机地址。
unix-socket绑定到 Unix 域套接字而不是 TCP 地址。仅在类 Unix 系统上可用。
max-in-flight500允许的最大在途请求数。超过在途限制时收到的请求将收到 429 响应。Miasma 的内存使用量直接随在途请求数扩展——如果内存使用是一个问题,请将其设置为较低的值。
link-prefix/自引导链接的前缀。这应该是你托管 Miasma 的路径,例如 /naughty-bots
link-count5每个响应页面中包含的自引导链接数量。
max-depthnone一旦爬虫达到指定深度,就停止生成链接。这允许你在提供所需数量的毒药后切断爬虫。将此与 link-count 配合使用,以将活跃爬虫数量保持在可管理的水平。
force-gzipfalse始终对响应进行 gzip 压缩,无论客户端的 Accept-Encoding 头是什么。强制压缩有助于降低出口成本。
unsafe-allow-htmlfalse不转义毒药源响应中的 HTML 字符。默认启用转义以防止意外的客户端 JavaScript 执行。请谨慎使用此选项。
poison-sourcehttps://rnsaffn.com/poison2/?mask=0被投毒训练数据的代理源。
no-poison-cachefalse禁用毒药源响应缓存。
metrics-db-path用于存储指标数据的 SQLite 数据库文件路径。如果该位置尚不存在数据库,Miasma 将在该位置创建一个。
metrics-username访问 Miasma 指标页面所需的基本认证用户名。
metrics-password访问 Miasma 指标页面所需的基本认证密码。
metrics-endpoint/metrics提供 Miasma 指标的端点。

免责声明

Miasma毒泉无关。我们无法控制其响应,也无法保证其内容的安全性。你应永远不要将用户引导至你的 Miasma 位置。

Miasma 对受影响的爬虫运营者的任何报复行为概不负责。你有责任遵守适用的法律和托管提供商政策。完整保修和有限责任详情见 LICENSE(GPL-v3)。


封面艺术由 @cerberussaturn07 创作

分类