2017年7月

その日、人类は思い出した。
やつらに支配されていた恐怖を…
鸟かごの中に囚われていた…屈辱を…

故事发生在某个东方神秘国度,这里的人们由于一些神秘力量的影响,他们每天吃的东西不是普通是食物,而是数据信息。他们生活的区域被一堵看不见摸不着的墙包围着。你可能会问:既然看不见也摸不到,那人们是怎么知道有这样一堵墙呢? 关于这个问题,并没有文字资料可以证明它的存在,不过生活在其中的人们却分明感受到,它,一直在...

起源

据一个不存在的网站记载,这堵墙起步建造于 1998 年,然后一直到 2002 年的时候,有一名西方记者在一篇文章中描述了这堵墙,文章中用了 Great Firewall 来称呼它,后来就有了 GFW 这个缩写来代指它并广为流传。

像其他所有的城墙一样,GFW 的主要作用也是防御外部的威胁和对来往的旅人进行盘查。不过不同的是,GFW 防御和盘查的不是人,而是信息,也就是人们每天吃的粮食。它主要过滤一些 政治敏感内容、色情 和 青少年犯罪 等内容,当然还包括一些国家敏感信息的监控。而这些数据如果一不小心没有被过滤到被墙内的人误食了,可能会导致人们 情绪异常、身体不适 或者其他更大的危险。

那么这样一堵庞大精细的墙究竟是怎么样工作的呢?

主要技术手段

因为之前提到的,因为 GFW 是一种看不见摸不到的存在,并且并没有任何官方数据,所以目前并没有很确切的数据来解释它的工作原理。不过根据一些外在的信息表现,我们可以推测总结出几种工作手段。为了方便解释和理解,我们把他们抽象成我们现在网络体系下存在的技术进行说明,请勿对号入座哦~

IP 地址封锁

第一种最常见的技术就是 IP 地址封锁,可以对需要通过网关的数据包进行 ACL(Access Control List)检查来实现对指定 IP 地址的数据包进行拦截和丢弃。

例如,当我们跟踪访问某 G 站的数据包时,可以拿到类似下面这样的数据:

$ traceroute -d 218.189.25.131
traceroute to 218.189.25.131 (218.189.25.131), 64 hops max, 52 byte packets
 1  192.168.1.1 (192.168.1.1)  1.545 ms  1.860 ms  1.278 ms
 2  100.64.0.1 (100.64.0.1)  52.488 ms  4.257 ms  3.784 ms
 3  202.105.153.181 (202.105.153.181)  3.798 ms  4.238 ms  3.979 ms
 4  183.56.65.54 (183.56.65.54)  4.992 ms
    183.56.65.50 (183.56.65.50)  6.833 ms
    183.56.65.54 (183.56.65.54)  9.435 ms
 5  202.97.94.126 (202.97.94.126)  7.965 ms * *
 6  202.97.94.90 (202.97.94.90)  13.816 ms
    202.97.94.98 (202.97.94.98)  17.447 ms
    202.97.94.94 (202.97.94.94)  11.026 ms
 7  202.97.63.106 (202.97.63.106)  13.678 ms  14.872 ms  15.898 ms
 8  202.97.62.110 (202.97.62.110)  115.336 ms  113.077 ms  113.486 ms
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *

从结果中我们可以看到,数据包在经过 202.97.62.110 这个地址以后就没有了响应,也就是这个地址上很有可能做了针对数据包的过滤处理,从而使得数据包没有正确的被投递。

同样的,不只是 IP 地址,也可以针对某些特殊端口进行 ACL 过滤。

