← 返回信息流
AI 资讯Hacker News·2 小时前

Fortress:打造隐形Chromium让AI代理规避封禁

原标题:Show HN: Fortress – a stealth Chromium so your agents stop getting blocked

速览

Fortress是一款专为AI代理设计的隐身Chromium浏览器,通过模拟正常用户行为来避免被网站检测和封锁。该项目解决了许多AI爬虫和自动化工具频繁被封的痛点,提升了代理的稳定性和成功率。它可能对依赖网页抓取的AI应用(如训练数据采集、自动化测试)产生实际帮助。

AI 深度解读

背景

在浏览器自动化领域,爬虫、AI Agent 以及各类自动化脚本长期面临一个核心难题:被网站的反机器人系统(如 Cloudflare Turnstile、Akamai Bot Manager、DataDome 等)识别并拦截。这些系统通过读取浏览器指纹(Browser Fingerprint)来区分人类用户与自动化工具——Canvas、WebGL、Audio、Fonts、Navigator 等数十个 API 的返回值组合起来,构成一个独特的“数字指纹”。一旦自动化工具暴露了非原生的指纹特征(例如 navigator.webdrivertruetoString() 返回补丁代码等),就会被挡在门外。

传统的解决方案是通过 JavaScript 层注入 stealth 补丁(如 puppeteer-stealthundetected-chromedriver 等),在页面加载前修改这些 API 的返回值,模拟真实浏览器。但这种做法存在明显缺陷:补丁代码本身可以被页面检测到——toString() 会暴露补丁函数的源码,不同 realm(主页面、Worker、iframe)之间可能不一致,而且补丁层一旦被感知,自动化工具反而更容易被标记。此外,许多反爬系统已经进化到能识别这些 JS 补丁的共性与模式。

核心内容

Fortress 是一个开源的“隐身 Chromium 引擎”(Stealth Chromium Engine),它在 Chromium 的 C++ 层面直接修正浏览器指纹,而不是在 JavaScript 层打补丁。这意味着自动化工具启动的浏览器实例,在底层就呈现为普通 Chrome 安装的指纹,无需任何额外的 JS 修补。用户只需修改一行代码(将现有 Playwright 或 Puppeteer 连接指向 Fortress 的 CDP 端点),其他代码完全不变,就能让爬虫和 Agent 绕过检测。

工作原理:Fortress 是 Chromium 的一个分支(fork),它修改了 Blink、V8、BoringSSL 等核心模块的源码。在 Chromium 的 C++ 代码中,它纠正了 30 多个会被反爬系统读取的表面(包括 Canvas、WebGL、Audio、Fonts、Navigator 等),使得这些 API 返回的指纹与普通 Chrome 完全一致。由于修正发生在引擎内部,页面在检查这些 API 时看到的 toString() 返回 [native code],且在不同 realm(主页面、Worker、iframe)中读取的结果一致,不存在 JS 补丁层可以暴露的额外痕迹。同时,Fortress 也实现了与 JA3/JA4 一致的 TLS 指纹,进一步降低被检测风险。

测试验证:作者提供了多个未经编辑的屏幕截图和录制视频,展示了 Fortress 在真实浏览器窗口中运行的效果:可以顺利通过 Cloudflare 的实时挑战,在 bot.sannysoft.com 上所有检测项全绿,BrowserScan 显示“Normal”。同样的测试,使用 Puppeteer 默认的 headless 浏览器则会被拦截。

Persona 一致性:Fortress 内置了“按启动时创建的一致 personas”(per-launch coherent personas)。每次启动时,它会自动生成一个完整的、真实设备般的指纹集合,包括:对应地区的键盘布局(QWERTY / QWERTZ / AZERTY)、媒体设备、平台、GPU、时区、语言、语音、键盘类型等——所有这些维度作为一个整体协调一致,不会出现矛盾(例如 Windows 系统却报告 macOS 的 GPU)。这些配置是从单一二进制文件内部编译的,而非通过 JS 动态拼凑。

部署方式:Fortress 以普通浏览器二进制文件的形式发布,暴露一个 CDP 端点(默认 http://localhost:9222)。用户可以通过以下方式安装使用:

  • Python:pip install tilion-fortress,然后通过 from tilion_fortress import Fortress; f=Fortress(); f.start() 启动。
  • Node.js:npm install tilion-fortress,然后 import { Fortress } from "tilion-fortress"; const f = await Fortress.launch()
  • Docker:docker run --rm -p 9222:9222 tilion/fortress:latest(约 302 MB 拉取,851 MB 磁盘,单层镜像)。
  • 可移植包:Linux 直接解压 .tar.gz 运行,Debian/Ubuntu 可通过 .deb 安装。

两种版本通道:Fortress 提供两种 Chromium 基础版本:

  • stable(默认):基于 Chromium 149,更稳定,注重融入。
  • latest:基于 Chromium 151,包含最新特性但可能变化更快。

用户可以通过 Fortress(channel="latest") 或 Docker 标签 :151 选择版本。

集成方式:现有 Playwright、Puppeteer 或其他 CDP 客户端只需将连接地址指向 http://localhost:9222 即可,无需修改任何自动化逻辑。例如:

  • Playwright (Python):browser = p.chromium.connect_over_cdp("http://localhost:9222")
  • Playwright (JS):const browser = await chromium.connectOverCDP("http://localhost:9222")
  • Puppeteer (JS):const browser = await puppeteer.connect({ browserURL: "http://localhost:9222" })

实际效果:作者展示了在同一住宅 IP 下,使用 stock headless 浏览器访问 aa.com(Akamai Bot Manager)时被拒绝(Access Denied),而使用 Fortress 则成功加载页面,并正常获取 Akamai 的 _abck sensor cookie——Bot Manager 将其识别为真实浏览器。同样,在多个受 Akamai 保护的大型零售网站(如 Lowes、Macy's、Kohls)上,实验重复验证了这一点。作者强调,IP 不是变量,指纹才是关键:当指纹正确时,即使使用同一个住宅 IP,也能通过反爬屏障。

SDK 与源码透明度:Fortress SDK 附带编译后的二进制文件以及 patches/ 目录,用户可以直接从源码重建引擎,并验证每一个表面修正是否与源代码一致。下载的二进制文件会自动通过 SHA-256 校验。

Agent 友好的 MCP 支持:Fortress 还提供了 MCP(Model Context Protocol)服务器,让 Claude、Cursor 等 AI Agent 可以调用工具直接启动隐身浏览器,无需手动配置。

关键要点

  • 引擎级修正,无 JS 补丁层:Fortress 在 Chromium 的 C++ 代码中修正 30+ 个指纹 API,页面无法通过 toString() 或跨 realm 差异检测到任何补丁痕迹。
  • 即插即用,一行代码改动:只需将现有 Playwright/Puppeteer 的 CDP 连接地址改为 Fortress 的端点,其余代码无需修改,自动化流程保持不变。
  • 通过主流反爬系统验证:实测可过 CreepJS、Sannysoft、BrowserScan、Cloudflare Turnstile、Akamai Bot Manager
查看原文 →github.com