端口扫描保护:阻止网络探测
网站如何使用 JavaScript 探测本地网络端口并检测服务,以及如何在浏览器级别阻止端口扫描。
简介
你的计算机在各种网络端口上运行服务:开发服务器、数据库引擎、远程桌面协议、VNC、Docker 等。每次访问网站时,该页面上的脚本都可以尝试探测你的本地网络端口,以发现哪些服务正在运行。开放和关闭端口的模式创建了你本地环境的独特指纹,这个指纹足够独特,可以跨会话甚至跨不同浏览器识别你。
这是一个严重的隐私问题。即使你更改 IP 地址、清除 Cookie 或切换到不同的浏览器配置文件,端口指纹识别仍然可以持续存在。你机器上运行的服务往往随时间保持一致,使其成为任何选择收集它的网站的高度可靠追踪信号。
BotBrowser 提供内置端口保护,在引擎级别控制浏览器对本地端口探测的响应方式。BotBrowser 不是简单地阻止连接(这本身是可检测的),而是确保所有本地端口探测返回统一的结果。这使网站无法区分开放端口和关闭端口,有效地消除了整个类别的指纹追踪。
为什么端口隐私很重要
浏览器端口扫描是一个真实且有据可查的隐私问题。网站已被观察到探测数十个本地端口,以构建访问者机器上运行软件的画面。可以收集的信息类型包括关于整个计算环境的详细信息。
开发工具是常见目标。当 Web 开发人员在与框架和构建工具常见关联的端口上运行服务时,任何网站都可以了解到访问者可能是软件开发人员。仅这些信息就显著缩小了潜在身份池。
远程访问软件是另一个信号。与远程桌面、终端访问和屏幕共享工具关联的服务揭示了关于你如何使用机器以及你管理什么类型基础设施的重要细节。
在标准端口上运行的数据库服务告诉网站你使用什么技术栈。无论你使用关系数据库、文档存储还是内存缓存,每个运行的服务都为端口指纹添加了另一个数据点。
容器和虚拟化服务尤其明显。它们的存在表明了某种类型的技术用户,可以揭示你的开发和部署工作流程的详细信息。
安全和网络工具完善了整体画面。VPN 客户端、防火墙管理界面和安全监控服务各自为你的计算设置的综合档案做出贡献。
所有这些信号的组合创建了一个稳定的指纹。你的运行服务集合往往在浏览会话间保持一致,使其成为最可靠的追踪信号之一。即使你轮换 IP、清除所有浏览器存储并使用全新的浏览器配置文件,你运行服务的模式基本保持不变。
当端口扫描结果与 Canvas 分析、WebGL 渲染和字体枚举等传统浏览器指纹识别技术结合时,整体指纹变得更加独特和持久。这种多层追踪方法是端口保护成为全面隐私保护必要组成部分的原因。
端口保护的挑战
保护端口指纹识别比最初看起来更微妙。几种常见方法存在显著的局限性,实际上降低了其有效性。
为什么简单阻止不够
端口保护的一个直接方法是阻止所有到本地地址的连接。然而,这会产生一系列问题,实际上可能使你的浏览器更容易被识别,而不是更少。
当到 localhost 的连接被完全阻止时,错误模式与标准浏览器产生的不同。网站可以检测到阻止行为本身,将你的保护措施变成另一个区分信号。此外,统一阻止以自己的方式引人注目。如果每个端口立即返回相同的阻止响应,这种统一性在正常浏览器显示的自然变化中显得突出。
阻止还会破坏合法功能。许多 Web 应用需要与本地服务通信。连接桌面应用的音乐流媒体服务、使用 localhost 进行热重载的开发工具以及依赖本地重定向服务器的身份验证流程都依赖于 localhost 连接。全面阻止会破坏这些工作流程。
浏览器扩展
通过过滤规则过滤网络请求的扩展可以阻止到本地地址的连接。然而,扩展在 JavaScript 层操作,这意味着它们在浏览器引擎已经开始处理请求后才拦截。阻止本身的计时特征可能提供可分析的信息。扩展还可以通过其对浏览器 API 的副作用被检测到,且并非所有连接类型都可能在 WebSocket、图片加载和 fetch 调用等不同请求机制中被一致拦截。
防火墙规则
操作系统防火墙可以限制哪些进程可以绑定到端口。然而,这不能解决端口指纹识别问题,因为浏览器是在向 localhost 建立出站连接,而不是接收来自互联网的入站连接。阻止浏览器连接到 localhost 的防火墙规则会破坏合法的本地服务通信,并产生与简单阻止相同的可检测性问题。
网络命名空间和容器
在具有独立网络命名空间的容器中运行浏览器可以防止它到达主机服务。这种方法在隔离中有效,但增加了显著的基础设施复杂性。对于所有部署场景可能不实用,特别是当浏览器需要作为合法工作流程的一部分与主机上的服务交互时。
基于 VPN 的方法
一些 VPN 配置可以不同地路由本地流量。这增加了网络开销并引入了额外的复杂性,但没有完全解决底层指纹识别问题。根本问题是浏览器如何响应端口探测,而路由更改本身并不能规范化这些响应。
BotBrowser 的端口保护方法
引擎级保护
BotBrowser 在正确的层级解决了端口指纹识别问题:在浏览器引擎内部。--bot-port-protection 标志(PRO)激活在最深层控制端口访问行为的保护。启用后,所有到本地地址的连接产生统一的计时特征,无论该端口上是否实际运行服务。
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection
这种方法与上述的阻止和过滤方法有根本不同,提供了那些方法无法匹配的保护。
连接正常进行。 BotBrowser 不阻止到 localhost 的连接。相反,它控制可观察的计时行为,使开放端口和关闭端口对页面上运行的任何脚本来说都无法区分。你的本地服务继续按预期运行。
无可检测痕迹。 所有浏览器 API 正常行为。没有缺失的属性、修改的原型或表明保护活跃的异常错误模式。浏览器的外观和行为与标准安装完全一致。
合法本地服务仍然工作。 需要 localhost 通信的应用正常运行。无论你使用音乐流媒体服务、本地开发服务器还是依赖 localhost 连接的任何其他应用,一切按预期工作。保护专门针对允许网站区分端口状态的计时信号。
全面覆盖
BotBrowser 的端口保护覆盖所有常见探测的地址范围,确保完整的隐私:
- 127.0.0.0/8:完整的 IPv4 环回范围,包括所有 127.x.x.x 地址
- ::1:IPv6 环回地址
- localhost:基于主机名的本地服务访问
保护覆盖这些地址范围内的 30 个常用端口。这些是基于浏览器端口指纹识别最常目标的端口,涵盖开发工具、数据库、远程访问服务、容器平台和其他常用软件。
基于配置文件的配置
除了 CLI 标志外,端口保护可以直接在配置文件配置中启用。这适合于应始终激活端口保护的配置文件,确保保护永远不会被意外遗漏。
{
"configs": {
"portProtection": true
}
}
在配置文件中设置时,端口保护在配置文件加载时自动激活。不需要额外的 CLI 标志。这使得在整个浏览器配置文件组中标准化端口保护变得容易。
配置和使用
基本 CLI 设置
开始使用端口保护只需在 BotBrowser 启动命令中添加一个额外的标志:
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--user-data-dir="$(mktemp -d)"
这一个添加就保护了整个浏览会话的本地服务指纹。
完整隐私配置
为获得全面的网络隐私,将端口保护与代理、DNS 和 WebRTC 保护结合。这种组合解决了所有主要的网络层指纹识别和追踪向量:
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--proxy-server=socks5://user:pass@proxy:1080 \
--bot-local-dns \
--bot-webrtc-ice=google
此配置确保你的本地服务、DNS 查询、IP 地址和 WebRTC 连接同时受到保护。每层保护针对不同的追踪向量,它们一起提供全面的网络隐私解决方案。
Playwright 集成
BotBrowser 与 Playwright 自然集成。只需在启动参数中添加端口保护标志,保护就会在整个浏览会话的所有页面导航中生效:
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-port-protection',
],
headless: true,
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
// 端口保护在所有页面导航中活跃
await browser.close();
})();
Puppeteer 集成
同样简单的集成也适用于 Puppeteer。添加标志后,浏览器访问的每个页面的本地服务都会受到保护:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-port-protection',
],
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
})();
Headless 服务器部署
在 headless 服务器上,端口保护尤为重要。服务器通常运行许多服务,包括数据库、监控代理、容器平台和应用服务器。没有端口保护,浏览器访问的任何网站都可能编目所有这些服务,创建与该特定服务器绑定的高度独特指纹。
chrome --bot-profile="/path/to/profile.enc" \
--bot-port-protection \
--headless=new \
--proxy-server=socks5://user:pass@proxy:1080
对于生产部署,考虑在配置文件配置中设置端口保护,而不是作为 CLI 标志传递。这确保无论浏览器如何启动,保护始终活跃。
验证
确认端口保护在你的环境中正确工作:
- 在特定端口上启动一个已知服务(例如,在端口 8080 上启动简单的 HTTP 服务器)
- 使用
--bot-port-protection启动 BotBrowser - 导航到检查端口可访问性的指纹测试页面
- 确认测试页面无法区分开放端口和关闭端口
- 验证你的本地服务通过浏览器仍然正常运行
此验证过程确保保护活跃且你的合法工作流程不受影响。
最佳实践
-
在开发机器上启用端口保护。 开发人员通常运行许多创建高度独特端口指纹的服务。端口保护在此场景中尤其有价值,因为开发服务器、数据库和工具的组合通常对单个人来说是独一无二的。
-
在服务器上启用端口保护。 运行数据库、监控代理、Docker 和应用服务器等多个服务的 headless 服务器特别容易受到端口指纹识别的影响。
-
与其他网络保护结合。 端口保护解决本地服务指纹识别,这是网络隐私画面的一部分。将其与代理配置(IP 隐私)、DNS 泄漏防护(查询隐私)和 WebRTC 保护(连接隐私)结合。
-
使用基于配置文件的配置以获得一致保护。 如果端口保护应对特定配置文件活跃,在配置文件的
configs.portProtection字段中设置它,使其每次自动激活。 -
配置更改后测试。 每当修改网络设置、代理配置或服务器环境时,验证端口保护仍然按预期运行。
-
考虑你的完整指纹面。 端口保护在作为完整指纹保护策略一部分时最有效。查看你的 Canvas、WebGL、字体和其他指纹设置以及端口保护,确保全面覆盖。
常见问题
端口保护会破坏本地开发工作流程吗? 不会。端口保护控制本地连接的计时特征,而不是它们是否成功或失败。到本地服务的合法连接正常工作。你的开发服务器、数据库连接和本地工具都按预期继续运行。保护专门防止网站使用计时差异来映射你的本地服务景观。
端口保护覆盖所有端口吗? BotBrowser 覆盖 IPv4 环回(127.0.0.0/8)、IPv6 环回(::1)和 localhost 上的 30 个常用端口。这些端口是基于真实世界分析中浏览器端口指纹识别最常目标的端口选择的。它们覆盖了指纹脚本试图检测的绝大多数服务。
我可以不使用代理就使用端口保护吗? 可以。端口保护独立于代理配置。无论你的网络路由设置如何,它都保护你的本地服务指纹。但是,为了全面的隐私,我们建议将端口保护与代理结合以同时保护你的 IP 地址。
端口保护影响到 localhost 的 WebSocket 连接吗? 到 localhost 的 WebSocket 连接仍然正常运行。保护确保连接行为在端口间是统一的,防止网站使用 WebSocket 探测来映射你的本地服务。
端口保护默认启用吗?
不是。端口保护需要 --bot-port-protection CLI 标志或 configs.portProtection 配置文件设置。默认不活跃,给你完全控制何时何地应用保护。
端口保护在 headless 模式下工作吗? 是的。端口保护在 headful 和 headless 模式下工作完全相同。
网站能检测到端口保护活跃吗? BotBrowser 的端口保护在引擎级别操作,在 JavaScript 层之下。计时规范化确保开放端口和关闭端口彼此无法区分。没有 JavaScript 可见的痕迹、修改的 API 行为或表明保护活跃的异常响应模式。
本地网络(192.168.x.x)上的端口呢? BotBrowser 的端口保护覆盖环回地址范围(127.0.0.0/8、::1、localhost)。关于本地网络地址(192.168.x.x、10.x.x.x、172.16.x.x),请参阅最新文档获取当前覆盖详情。
端口保护如何与其他 BotBrowser 功能互补? 端口保护是 BotBrowser 全面指纹保护系统中的一层。它与 Canvas 保护、WebGL 保护、字体保护、WebRTC 泄漏防护、DNS 泄漏防护等许多其他功能协同工作,创建一致且真实的浏览器指纹。
总结
基于浏览器的端口指纹识别通过分析你的机器上运行哪些服务来创建持久的追踪信号。此指纹在 IP 更改、Cookie 清除和浏览器重置中持续存在,使其成为当今网站可用的最持久追踪方法之一。
BotBrowser 的引擎级端口保护确保所有端口探测返回统一结果,使网站无法映射你的本地服务景观。保护在最深层工作,不产生可检测痕迹,且保持与合法本地服务的完全兼容性。
与代理配置、DNS 泄漏防护和 WebRTC 保护结合,端口保护完善了网络隐私画面。这些功能一起确保你的网络环境不会泄露任何可用于指纹追踪的信息。
相关网络保护请参阅 DNS 泄漏防护和 WebRTC 泄漏防护。完整身份管理请参阅多账户浏览器隔离。