当然,作为这个神秘国度的神秘项目,GFW 也在不断的升级,现在对于 IP 封锁的手段已经替换为 黑洞路由 技术。简单点解释就是说,网关不再是把需要封锁的 IP 地址写在 ACL 里面,而是写在正常的转发列表里,只是通过动态路由技术为其指向一个错误的地址。也就是说,当墙内的人们向外投递一张含有违禁品的食物订单时,订单经过 GFW 的转发,会随机投递给一条错误的供应链,而这条链路上找不到订单上的东西,这张订单就会被当做废纸,被遗弃在世界的某个角落。对于 GFW 来说,它做的只是一个正常的转发动作,所以效率比 ACL 要高很多。

DNS 污染

我们知道,当我们访问一个网址的时候,首先需要向 DNS 服务器获取这个域名所对应的 IP 地址,才能再发出正式的请求。DNS 污染就是修改或者删除 DNS 服务器上某些特定域名的记录,从而使得数据不能发出或发向错误的地址。

比如我们查询某 G 站的 IP 的时候:

$ nslookup www.google.com
Server:        114.114.114.114
Address:    114.114.114.114#53

Non-authoritative answer:
Name:    www.google.com
Address: 93.46.8.89

记录返回 IP 地址为 93.46.8.89,而我们查询后发现这并不是一个正确的 G 站的地址,而是一个错误的地址。所以我们发出去的包并不会正确的到达 G 站。

而对于墙内的人们来说,他们的情况也是这样的。而且很巧合的是,在这个神秘国度一共 3 台 DNS 镜像服务器,一台在王城,一台在特政区,还有一台在宝岛。由于一些历史原因,后两台并不受 GFW 管理,所以只有在王城的那一台会被污染。所以当人们需要购买某些食材的时候,会被王城的回包告知 “并没有这种食材”。

TCP 连接重置

TCP 重置是指在建立 TCP 加密连接的时候,在握手阶段伪装成对方向连接的两段发送 RESET 数据包,从而导致连接无法创建。

正如墙内的人们所遇到的问题一样,当人们想创建一份秘密的订单来订购违禁品时,GFW 会在双方协商密码的时候伪装成对方,并说:“对方不想和你说话,并向你扔了一个 RESET 包!”,从而导致无法创建秘密订单。

据记载从 2015 年升级以后,这种手段已经开始被 黑洞路由 技术所代替。

关键词阻断

关键词阻断是指当数据信息中包含某些特殊关键词时,会触发阻断机制,中断本次连接。

所以当人们的订单中含有某些特定关键词的时候,GFW 就会伪装成对方发送 RESET 包,来中断本次连接。这里并不是直接丢弃订单或者使用 黑洞路由 技术的原因是,如果丢弃数据包,人们会以为是交通的问题导致订单没有送到,从而不断的发送重试,导致压力增加。而使用 RESET 包的话,人们会认为是对方终止了交易,就不会再重试了。

加密连接干扰 和 深度包检测

GFW 除了我们常见的一些网络手段之外,还有一些比较特殊的技巧。比如通过发送一些探针对各个供应商进行刺探,来确定是否是一个正常的供应商,还是一个代理供应商。同时还会对某些特殊的加密订单进行干扰,使订单成功率降低,从而降低违禁食品交易的成功率。

当然,随着 GFW 的不断升级,它还引入了一些机器学习的方法,对每天经过的大量的信息进行审查、训练,从而提取出异常信息的特征,比如握手特征、连接时长、数据量、时间、地点等等,当这些特征再次出现时,就可以快速有效的进行拦截和过滤。

也就是说,GFW 正在变得越来越精准,越来越智能。

墙内

回到我们刚才的故事。由于 GFW 的日渐强大,墙内的人们也开始越发得难以吃到那些墙外的食品,因为说实话,那些 “过审的食品” 有时候确实不怎么营养。那些偷运食物的人一个接一个的被卫兵带走,送进来的食物种类也越来越少。

由于长期的营养不良,很多人对于颜色的感知逐渐退化,变得只能分辨红光,红红的旗子,红红的眼睛,红红的血,红红的心...

还有一些还没有退化的人们,每天盼望着,盼望着更营养的食物到来的那天...