作业2:看着GFW长大

来源:ZHU Tianyi
 
1、历史

很早之前就有了电脑,也有了网络,那个时候连网站都没有几个,似乎也没有GFW。只是依稀记得,当时的拨号网络分两种,一种叫 163 ,可以连出国外;一种叫 169 ,国内局域网。163 的资费比 169 贵出些许,把大家都圈在了国内。

注意到 GFW 的时候是用了 OICQ 的时候,当时也没怎么学写程序,但总觉得 OICQ 的行为很奇怪。某个版本对方可以看到你当前所访问的网站地址,于是,看到了很多关于 OICQ 在 windows 下面无法无天的行为,也学会了怎么样使用代理来保护自己的信息。但是用代理之后,发觉一些台湾论坛可以上去了,就这样用了一段日子的代理。如今看来,这时候的 GFW 还是比较初级的,找个代理就可以跳过,应该是按照 ip 地址或者在 dns 上做了简单的封锁。

有一年,初中,某天下午,所有的电视台都在不停的放一档新闻。新闻过后,班里面一个叫李弘毅的同学就特别倒霉,大家都问他他哥到底干了些啥。之后的几个月,信箱里就受到很多很有乐趣的信,点开之后会有很有趣的新闻看:领导人和歌手的小故事、某人家乡产生新物种的产生云云。而且,这些网站的域名和 ip 换的非常之快,换了之后就给你写一封信,乐趣也就一直没有间断。但是,经过这样的洗礼之后,GFW 也成长了。你会发现更多的正常页面无法打开,只是里面可能有一到两个词有问题。具体的表现为,当你打开一个页面,你原本是可以看到页面一点一点刷出来,可就在“那个词”出现的一瞬间,本来好好的页面变成了“该页无法显示”,在接下来的几分钟里,你所有的页面也都会无法显示。由于 ie 5.5 对于错误一概处理为“该页无法显示”,所以当初无从考证是不是发送了 TCP Reset。但当时的 GFW 无疑是到今天为止过滤能力最强大的 GFW,一旦发现有不该出现在字典里面得词语,立刻切断链接。如果你当时可以在国外空间上写 cgi 自己做个转发的话,会发现不该出现在字典里的词语包括了该词语的 zip 压缩后的样子,以及每比特加一之后的样子。而且当时的 GFW 也是史上最敏感的 GFW ,以至于当年力推 64 位技术的走在时代前沿的电脑销售商家们,都在自己的中文网站上宣称:“采用了最先进的双 32 位技术”。

也许是效率太低,也许是过于敏感,高中的时候,GFW 似乎已经不做这样的事情了,取而代之的是即使加了代理,也无法访问被封掉的网站。之后出现了一个叫做 PHProxy 的项目(这个项目的已经停止开发),他可以把 URL 做简单的加密,然后返回你所需要的网站,是当时也是现在对用户来说最简单的技术。所以可以推断,当时的技术只是基于 url 和 ip 地址的过滤。同时比较复杂的,有很多记不起来名字的软件,例如:freebird?自由门?花园?等。这些软件都是在本架设设一个代理,然后打一个 SSH tunnel 。用户需要非常复杂的设置,而且每次打开浏览器一定会蹦到他们的主页,那些花边新闻好多年都不换的主页,以及夸张再夸张的所谓真相,以至于附图看起来都像是外星人入侵一样。更不好的是,由于他们没有固定 ip 和 url ,以及当时美国有对外密钥不能大于40位的限制,每次浏览器都会提示你证书不安全、密钥不安全。

之后到现在,GFW 已经进入了无法捉摸的阶段,估计是系统已经做得很大很久,只是在上面做些修修补补就已经很困难,于是所有不小心进去了的网站也从来没有出头的一天。但功能依然在增强,甚至更加的人性化,让你感觉不到他的存在。对于某些决裂的很彻底的网站,使用 PHProxy 这样的东西也无法打开,因为 PHProxy 对于 url 的加密只有两种,而且还停止开发了。某些碍于面子的从黑名单里爬出来的网站,例如 googlewikipedia中文,使用了最人性化最精确地方法,文本中一旦出现关键字,不发 TCP Reset,只是返回一个空的 html 页面,之后的几分钟,也都会是空白的 html 页面。其他被误伤的站点,使用代理还是连的上去的,例如 http://informer.software.com/

2、技术分析和应对方法

通过以上的说明,我们可以分析一下 GFW 在各个阶段使用的技术:

2.1、针对 IP 地址的封锁

这是最早的技术,如果说有优点的话,就是简单和容易实现。其缺点在于:很容易通过代理绕过,而且,对于虚拟服务器的提供商很容易造成错误封锁。据不可查证的传闻称封锁的粒度粗到了封锁整个 C 段,以及劫持 DNS ,但根据当时少量的测试以及对当时的技术水品推测来看,可信度并不高。

绕过的方法也很简单,只要有一个在国外的代理服务器,就可以绕过。

2.2、基于关键字的封锁

可以称作是 GFW 的第二阶段,依据当时的使用情况来看,应当是对于所有的网络流量都进行了关键字检测。如果发现有关键字出现,则立刻切断连接。而且,对于关键字的简单加密也有检测,例如对于每字节加一,以及简单的 zip 压缩(当时在 http://www.ioiforum.org 上有相关讨论,但该网站由于无人维护已经关闭很久)。其优点在于不会放过任何由关键字的网页,但缺点也很明显,非常容易造成错误的屏蔽。虽然关键字匹配的算法可以做到 O(n) 级别的时间复杂度,但由于网络出口的流量过大,在上面添加这样的过滤会很容易影响到整个出口的速度。

绕过的方法是使用当时流行的各种 SSH tunnel 软件,对流量做较为复杂的加密。

2.3、基于 URL 的封锁

该技术会对浏览器发送的 header 中包含的 URL 进行识别和封锁,而且针对一些 URL 的简单加密措施也有相应的对策。优点在于能够应付频繁更换 ip 地址的网站,也能让简单的代理绕过方法失效。缺点仍然是过于宽泛,对于一些二级域名无法区分。

绕过的方法依然是使用当时流行的各种 SSH tunnel 软件,对流量做较为复杂的加密。或使用新的 URL 加密代理。

2.4、DNS 劫持是 GFW 做的么?

由于各大接入服务商也会做这些事情,例如遇到了 http 404 返回会将你的页面重定向到“电信114”、“百度搜索”之类的网站,还给你回发一个 http 300 返回,而且使用 OPENDNS 也很难有所改观,所以推测应该不会是在同一个级别或者同一个出口的应用。

2.5、各种技术的混合使用

现在的 GFW 是以上各种技术的混合使用,最主要的还是通过 URL 来进行封锁,对于大家广泛关注和使用的网站使用关键字过滤进行封锁。好处在于让正常用户几乎不能感觉到 GFW 的存在,而且也更加精确。缺点在于对于广泛关注和使用的网站过于敏感。

绕过的方法可以使用各种 SSH tunnel 软件,以及  GAppProxy(可以预见 google code 和 Google App Engine 也会被很快封锁,就像 sf.net 一样),或者使用 Tor,购买国外的 SSH 服务器或者 VPN 服务,使用 https 连接等等。

3、总结

虽然发言人经常说:“依法管理互联网”,但是由于12,我们很难看到有正常的申诉渠道能将错误屏蔽的网站解除屏蔽,是 GFW 体系最大的不足和如果将来打算作为一个正常的防火墙最大的障碍。

但 GFW 的目的已经达到:“In the latest twist on Internet repression, governments don’t just censor, they scare.

ref 均使用链接标明

没有评论: