2025年8月20日中国防火长城GFW对443端口实施无条件封禁的分析

本来应该在上一个帖子 GFW 疑似大规模干扰 443 端口连接 下结尾,但gfw report专门发文研究了,那就值得单开一个简单摘要

本报告记录了我们对这一短暂但广泛的封禁事件的测量与分析。主要发现如下:

  1. 无条件的 RST+ACK 注入仅发生在 TCP 443 端口,未见于其他常见端口(如 22、80、8443)。
  2. 该无条件注入同时扰乱了出入境中国双方向的连接,但触发机制不对称:从中国境内向境外发起的连接,客户端的 SYN 包与服务器的 SYN+ACK 包各自触发三个 RST+ACK包;从境外向中国境内发起的连接,只有服务器返回的 SYN+ACK 会触发 RST+ACK,客户端发送的 SYN 不会触发注入。
  3. 负责注入的设备指纹与已知 GFW 设备不匹配,因此此次事件要么由新的 GFW 设备造成,要么是由已知设备以一种新的或误配置的状态运行造成的

境内发起(inside-out)

观测显示:客户端发送的 SYN 包会触发三连发伪造 RST+ACK ,其相对序列号均为 0 ,TCP 窗口大小递增为 198019811982 。服务器返回的 SYN+ACK 同样会触发三连发 RST+ACK ,其相对序列号为 1 ,TCP 窗口大小递增为 329332943295

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
01:31:07.153262 IP $CN_IP.52596 > $NON_CN_IP.443: Flags [S], seq 3193349615, win 64240, options [mss 1460,sackOK,TS val 318868316 ecr 0,nop,wscale 7], length 0
01:31:07.159991 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 0, ack 3193349616, win 1980, length 0
01:31:07.159991 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 0, ack 1, win 1981, length 0
01:31:07.160021 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 0, ack 1, win 1982, length 0
01:31:07.274422 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [S.], seq 2837031664, ack 3193349616, win 65160, options [mss 1424,sackOK,TS val 80839422 ecr 318868316,nop,wscale 7], length 0
01:31:07.274442 IP $CN_IP.52596 > $NON_CN_IP.443: Flags [R], seq 3193349616, win 0, length 0
01:31:07.278233 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 1, ack 1, win 3295, length 0
01:31:07.278233 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 1, ack 1, win 3293, length 0
01:31:07.278233 IP $NON_CN_IP.443 > $CN_IP.52596: Flags [R.], seq 1, ack 1, win 3294, length 0

我做了简化

client 国内 ip                    gfw                    server  国外ip
  ------------触发---SYN----------->-----------SYN-------------->
     <--RST+ACK seq=0 win=1980------
     <--RST+ACK seq=0 win=1981------
     <--RST+ACK seq=0 win=1982------
<-----------SYN+ACK----------------<------触发-----SYN+ACK--------
---------------------RST------------------------------------------>
      <--RST+ACK seq=1 win=3295------
      <--RST+ACK seq=1 win=3294------
      <--RST+ACK seq=1 win=3293------

疯狂地向国内发起ip 扔数据包,这就是我为什么说 gfw 实质上就是对自己公民的ddos攻击

我有个疑问,第二组RST+ACK 会不会是由client 发给server 的 RST 触发的

境外发起

境外客户端仅收到三份 RST+ACK (而非六份)。相对序列号为 1 表明触发源是中国侧服务器返回的 SYN+ACK ,而非客户端的 SYN 。事实上,当我们向与 $CN_IP 同一 /24 子网的、未开放目标端口的境内 IP 发送 SYN (因此对端不返回 SYN+ACK )时,无法触发封禁。

11:44:41.194853 IP (tos 0x0, ttl 64, id 48747, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.0.162.34500 > $CN_IP.443: Flags [S], cksum 0x418a (incorrect -> 0x252a), seq 3455861170, win 64240, options [mss 1460,sackOK,TS val 134891089 ecr 0,nop,wscale 7], length 0
11:44:41.440817 IP (tos 0x0, ttl 46, id 48747, offset 0, flags [DF], proto TCP (6), length 60)
    $CN_IP.443 > 192.168.0.162.34500: Flags [S.], cksum 0xd4a2 (correct), seq 1580408478, ack 3455861171, win 8192, options [mss 1452,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0
11:44:41.440817 IP (tos 0x0, ttl 96, id 40305, offset 0, flags [DF], proto TCP (6), length 40)
    $CN_IP.443 > 192.168.0.162.34500: Flags [R.], cksum 0x515b (correct), seq 1, ack 1, win 2072, length 0
11:44:41.440817 IP (tos 0x0, ttl 97, id 39808, offset 0, flags [DF], proto TCP (6), length 40)
    $CN_IP.443 > 192.168.0.162.34500: Flags [R.], cksum 0x515a (correct), seq 1, ack 1, win 2073, length 0
11:44:41.440817 IP (tos 0x0, ttl 98, id 38891, offset 0, flags [DF], proto TCP (6), length 40)
    $CN_IP.443 > 192.168.0.162.34500: Flags [R.], cksum 0x5159 (correct), seq 1, ack 1, win 2074, length 0
11:44:41.440901 IP (tos 0x0, ttl 64, id 48748, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.0.162.34500 > $CN_IP.443: Flags [.], cksum 0x4176 (incorrect -> 0x5781), seq 1, ack 1, win 502, length 0

我做了简化

server  国内 ip                     gfw                   client 国外ip
 <---------------------------------------SYN----------------------
-------------------触发-----SYN+ACK--->---------SYN+ACK----------->
                                    --RST+ACK ------seq=1--------->
                                    --RST+ACK ------seq=1--------->
                                    --RST+ACK ------seq=1--------->
<---------------------incorrect ----------------------------------

消息2:Analysis of the GFW's Unconditional Port 443 Block on August 20, 2025 · Issue #511 · net4people/bbs · GitHub

有人观察到 AS17557 的宕机时间几乎与中国的 443 阻断时间一致。但如果说有什么不同的话,那就是 AS17557 的宕机开始得更早一些,持续时间也更长,长达几个小时。