GFW 主动探测及封锁机制
简介
本文介绍 GFW(Great Firewall,防火长城)的主要网络审查技术,包括被动检测和主动探测两类机制,以及这些机制对反审查工具的影响。理解这些审查手段是理解 REALITY 和 Xray-core 设计动机的前提。
本文回答
- GFW 使用哪些技术手段进行网络审查
- 主动探测和被动检测的区别
- 为什么 TLS 代理流量容易被识别
- 反审查工具的设计目标是什么
本文在项目中的位置
本文属于背景知识层,帮助理解"为什么要用 REALITY"。建议在阅读协议分析文档之前先读本文。
适合读者
所有想理解反审查技术背景的读者。
前置知识
TCP/IP 基础,DNS 基础,HTTPS 基础。
文章理解难度
入门。
重点
- GFW 的被动检测手段(DPI、SNI 过滤、TLS 指纹)
- GFW 的主动探测手段
- 2021 年 GFW 对全加密流量的被动检测突破
- REALITY 如何应对各项审查手段
难点
- 理解 GFW 如何在不破解加密的情况下检测加密代理流量
- 理解被动检测和主动探测的配合使用方式
上级文档和相关文档
主要证据
USENIX Security '23 论文《How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic》,GFW Report 公开测量数据,维基百科 Great Firewall 条目。
GFW 概述
GFW 是中国实施的互联网审查系统的总称,其技术手段经历了从简单到复杂、从粗粒度到精细化的演进过程:
| 时期 | 主要手段 |
|---|---|
| 2011 年前 | IP 黑名单、关键词过滤、DNS 劫持 |
| 2011-2015 | 深度包检测(DPI)、SNI 过滤、TCP RST 注入 |
| 2015-2021 | TLS 指纹识别、主动探测、Tor 桥接阻断 |
| 2021 至今 | 全加密流量被动检测、QUIC 阻断、实时流量分析 |
被动检测机制
被动检测指审查方不主动发送探测包,而是分析流经其网络设备的流量特征来进行识别和阻断。
1. IP 地址阻断
最基础的封锁手段。维护一个被封禁 IP 地址的列表,对发往这些 IP 的数据包直接丢弃或发送 TCP RST。
- IP 阻断粒度粗,容易误伤共享 IP 的其他合法服务
- 单独使用效果有限,CDN 和域名前置(Domain Fronting)等技术可绕过
2. DNS 劫持和污染
审查方在 DNS 层面进行干扰:
- DNS 劫持:ISP 的 DNS 服务器对特定域名的查询返回错误 IP 或直接不返回
- DNS 污染:在网络路径上注入伪造的 DNS 响应包,使客户端收到虚假的解析结果
3. SNI 过滤
SNI(Server Name Indication)是 TLS 握手中 ClientHello 消息的一个扩展字段,以明文形式发送,用于告知服务器客户端想要访问哪个域名。
审查方监控传输中的 TLS ClientHello 包,检查 SNI 字段。当 SNI 匹配黑名单域名时,阻断连接。
SNI 过滤是当前 GFW 最核心的审查手段之一,从 2024 年 4 月起,QUIC 协议的 SNI 过滤也已部署。
4. 深度包检测(DPI)
DPI 不仅检查包头部,还检查数据载荷内容。审查方通过 DPI 可以:
- 识别特定协议的特征(如 Shadowsocks 的加密格式、VMess 的认证头)
- 在 HTTP 请求中发现敏感关键词
- 检测 TLS 证书中的特定字段
5. TLS 指纹识别
不同 TLS 实现(浏览器、Go 标准库、Python requests 等)在 ClientHello 中使用的密码套件、扩展字段等组合是不同的。通过指纹识别,审查方可以:
- 识别某个连接来自 Go 标准库(Go
crypto/tls的指纹是公开且独特的) - 识别某个连接来自特定的代理工具
- 结合其他特征进行精准阻断
6. 全加密流量被动检测
2021 年 11 月,GFW 部署了一种新的被动检测技术,能够在不破解加密、不发送主动探测包的情况下实时检测全加密协议流量(Shadowsocks、VMess 等)。
这是反审查领域的一个转折点——在此之前,社区普遍认为全加密随机流量(random-looking traffic)无法被被动检测。
USENIX Security '23 的论文分析了这一机制。审查方通过检查加密流量的首个数据包的载荷长度来区分协议:
- 真实随机协议的客户端首个数据包没有可预测的长度模式
- TLS 客户端首个数据包的长度是固定的结构:ClientHello 记录头(5 字节)+ 握手类型(1 字节)+ 长度字段 + 客户端版本 + 随机数 + Session ID + 密码套件 + 扩展
- 通过观察首个数据包的载荷长度分布,审查方可以将符合随机流量特征但不符合 TLS 特征的连接识别出来
GFW 还对符合豁免规则(如白名单 IP、特定端口等)的连接不做阻断,以减少误伤。
主动探测机制
主动探测指审查方主动向可疑服务器发送探测包,根据响应判断其是否为代理/VPN 服务。
工作原理
- 被动发现:审查方通过被动检测识别出可疑的目标 IP 和端口
- 主动验证:审查方模拟客户端向该 IP 发送特定协议的握手请求
- 响应分析:
- 如果服务端返回了有效的协议响应 → 确认为代理服务,加入黑名单
- 如果服务端返回错误或超时 → 可能是普通服务,暂不封禁
针对常见协议的主动探测
- Shadowsocks:审查方发送随机数据到可疑端口,如果服务端返回了符合 Shadowsocks 格式的加密数据,则识别为 Shadowsocks 服务端
- VMess:审查方发送模拟 VMess 认证头的包,分析响应
- Tor:审查方发送 Tor 握手包到可疑 IP,对 Tor 桥接节点进行探测和阻断
- TLS 代理:审查方发起正常的 TLS 握手到可疑端口,分析返回的证书是否为自签名证书(许多代理工具使用自签名证书)
探测后的处理
一旦主动探测确认了代理服务:
- IP 被加入黑名单 → 后续流量被直接阻断
- 可能伴随端口封锁 → 同 IP 的其他端口也可能被限制
- 封锁有残留效应——即使封锁解除后恢复连接,在探测到代理特征后会立即再次封锁
GFW 的残留阻断通常持续 1-3 分钟,期间从同一源 IP 到同一目标 IP+端口的所有 TCP/UDP 包都会被丢弃。
REALITY 如何应对各项审查
| 审查手段 | REALITY 的应对 |
|---|---|
| IP 阻断 | 使用境外服务器 + CDN 中转(非 REALITY 直接解决) |
| DNS 劫持 | 客户端使用 DoH/DoT(非 REALITY 直接解决) |
| SNI 过滤 | REALITY 使用的 SNI 是真实网站域名(如 microsoft.com),未被封锁 |
| DPI | REALITY 对外表现为标准 TLS 1.3 + HTTP/2,没有异常协议特征 |
| TLS 指纹 | 服务端使用目标网站的真实证书(无服务端指纹);客户端通过 uTLS 模拟浏览器指纹 |
| 全加密流量被动检测 | REALITY 流量在 TLS 层使用标准加密套件,首个包结构与正常 TLS 一致 |
| 主动探测 | 探测方的 TLS 握手被识别为非 REALITY 客户端 → 连接被转发到目标网站 → 探测方收到的是目标网站的真实响应 |
核心设计思想:REALITY 不在网络层面表现出任何不同于普通 HTTPS 的特征——它的 TLS 握手与访问 microsoft.com 的 TLS 握手完全一致。
审查机制的协同使用
GFW 的各种审查手段并非独立运行,而是形成多层过滤的协同体系:
REALITY 的设计目标是让流量在每一层的表现都与普通 HTTPS 流量无法区分,使审查方没有理由触发任何阻断。
外部参考资料
资料:How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic 类型:顶会论文(USENIX Security '23) 链接:https://www.usenix.org/conference/usenixsecurity23/presentation/wu-mingshi 可信度:A,经过同行评审的学术研究 建议参考:理解 GFW 如何被动检测全加密流量(Shadowsocks、VMess 等)
资料:Great Firewall - Wikipedia 类型:百科全书 链接:https://en.wikipedia.org/wiki/Great_Firewall 可信度:B,综合多种来源
资料:GFW Report 类型:测量研究 链接:https://gfw.report/ 可信度:A,基于真实网络测量
资料:Exposing and Circumventing SNI-based QUIC Censorship of the Great Firewall 类型:顶会论文(USENIX Security '25) 可信度:A,最新的 GFW QUIC 审查研究
读者自检
读完本文后应能回答:
- GFW 有哪几种主要的审查手段,分别如何工作
- 被动检测和主动探测的根本区别
- 为什么全加密流量(random-looking traffic)也会被检测
- REALITY 如何针对性地应对每种审查手段
- 审查机制的协同工作流程
下一步阅读
- 深度包检测机制:深入 DPI 原理
- TLS 指纹识别:理解 TLS 指纹如何被用于检测
- REALITY 协议详解:理解 REALITY 的设计原理