道高一尺,墙高一丈:互联网封锁是如何升级的

开门查水表

Posted by WangXingyu on December 6, 2016

 新时代的防火墙像手术刀,精准迅速,直击命门。而“翻墙”未来可能变成一门手艺,如何传承,任重道远。

  1987年,中国第一封电子邮件由中国兵器工业计算机应用研究所发往德国,标志中国成功接入互联网。邮件内容是:“Across the Great Wall we can reach every corner in the world”——穿越“巨墙”(长城),我们无处不及。与这封邮件几乎同龄的我,没想到生活中竟总离不开“墙”。在物理世界和虚拟世界中多次穿墙,也去过世界各处,看“墙”越筑越高,有时义愤填膺,有时啼笑皆非。仅以此文,记录“墙”边的一些见闻。

  国家公共网络监控系统国家公共网络监控系统,俗称中国网络防火墙(The Great Fire Wall of China,常用简称“GFW”或“墙”)。一般意义所説的GFW,主要指中国官方对境外涉及敏感内容的网站、IP地址、关键词、网址等的过滤。随着使用的拓广,中文“墙”和英文“GFW”有时也被用作动词,网友所説的“被墙”即指被防火长城所屏蔽。

2008年校园网:“连坐”惩罚

  2007年,我进入这所XX理工大学。它特别吊诡的设定是,大一不能带电脑,大二考过国家英语四级的人才可以带电脑。就这样,2008年秋天,我终于正大光明地连上校园网。千兆比特级别以太网直入国家主干网,中国电信、中国教育网双通道。这个规格,算是极高的。网速之快,前所未见;可是,总有一些网站访问不了。但这些小细节,终究不影响同学们DotA(一款基于Warcraft的对战地图)的热情。

  那个时候,我们愉快地上Google,查Wikipedia,学习西方先进科技。不时有好事者,会键入诸如“六四”、“胡萝卜”、“温度计”(网民用来形容胡锦涛与温家宝的指代用词)这样的神奇词汇,于是全校与Google失联十数分钟。每当到这个时候,室友们相视一笑,“哦,谁又撞墙了!”但打壶开水,泡一杯面,还不等吃完,就又可以Google了。

  那个时候的“墙”就好像霰弹枪,火力充足,但瞄不太准。一枪下去,打一大片,总是搞得“城门失火,殃及池鱼”。

墙如何运作?

  一台机器要与互联网上的其他机器对话,需要一个IP地址,好比一个人需要身份证(ID),才能唯一标识一样。否则,你喊一句话,对方不知应该回话给谁。而IP地址的总量是有限的,就好比一个大小固定的蛋糕。美国入场早,切走一大块。接着列强瓜分。等到中国的时候,还剩下点面皮。而该理工大学在这轮“圈地运动”中,只得到2个IP地址,给全校数万师生共用。这下好了,一个IP后面几万人,究竟谁在干什么,从校外是看不清的了。早期的防火墙,只能粗糙地在IP级别上执行封锁,要管束,只能全盘封了整个学校的网络。但毕竟一所国家重点高校,不可能用这种方式来管理,但不封锁,又无法向监管部门交代。

  说到底,监管当局不乏能工巧匠,他们很快想出一个办法:封杀大约4千个连续的端口(Port)。如果我们把IP地址比作一栋房子,那么端口就是出入这间房子的门。不同于真正的房子只有几个门,一个IP地址的端口可以有65536(即2的16次方)个之多。端口在一定时期内是被内网的一个用户独占,于是数据包可以准确地回到始发地。不过,封一个端口不过瘾,只是撞墙者自己倒霉而已。试想,你好不容易把野马制服了,又会有一些原本安顺的良马变野,效果不佳。最好的办法就是让它成为害群之马,以做警示。所以,一旦内网某个用户登陆Google检索“敏感信息”,这意味着一个端口“撞墙”,“墙”就把接连着的约四千多个端口都封掉,令无辜群众也无法上网。这种断网的“连坐惩罚”短则几分钟,长则十几分钟,才能恢复服务。

2010年北京:合租服务器翻墙

  3月,Google位于北京中关村的办公室楼下堆满了鲜花,网友以这种方式纪念因“遭受中国骇客攻击”和“网络审查”而决定退出中国市场的Google。

  “墙”这个概念越来越清晰,也进入了更多人的视野。2009年,Facebook和Twitter相继被封,昭示着中国政府通过防火墙阻隔国际互联网,建立“局域网”的决心——“局域网”是中国网民对墙内状况的戏称。

  “咱们合租一个VPS(Virtual Private Server)吧”,这是技术青年们见面经常谈到的话题,仅次于买房和买车。VPS即虚拟主机,向服务商租取一段时间使用权即可。以前,大家合租VPS,多是为了搭个博客,赶赶时髦。而现在,合租VPS,多是为了翻墙。

  对这些年轻人来说,“翻墙”用Google检索最新资讯,使用垃圾邮件最少的Gmail,随时查询在线百科全书Wikipedia,通过Facebook、Twitter与同行保持密切的技术资讯沟通,就像呼吸一样自然。也有更多人翻墙是要选择不同服务器进行联网游戏,或下载最新的影视内容,“翻墙”就像玩猫和老鼠的游戏。

