The Wall
その日、人类は思い出した。
やつらに支配されていた恐怖を…
鸟かごの中に囚われていた…屈辱を…
故事发生在某个东方神秘国度,这里的人们由于一些神秘力量的影响,他们每天吃的东西不是普通是食物,而是数据信息。他们生活的区域被一堵看不见摸不着的墙包围着。你可能会问:既然看不见也摸不到,那人们是怎么知道有这样一堵墙呢? 关于这个问题,并没有文字资料可以证明它的存在,不过生活在其中的人们却分明感受到,它,一直在...
起源
据一个不存在的网站记载,这堵墙起步建造于 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
的日渐强大,墙内的人们也开始越发得难以吃到那些墙外的食品,因为说实话,那些 “过审的食品” 有时候确实不怎么营养。那些偷运食物的人一个接一个的被卫兵带走,送进来的食物种类也越来越少。
由于长期的营养不良,很多人对于颜色的感知逐渐退化,变得只能分辨红光,红红的旗子,红红的眼睛,红红的血,红红的心...
还有一些还没有退化的人们,每天盼望着,盼望着更营养的食物到来的那天...