Total Pageviews

Sunday 28 April 2013

GFW的三板斧

讲讲GFW用来对付屁民的手段,我称之为GFW的【三板斧】。


零、前言

首先要声明的一点是:GFW并不是一个单独的设备,而是一个系统。不要把它想象成接入网络的一台类似交换机的东西那么简单。它可能是由数个设备,在数个层面间协同工作的结果。可以这样理解:GFW就是目前在技术上针对所谓【有害信息】的屏蔽过滤技术的一个集合体。


壹、DNS污染
由于大家现在上网基本都通过域名来找到网站,比如www.youtube.com。所以GFW的第一招就是对国内互联网上接入的终端进行DNS污染,让终端拿到的IP地址是错误的,于是就当然无法访问被墙的网站了。
GFW要污染DNS通常有两个办法:

  1. 如果DNS服务器能够被控制(比如电信、移动等国内ISP提供的DNS),那么GFW会让该服务器直接返回一个错误的结果。
  2. 如果DNS服务器不受控制(比如Google的8.8.8.8),那么GFW会伪造一个DNS应答包,里面给出的IP地址是错误的。由于这个应答包往往比正确的DNS应答包要来得快(因为不用去查真正的IP地址嘛),于是PC就上当了。
这一招简单有效,就封锁某个网站而言,对付麻瓜足矣。但这招有时候也会有例外。比如GFW发伪造包的时候,终端可能会先收到真正的DNS应答包,那它就白 忙活了。稍懂技术的用户也可以通过修改本地hosts文件来强迫终端按修正过的列表进行DNS域名解析,从而使DNS污染完全失效。但没关系,GFW还有 下一招……


贰、TCP连接重置
TCP协议中规定了一种包,叫做连接重置包。这个功能被GFW用来拆散所谓“有害”的TCP连接。GFW会先对网络上捕获到的数据包进行审查,一旦发现内容“有害”,就向双方分别发送伪造过发送方的连接重置包。形象地说,就是GFW替你向服务器说了“BYE-BYE”,同时也替服务器向你道了别。由于你的终端和远处的服务器都是好孩子,严格遵守TCP协议,因此也就各自断了连接。

招数其实挺简单,关键在于其触发机制。根据被观察到的行为,GFW通常有以下几个工作模式:

1.关键词过滤
这对于HTTP协议尤其有效。因为HTTP包是明文的,很容易解析。关键词可能是某个字眼,也可能是某个网站的域名之类。通过在HTTP包里面翻关键词,GFW甚至可以做到对某个网站的某些链接(博文、新闻)进行屏蔽,而不会影响该站的其它内容。
对于Google、Yahoo等不受控制的搜索引擎,GFW大多采用这一招。因为搜索的结果是事先无法预料的,所以“事后追杀”非常必要。
另外,这一招可以很好地应对未知的“威胁”——谁知道哪个国外的“乖乖”网站哪一天发了神经要发一篇“有害”文章呢?一些比较知名的外媒,比如纽约时报中文网之类,就偶尔会有这种待遇。
HTTPS/SPDY协议因为其数据包的内容是加过密的,所以能够有效地避开关键词过滤。但GFW项目组似乎也一直在发展相应的技术来克服这一局限性。

2.IP/端口屏蔽
对于有一些“有害”网站,IP地址已知(并且不多)。GFW就会对这些IP地址进行“蹲守”,重点屏蔽。此时不管你连接过去是干什么,连到什么端口,一律强制“分手”。有的时候GFW也会只针对某些端口开启这个功能,这个就全看方校长怎么想了。

3.关小黑屋
GFW貌似还有一种机制,即如果探测到的某一次“有害”连接(信息/数据包),则针对它的源地址/端口和目的地址/端口,如果再有新的访问请求,先关一段 时间的禁闭再说。根据Google上次放出来的视频,这个时间大约有90秒左右。在这段时间内,哪怕是正常的、“无害”的访问请求,GFW也一律给双方强 制“分手”。于是,就经常会出现这种情况:NAT下面有人触发了“老鼠夹子”,于是整个公司的人一段时间内都用不了Google,最终导致大量麻瓜弃 Google转Baidu。

实际运用中,以上工作模式可能会同时混杂使用。用telnet可以很容易地验证服务器是否被蹲守或关小黑屋了。

其实,个人觉得这一招比较类似于老鼠夹子,不碰它没事,一旦触发,则很难避免被“制裁”。终端还可以通过某种程度的措施来拒绝连接重置包,但服务器因为还 要面向非GFW控制区域提供服务,一般不会这样做,所以这招的有效性一直都还不错。对于GFW而言,由于这种“事后追杀”的方式,开销非常小,只是发两个 包而已。并且,由于关键词搜索机制带来的“智能化”的感觉,被用得最多最滥的就是它。不得不说,它跟DNS污染联合起来用,效果确实相当好,麻瓜伏下一大 片。

只是,被这种招数掐断的连接,断得非常快,作为用户能够很明显地察觉出来与“超时”的不一样,不太容易忽悠成“网络不通”。另外,TCP连接中断了,但服务器却还能ping通(因为ping用的是ICMP协议)。麻瓜们基本上ping还是知道的,这样就更不容易忽悠了。
并且,这个“分手”手段并不是十分的可靠。它得建立在通讯双方都严格遵守TCP协议的基础之上。何况就算连接被拆散了,但双方可能在断掉之前已经互通过了一部分“有害”信息。对于某些人而言,仅仅这样是不够的,于是有了第三招……


叁、IP黑洞
最后这一招就是GFW最后的杀手锏,那就是让网络彻底不通。在通常情况下是针对特定的目的IP地址进行断网,也就是说发往该IP的所有数据包都丢弃不理,好像进入到了一个黑洞一般。最终的结果体现出来是超时,跟对方服务器出问题的感觉很像,因此效果相当不错。

这也就是所谓的“黑名单”模式。据说GFW也可以设置为“白名单”模式,这时候就只有发往名单上的IP地址的数据包才能送达,其余的都被丢弃。这是终极大 杀着,我想可能会留到最后用吧。白名单一旦使出来,所有翻墙手段基本上都会失效,但网络的正常使用也大受影响,基本等同于小中华局域网了。

不过,要设置IP黑洞,基本等同于在路由器上改路由表。即使是“黑名单”模式,折腾一次好像动静也比较大。所以一般都是针对重点对象使用。Twitter 和Facebook目前就受到这种级别的招待。用tracert/traceroute往往可以看到路由在中间断掉,而不是目标主机无响应。对付这种招 数,除了彻底绕开GFW,没有什么别的更好的办法了.