VPS如何帮你翻墙?

  当你发一个数据包到Google或者Facebook时,防火墙可以直接识别目的IP地址而自动拦截。而前面提到的VPS,是虚拟主机,自己也有IP地址,但无公开记录其归属,难以确认是否是敌军。既然如此,我们把数据包先发到VPS,再由它中转到目的地,就成功绕开“墙”了。由于VPS的这种特性,它也被称作“跳板”。

  利用一个“跳板”绕过“墙”,正是许多翻墙软件的基本原理。曾经繁荣的翻墙软件“无界”、“自由门”,还有众多的“代理服务器”,包括后来更广泛应用的VPN(Virtual Private Network),都是借用跳板原理。VPN最早是用来帮助一个企业多地的办公室间互联,也可以让员工在异地进入公司内网,方便执行一些高权限的作业。这样一来,跨国公司天然就拥有了穿墙的隧道:数据包先发到海外办公室,再去向世界各地。所以,VPN也成了跨国公司员工翻墙的主流手段。

  这年,我第一次用“ssh -D”(一行命令)翻墙。SSH可以让系统管理员连接上主机,进行远程操作。同时它相当于在客户端与服务器之间建立了一个隧道,所以也能传输其他的数据,包括“翻墙”流量。只要这台机器的IP不在墙的“黑名单”中,也就可以成功绕过墙的封锁了。对技术人员来说,买VPS是最简单且低成本的翻墙方法。即便一台VPS被墙,再买一台即可。一年几十美元的价格,合租下来非常便宜。

敏感词触发RST,偶尔需要“向内翻墙”

  这几年,我在香港求学,当时因为研究需要,我要下载大陆某公司的中文词库,奇怪的是,无论使用何种工具,进度条总是停在70%的地方。后来分析发现,每次下载到这个位置的时候,系统就会收到一个“RST”包──“RST”是“Reset”(重置)的意思。这是一种特殊的数据包,当计算机收到这种包的时候,会重置一条网络链接。这个特点被“墙”广泛用来掐掉“不和谐”的网络链接。好比A和B正在打电话,“墙”想要掐断电话,和以前粗暴地摔电话机不同,“墙”对A说:“B挂你电话了”,同时又对B说,“A挂你电话了”,不明真相的两人就真的自己把电话挂掉了。敏感词触发RST,这种“墙”的工作机制,如今已是衆所周知。而这种监控与阻断是双向的,出入都可能撞墙。有时候在墙内需要翻出来,有时候在墙外需要翻进去。

走出国门的DNS污染

  DNS(Domain Name Service)即“域名解析服务”,功能好比是互联网上的电话簿。早期,仅通过IP来封锁服务的话,“墙”需要查看每个数据包,判断是否放行。但使用“DNS污染”技术,相当于直接给用户一个错误的“电话号码”,从源头就遏制了“不良通信”。值得注意的是,“DNS污染”这种强力武器,不仅能有效封锁国内网民对敏感内容的访问,还会连带影响其他国家。2012年,世界顶级网络通讯会议SigComm上,出现一篇匿名论文。论文发现,中国发动的“DNS污染”已经超越了国界。在测试了全球4万多个域名解析服务器后,他们发现其中26.41%的服务器受到了这种污染的影响,覆盖109个国家。

近500个实体“哨所”

  2012年,一组来自Michigan大学的研究者,对“墙”的位置进行了探测。他们发现,就像真实的长城并非连绵不断的,防火墙也并不是密不透风地“堵”在我们的“网络”上,而是一组散落各处的“哨所”,只有当发现威胁的时候,它们才用“RST”或“DNS污染”这样的方式进行干扰。截止2012年底,研究者总共探测到了近500个这样的“哨所”,在中国南方,部署数量头三位的省份为:广东(84个)、福建(29个)、湖南(28个)。

  小插曲是,研究者把探测“哨所”的工具在GitHub(世界最大的开源代码托管服务)上开源发布后,引起了激烈的争论。一些人认为,此举会激怒“墙”的管理者,导致GitHub被封锁,影响墙内程序员学习交流,所以应该删除这样的代码仓库,“保持技术社区的纯粹”。另一些人,则认为翻墙是程序员的基本技能,表示不受影响,所以力挺该项目,并极力反对技术社区加入“自我审查”的行列。

