新时代的黑客帝国与锡安

来源:年华似水,岁月如歌
 
继续谈墙……说实在的我已经很厌倦了GFW这个话题,然而牵涉到大多数无辜网民的自由与所受到的蒙蔽,不得不谈。

  GFW的邪恶正通过 DNS 劫持行动漫天铺地扩展开来,网民们与此对应的手段是修改 hosts 文件,无数修改 hosts 的方法在网上传播开来,访问被封的 YouTube、Twitter、FriendFeed,等等。相信很多人本机上的 hosts 文件,这几天正随着事态的进展,一行一行的膨胀起来;而且相信用不了多久,就会有人在网上放出一个万能翻墙必备之 hosts 文件,提供下载,甚至不仅仅是一个文本文件,而是自动安装程序,自动检查 hosts 文件所在位置,自动更新…… 哦,相信我,这一定不是幻想——如果 GFW 再这么邪恶下去,是一定有人会这么做的,然而正如和菜头在“五分钟了解Hosts文件”结尾指出的,“其实,我们本不必要去学习这些内容的。”

  今天看到有人担心,说 hosts 的方式应该私下低调传播,否则会导致 GFW 直接封锁 IP 。

  我首先需要向持这种想法的朋友解释一下,你完全不需要有这种担心。

  我们可以从技术层面来剖析一下这个问题,首先,GFW 所处的位置在电信骨干网的出口所在,为了进行有效的封锁,它需要对所经过的数据包拆解、重组、过滤、审核,进行一系列的封堵操作。

  由于出口网关必须保持一定速率的吞吐速度,对所有数据包都进行从 IP层、传输层、应用层的过滤是不现实的,因此 GFW 必须首先要从效率上考虑取舍。

  A. 我们都知道,对 IP 层的封锁虽然方式最简单,但却是最粗放、最不经济、也最容易引起抱怨的一种方式。

  从IP 层的封锁通常可以表示成以下的规则列表:

  block IP1/掩码1
  block IP2/掩码2
  block IP3/掩码3
  ……

  需要对所有要封禁的地址段,按照掩码的方式增加规则条目。当一个数据包到来时,则对这个规则列表中逐条进行匹配,一旦符合,该数据包则被丢弃,直到所有规则都未符合,该数据包才被放行。

  可想而知一旦采用这样的方式,过滤规则的条目数是至少成千上万的,由于必须逐条匹配,即便可以采取一定算法的优化,其匹配命中之前所必须验对的条目数也是非常巨大的。更为不利的是,对于未封的站点,则必须要匹配所有规则之后才能放行,这将导致正常的站点访问将极其缓慢。所以可见,采用这样的方法是极其不经济的,一旦在出国的速度受到严重影响,将大大损害电信所鼓吹的宽带速度宣传,肯定会引起网民的强烈不满,是得不偿失的。

  B. 所以基于这一点考虑,GFW 就采取了 DNS 劫持的方式,只过滤 DNS 解析请求的 UDP 53 端口(这个数据量较 A. 要小很多),DNS 解析是一个从服务器到客户端逐级保留缓存的应用,有些环节的缓存保留时间甚至可以长达数日,这就使得 DNS 劫持的效果更显得神出鬼没——当你仍在使用尚未污染的 DNS 解析结果时,一切正常;一旦本地缓存过期,去请求下一次解析时,就被 GFW 返回一个恶意的国内地址,而客户端则完全蒙在鼓里,所有的后续访问(不管该地址存在与否)都不会再指向 GFW,并且在本次缓存过期之前(一天左右),不会再向服务器申请下一次新的请求。

  正是由于访问量极小,代价极小,收效极大,才使得 GFW 的 DNS 劫持成为最有效的流氓性杀伤武器。尽管这种方式彻底背离了互联网服务的精神准则,然而在巨大利益驱使下,某些人仍公然使出这招最阴毒的杀手锏。

  我们有理由相信,GFW 所要对付的并不是所有人,它并不需要对付所有的 IT 行业内部人士——那些受到良好教育懂得自省、懂得怀疑、懂得思索、知道如何去学习、有能力去积极动手尝试的人,在整个国内互联网人群中,连1%恐怕也不到(姑且让我乐观地估计有 1%吧,事实上肯定不到这个比例)。GFW 所要对付的不是这 1%,而是那剩下的 99%,让翻墙的技术门槛提得更高,让绝大多数人在毫无知觉的情况下闭嘴。至于那还能说话的 1%——你看过电影《Matrix》(黑客帝国)吧?那 1%的人群就是流亡到了 Zion (锡安)相信救世主的叛军,他们与 Matrix 里面的人们相互隔离,他们自以为是为自由而战,最后如果没有 Neo 的力量,Zion 会被 Matrix 用武力轻易地征服。

  我们和 GFW 现在的关系,就跟 Zion 和 Matrix 的关系一样。

  所以我们根本就不用担心 hosts 文件传开了,会不会导致 GFW 封 IP 的问题。朋友,我跟你说那绝对是杞人忧天,玩GFW的人也是懂技术的,它不会不知道过滤规则列表加长了对它自己是什么后果。这是一个双方都可接受的妥协,就像 Zion 和 Matrix 在一定条件下也会妥协,和平共处一样。我们再不用这个方法,再不传播,那就未免太傻了。


  C. 说到这里有人也许会质疑我,说难道 GFW 没有在搞应用层的内容过滤吗?难道不是最近破解了代理 URL 中所包含的 Base64 编码,使得普通的翻墙代理方式,例如 gladder 统统失效了吗?既然 GFW 能够对数据包在应用层进行重组和过滤,这个运算量显见要比 IP 层的过滤更大,那么为什么 GFW 不能采取直接的 IP 层过滤呢?

  如果您有这样的质疑,那么恭喜您,您已经开始有独立思考能力了。

  情况是这样的,GFW 对应用层做分析不假,应用层过滤的运算量比 IP 层过滤要大,这也不假。可是有一点不同,GFW 的应用层过滤是异步(非实时)的,而不是同步(实时)的。

  我们也可以参考这篇“为了朦胧的真实”说明一下这个问题。也就是说,GFW 无法做到实时应用层的重组过滤,它只能在交换机上做一个数据包镜像,一方面让该数据包暂时通过,另一方面对镜像包在后台用大量服务器做重组过滤,一旦发现有敏感内容,则向源主机发送一个 Reset (重置)信号,使得我们误以为服务端主动断掉了链接,同时 GFW 会将它认为有敏感内容的 IP 地址放入一个小的循环队列中,这个小队列用于在 IP 层限制客户端到该地址的访问。

  这就是我们通常在访问某些页面时,会因为该页中包含的某些敏感词,导致几分钟之内不能再度访问该站的原因。GFW 采用循环队列也是为了避免该队列的无限增长而导致性能的下降,我们也可通过这个例子预期,IP 层的封锁将只是 GFW 的一个辅助手段,而绝对不会是主要手段。

  D. 那么,既然 GFW 采用了目前的方式,我们应该怎么办呢?

  首先我们应该避免 DNS 劫持,以前我们曾用过 OpenDNS 或者境外 DNS,但目前这种方法已经肯定失效,GFW 肯定已经截取了所有 53 端口的 DNS 解析请求,并随意用国内假地址来进行污染。

  解决的办法除了在本机维护一个巨大无比的 hosts 文件之外,就是使用加密通道来做 DNS 解析。否则,就只能寄希望于国内某家 DNS 服务提供商良心不泯,通过后台的加密通道来获取正确的 DNS 解析,而我们则将自己的 DNS 服务器请求指向该家。(我怀疑这种方案的可行程度,而且一旦泄露,该站也一定面临着在国内除名的危险,所以还是建议用 VPN 或者 Tor 吧)

  据我所见到的文档,IE 是不支持远程 DNS 解析的,而 FireFox 可以通过在地址栏中输入 about:config,修改配置参数 network.proxy.socks_remote_dns=true,或者安装 FoxyProxy 插件后设置“使用 SOCKS 代理服务器来查找 DNS”,这样就避免了维护一个庞大易错、且很可能给系统造成后门漏洞袭击的 hosts 文件的危险。鉴于 FireFox 有着众多的插件,在管理、配置和性能诸多方面较 IE 有着明显的优势,除非你不怕被错误的 DNS hosts 文件将你引到钓鱼网站,否则建议朋友们还是放弃 IE 吧:IE 遇到墙,有理说不清

  除了对付 DNS 污染之外,另一个最重要的就是必须走加密协议的数据通道,否则你随时都有可能因任何敏感词撞墙,无论是正文里的,URL 链接里的,只要被 GFW 扫到了,你就立马会撞墙。

  在这种恶劣环境下,我不妨来告诉你一些中国国情,也算是我个人,亲眼目睹GFW在这十年间是如何膨胀起来的一个老网虫的忠告——只要你想在中国这块江湖混,还想时不时出国看看的话。

  https:// 是常态,只要能 s 的,全 s 上。FireFox 用户安装油猴子插件后用这个脚本自动跳转;
  如果你用的是 Firefox,请参阅这个贴把加密强度改成支持最高 256位的;
  珍惜生命,远离 IE;
  出国一定走加密通道,无论到哪里。(不管你用 Tor 也好,VPN 也好)一定不要再用普通非加密的代理了,GFW 已经能看到内容了。
  一定要牢记,不跟国内邮箱的用户谈敏感问题,因为 你的邮件随时有可能被偷窥!
  你需要随时保持警惕,记住先知的预言,“Big Brother Is Watching You”

  新时代的 Matrix 正在上演。

  您能顺利看完此篇而没被墙么?
  如果是,恭喜您已经到墙外 Zion的自由世界;否则,就是此文已经被和谐了。

没有评论: