西厢计划–技术简介
GFWRev大牛推出的最新翻墙利器,取名于《西厢记》—其命名是为了向中国古典文学史上翻墙的先驱者张某致敬,具有中国式的革命和浪漫主义!
西厢计划提供一组工具,使得用户在一次设置之后,能够以普通程序直连目标网络,而避免GFW的大部分影响。其命名是为了向中国古典文学史上翻墙的先驱者张某致敬。西厢计划现在已经达到alpha可用状态,在初步的测试中可以让用户以普通浏览器无障碍地直连Youtube。
西厢计划–技术特性
西厢计划要解决GFW造成的两个方面的问题:TCP连接重置和DNS劫持(污染)。为此西厢计划提供了两种特性:
TCP连接混淆
在每次连接中,通过对GFW的入侵检测系统进行注入,混淆连接,使得GFW无法正确解析连接和检测关键词,从而在有关键词的情况下也避免连接重置。
反DNS劫持
通过匹配GFW伪包的指纹并将其过滤,让用户以普通的客户端也能获得正确的解析结果。(用户需要设置DNS为没有被污染的DNS,例如8.8.8.8等)。
西厢计划–技术价值
西厢计划不是代理,不是VPN,无需加密,使用时不需要第三方支援,不需要绕道,让用户能够以最优的性能直连目标,使用时不需要运行特别的程序。西厢计划利用现有工具,仅要求用户能够使用iptables进行快速配置,学习难度低。
西厢计划目前能够让用户直连 Youtube和其他Google服务,还有更多潜力可以发掘。
西厢计划–原理简介
西厢计划采取了T. Ptacek等在1998年的论文Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection中提出规避入侵检测的注入方法。注入法是指发出特制报文,使得这些报文对对方没有效果,但是让IDS错误地分析协议,从而让IDS错误地认为连接被提前终止了。由于GFW的TCP栈非常简陋,因此我们可以直接利用GFW的TCP栈的特性,对任何遵守RFC的目标主机都采取特定特殊措施,让GFW无法正确解析TCP连接,从而避免关键词监测。
西厢计划–局限性
西厢计划的连接混淆功能对于基于IP地址的封锁和其他无状态的封锁不能生效,因为它需要通过注入攻击改变GFW的连接状态,如果封锁与连接状态无关便无法进行连接混淆。另外,连接混淆的实现假设连接双方遵守RFC。有一些目标主机或者防火墙不遵守RFC,可能导致正常不含关键词的连接被对方终止或者忽略。因此我们特别使用ipset,把作用范围限制在需要的地址段(比如Google),以避免不必要的问题。 西厢计划目前依赖linux内核的netfilter功能,因此要求用户平台是linux,暂时没有移植。之前有一个基于 WinPcap的版本可以在MinGW32环境下编译运行,实现了连接混淆的部分,未实现反DNS劫持的部分,用户仍然可以试用,但不再维护。 西厢计划所用的GFW伪包指纹可能在此项目发布之后被GFW更改,因此用户可能需要使用最新的版本才能让功能生效。
西厢计划–安装配置
“西厢计划“是振奋人心的消息, 穿越GFW基本上各种类型的方法都用过, 每每穿墙都有一种莫名的快感, 作为新世纪的有志青年, 翻墙已经成了一种必须掌握的技能. 俗话说得好, “不会翻墙的网民不是好公民.” ,“西厢计划“不同于以往的所有翻墙技术,”西厢计划“的优势在于可以用最直接的方式访问网站, 比如平时用的代理、VPN都是先到另一个地方绕一圈, “西厢计划“直接注入GFW系统,当你访问敏感词网站时, GFW就变得像个傻子一样, 根本不会进行重置操作, 从而以最快的速度访问网站。
目前只能在Linux系统中进行使用, 且要求内核版本大于等于2.6.17, 下面是我在Ubuntu中安装配置的全过程.
安装
到这里下载安装文件, 解压进入目录. 先安装一些依赖软件:
$ sudo apt-get install autoconf automake libtool aptitude xtables-addons-common iptables-dev
接下来开始编译加安装:
$ ./autogen.sh $ CFLAGS=”” ./configure –prefix=/usr –libexecdir=/lib $ make $ sudo make install
配置
在安装文件的“examples”目录中有一些已经设定好的ipset规则, 这些规则用来过滤那些特定的网络访问, 先导入所有规则: $ sudo ipset -R < CHINA $ sudo ipset -R < GOOGLE $ sudo ipset -R < YOUTUBE $ sudo ipset -R < NOCLIP 再使用iptables设定具体的过滤规则: $ sudo iptables -A INPUT -p tcp –sport 80 –tcp-flags FIN,SYN,RST,ACK SYN,ACK -m state –state ESTABLISHED -m set –match-set NOCLIP src -j ZHANG -m comment –comment “client-side connection obfuscation” $ sudo iptables -A INPUT -p tcp –dport 80 –tcp-flags FIN,SYN,RST,ACK SYN -m state –state NEW -j CUI -m set –match-set CHINA src -m comment –comment “server-side connection obfuscation” $ sudo iptables -A INPUT -p tcp –sport 80 -m state –state ESTABLISHED -m gfw -j LOG –log-level info –log-prefix “gfw: ” -m comment –comment “log gfw tcp resets” $ sudo iptables -A INPUT -p udp –sport 53 -m state –state ESTABLISHED -m gfw -j DROP -m comment –comment “drop gfw dns hijacks” 最后修改主DNS, 在“/etc/dhcp3/dhclient.conf”文件中找到“prepend domain-name-servers”, 将后面的IP替换为没有被感染的DNS地址, 比如“8.8.8.8”, 重启网卡: $ sudo ifconfig eth0 down $ sudo ifconfig eth0 up 大功告成! 打开浏览器, YouTube、Blogger、Picasa、Google Groups、Google Docs的Spreadsheet这些都已是畅通无阻, Twitter、Facebook需要手动配置规则。
西厢计划–创建宣言
“作为个搞技术的人,我们要干点疯狂的事。如果我们不动手,我们就要被比我们差的远的坏技术人员欺负。这太丢人了。眼前就是,GFW这个东西,之前是我们不抱团,让它猖狂了。现在咱们得凑一起,想出来一个办法让它郁闷一下,不能老被欺负吧。要不,等到未来,后代会嘲笑我们这些没用的家伙,就象我们说别人“你怎么不反抗?”