深度数据包检测

  2012年底,“墙”的总设计师、北京邮电大学时任校长方滨兴的研究团队曾发表论文“网络流量分类,研究进展与展望”,文章提到了多种使用机器学习进行“深度数据包检测”(Deep Packet Inspection,DPI)的技术。随后几年,这些先进的技术逐渐在“墙”上部署开来。

  要理解“深度数据包检测”的威力,我们可以把数据包想像成一封信。“浅度”的数据包检测,就好像是看看信封上的发件人和收件人,即决定是否放行。这给“跳板法”留下可乘之机:我们先将信送到中间站(如虚拟主机VPS),再转发到目的地,就绕过检查了。“深度”的数据包检测,可以理解成对信件内容的探查──相比起暴力打开信封,这种基于机器学习的技术更具有艺术性。它并不实际解读数据包的内容,而是搜集周边信息,对数据流进行“肖像刻划”(Profiling)。举个例子,你用Google搜索时,网络上只会有文本和少量图片经过,数据量很小,并且是突发的;但用YouTube看视频时,就会有持续一段时间的大量数据流过。“墙”的监控也是基于这样的抽象指标,比如它监控到到间歇而细小的流量,便推断你不太可能是在用YouTube。将诸如此类的可参考指标放在一起,就组成当前数据流的一副“肖像”。把这个“肖像”与数据库里面已经存放的巨量“翻墙流量肖像”和“非翻墙流量肖像”做个比对,就可以相应归类了。如所有的机器学习算法一样,这种归类会误杀一些非翻墙流量,也会错放一些翻墙流量。但日积月累,“墙”观察的样本越多,准确率也就越高。

2015年深圳:“墙”的疯狂进化

  新时代的墙,像是手术刀,精准迅速,直击命门。

  在深圳小住半年,我深刻感受到“数字围剿”的压力。随着2014年底,Gmail全面被封禁,墙进化迅速、部署增强,还配合行政措施打击翻墙势力。深度包检测的大规模部署、DNS污染的扩大、转守为攻的国家防火墙策略、ISP的深度合作——“墙”俨然是正规军,而翻墙的社区只能打一场场的游击战,越打越疲惫。

  首先,是香港的学校专用VPN开始不好使了。据传,几种主流的VPN协议已经被“墙”破解,手段十分细腻:有时候连上VPN,可以使用Google搜索和Google Drive办公,但一旦链接YouTube或者Facebook,网络链接就立马被掐掉了。 紧接着,一系列政策出台:境外VPN需要备案。像Astrill等常用的商业VPN服务,迅速被封。

  同时,“DNS污染”的范围与频度都扩大了。为了抵御“DNS污染”,我曾一度使用“DNSCrypt”——这个开源项目会加密客户端和服务器之间的通信内容,不被墙查探到。然而好景不常在,很快,“墙”将已知的DNSCrypt的服务器IP计入黑名单,这样连访问DNSCrypt的服务器也是需要“翻墙”了……有段时间,我依赖SSH+DNSCrypt翻墙。但这套组合拳,最终打在墙上只 是手疼,而墙还是泰然自若。

  更有甚者,一些二级ISP(不自建主干网,但提供社区宽带接入到主干网服务的ISP)参与了合作,封禁“非常用”的DNS地址。家庭宽带用户,只能选择ISP默认分配的DNS,或者一些“广为人知”的DNS服务器,如Google多年前提供的8.8.8.8(该服务器的IP地址)就是其中之一。“4个8”曾经是大陆网民用来抵御“DNS污染”的缓冲剂,但它使用普通DNS协议,很容易被攻击。社区很快发现,“墙”会选择性地污染8.8.8.8返回的结果。

  “DNS污染”、“RST攻击”、“深度数据包检测”——“防火长城”的一套立体防御体系已经建成。从左到右,精准度逐渐加大,防御成本也逐渐加大。这个时候,不管使用什么VPN,最常见的现象是,翻墙几分钟后,网络延迟加大,进而链接被阻断,导致日常工作都不能正常进行。

  “进攻是最好的防守”——2015年3月,国家防火墙突然转守为攻。这是一种与“防火长城”(Great Fire Wall,GFW)部署在一起的设备,网友戏称其为“大加农炮”(Great Cannon,GC)。经过3月初的一系列测试,“大炮”从3月中旬开始发动疯狂攻击,其首轮攻击的重点目标之一是GitHub上“greatfire”这个代码仓库。“greatfire”上集结了大量的翻墙工具与资讯,俨然一个巨大的“翻墙军火库”。“大炮”攻击目标的原理简单而有效:它会劫持跨越中国边境的流量,注入恶意脚本,向指定目标发动“DDoS攻击”。

DDoS

  DDoS(Distributed Denial of Service,分布式拒绝服务),是一种通过巨大流量导致目标服务器不堪重负而下线的攻击手法。DDoS是一系列方法的统称,他们使用不同的技术,“大炮”所使用的流量劫持并注入恶意脚本的技术是一种比较新的形式。衡量一场DDoS攻击的能量,可以使用“峰值速率”。如2014年6月,香港的公民投票网站“PopVote”受到超过“300Gbps”的攻击,连提供网络支持服务的Google和Amazon都抵挡不住,宣布退出,最终服务商靠着全球网络服务业者联手,才维持“占中”公民投票持续进行。2015年7月,支持加密功能的即时通信软件Telegram受到超过“200Gbps”的攻击,受影响区域很快从东南亚蔓延到全球,导致大量用户无法通信。要知道100Gbps的流量有多大,可以想像同时在线点播两万部高清(720p)视频。也可以参考的一个数据,据CNNIC报告显示,截至2014年底,中国大陆的所有国际出口带宽总和为4100Gbps。

  “墙”转守为攻的这一异常举动,是一个明显的信号,希望GitHub删除“有威胁”的代码仓库。最终,在巨大的舆论压力下,“大炮”停止了攻击。在墙的攻防体系中,“大炮”虽然不直接设防,但它对墙外的“反动势力”是一种威慑的的存在——必要的时候,随时可以出击。   在“墙”的拼命围剿之下,传统翻墙手段逐一失效。原因很简单:主流方法都有特定的模式,逃不过基于机器学习的“深度包检测”技术。机器学习的准确性是随着样本增加而提升的,所以要逃离“墙”的围剿,就得把自己的流量伪装得不一样。海外专业VPN服务Astrill,以及国内的“曲径”、“红杏”等后起之秀,都是通过打造私有协议,来绕过检测。

  ShadowSocks提供的其实是一套框架,支持多种加密方式,可以监听不同的端口,只需要很简单的配置,就可以在客户端和跳板机之间建立一条隧道。这些特点,让SS成为“游击队员”们最喜爱的工具。作为一款“非主流”的工具,SS曾经是非常有效的翻墙手段。但从15年初开始,深圳的部分ISP已经部署针对SS的阻断系统——推测是基于同一套“深度包检测”技术。好在SS的参数衆多,随便调整一下,即可生成不同的“肖像”,令“墙”在观测不足的情况下,无法迅速动手。但随着时间推移,“墙”总会搜集到足够的样本。刚开始的时候,选一套SS的参数可以坚持几个星期,到后来,就只有几个小时了。但墙一天不倒,游击战就一天不停。换密码、换加密协议、换端口,如每天吃饭一样,逐渐变得规律。实在不行,就只有换IP了,即再买一个VPS。SS的高级玩家,会加入自己定制的加密模块,使得流量更隐蔽。总之,SS是一个开源项目,玩法多种多样,打游击的优势巨大。

  2015年香港:遥看墙内围剿“造梯人”   还有太多重要的事情要做,不能将时间浪费在与“墙”无休止的游击战中——我决定搬回香港。   而墙内,一场密谋已久的围剿,终于显露。   8月20日,ShadowSocks作者在GitHub上关闭了相关项目的Issue面板并清空所有帮助信息,同时GitHub上“shadowsocks”组织的成员信息被隐藏。

  8月21日,那啥Agent(一款曾经主流的翻墙软件,托管在Google Code)的论坛上传出SS作者“被喝茶”的消息。

  8月22日,ShadowSocks作者现身GitHub,证实“喝茶”,并删除了代码库。

  8月25日,Google Code转为只读状态,那啥Agent论坛散落。

  8月25日,那啥Agent托管在GitHub上的仓库被删。

  8月25日,GitHub受到超过两个小时的DDoS攻击,攻击源目前不明。

  8月26日,多处消息源显示,曲径、红杏等大陆多家VPN服务商受到直接或间接的压力,停止服务。

  ……

  以前干掉的是制造和售卖梯子的人,现在连设计梯子的人也要干掉。

  未来会如何呢?可以想像,大规模的VPN服务会消失;一些小规模的地下服务,继续运行。另一方面,翻墙工具链,势必会持续升级。公开的成熟项目被封后,社区会衍生出不同变种,以适应“墙”的改变。特别是像SS这样的开放框架,稍作修改,又是一种玩法,无穷无尽。但没了牵头的人,没了集中的论坛,知识传递的形式将会反古。原本,互联网让知识可以扁平传递,现在“屠梯”行动恐将人们逼回“口耳相传”的模式。未来,“翻墙”可能是一种手艺,如何传承,任重道远。