GFW
注:本文只供研究学习网络技术使用,请读者在24小时内忘记本文内容,仅此而已。
0x00
存在便有意义,无论消极或是积极。
GFW(Great Firewall(Of China)),通常意义上的GFW即指政府通过某些手段达到对境外或者国内互联网内容的审查与封锁的机制。其名称的由来便是发布于2002年的篇文章。The-Great-Firewall-China
积极意义
首先,国际互联网上确实存在或多或少的影响国内局势稳定的内容,包括但不仅限于某些蓄意造反企图谋害浏览者心智的内容,屏蔽这些内容成为GFW的首要任务。其次,某些不适合用户访问或者造成消极影响的内容同样受到GFW的照顾。
消极意义
很多内容倘若不借助国际文献的支持,很难具有说服力,此时使用百度就毫无意义了。。。而优秀的搜索引擎,常常处于被封状态,因此消息十分闭塞。一些开发者或者同样需要访问这些网站来获取最新信息,(不要误会,主要是查报错QWQ)此时的封禁显得没有什么必要。(省略了某些不合时宜的内容。)
0x01 手段(主要)
DNS污染
IPV4
对所有经过GFW上的在UDP的53端口上进行的解析进行检查,同时与黑名单进行对比。当发现与之对应的请求出现,就发包至请求发送方,发送方只能得到错误解析信息。再加之UDP协议传输的不可靠性,客户端将错误的信息在浏览器上反映,从而解析到错误的网站。
全球共有13个根域名服务器(受限于UDP包的长度,只能容纳13组响应地址),其中中国拥有三个根域DNS镜像F I J。之前由于解析问题,I根域服务器曾与国际互联网断开连接。
IPV6
中国大陆此前部署了IPV6根服务器(首选DNS:240c::6666,备用DNS:240c::6644),虽然目前根服务器没有受到污染,但是嘛。。。迟早的事。因为此前就已经有一批IPV6地址被封,推进IPV6建成,就必须要让GFW日臻完善。
IP封锁
GFW的网络管控方法是利用了OSPF等路由协议的路由重分发(redistribution),出口处配置一条错误的静态路由,通过OSPF或是IS-IS等动态路由协议来重分发这条静态路由。
GFW在流量出口的最后一个网关加上一条伪造的路由规则,此时的流量被传播到下一个路由器,而下一个路由器同样执行错误的路由规则,将流量继续转发,而此时的流量进入了错误的路径,发往某个IP地址的数据包被引导进一个“黑洞路由器”,达到完全丢包。即,动态黑洞路由。
端口封锁即在IP封锁上,进一步精确。
常见被封端口(摘自维基百科):
·SSH的TCP协议22端口
·HTTP的80端口
·PPTP类型VPN使用的TCP协议1723端口,L2TP类型VPN使用的UDP协议1701端口,IPSec类型VPN使用的UDP协议500端口和4500端口,OpenVPN默认使用的TCP协议和UDP协议的1194端口
·TLS/SSL/HTTPS的TCP协议443端口
·Squid Cache的TCP3128端口
TCP关键字阻断
TCP重置是TCP的一种消息,用于重置连接。一般来说,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的TCP协议栈就会给客户端回复一个RESET通知消息。
当防火长城收到来自黑名单的TCP请求时,会直接发送一个reset消息,以伪装服务器出现意外的状况,此时浏览器会收到返回包并显示连接已重置,客户端也同时停止发包。
此时的对比包括但不仅限于对HTTP头部请求的检测,HTTPS的证书检测(公匙明文传输),eD2K协议的检测。
深度包检测
深度数据包检测(Deep packet inspection,DPI)是一种于应用层对网络上传递的数据进行侦测与处理的技术,被广泛用于入侵检测、流量分析及数据挖掘。
在国内(ISP手中),这种技术主要被用来追踪用户并进行定向广告推送。由于识别可疑流量的精准度很高,因此有望借助神经网络堆网络流量识别做出一定贡献。
深度包检测可以算作是GFW较为高明的检测手段,包括对内容及协议的检测。已知的文献并不多,但可以肯定的一个关键词便是“阅后即焚”,所有涉及此关键词的内容,会发生有意思的变化。对于协议的检测这主要针对OPENVPN,SS等代理软件的协议检测,通过分析协议特性来确定是否发送重置消息。
出口封锁
访问国际互联网时,必定与要经过海底光缆,而这些光缆在某些特定时期,会使用“白名单”进行拦截,甚至完全切断出口。
2009年7月5日,乌鲁木齐七·五骚乱,所有外网通道全部切断,甚至国内网络也短暂切断。
2012年10月下旬,Google位于北京的服务器被国家级骨干路由器长时间干扰连接。
2011年5月6日起,中国大陆境内很多互联网公司以及高校、学院、科研单位的对外网络连接都出现问题,包括中国科学院。
0x02 措施
(摘自Wikipedia)
存在GFW,必有其应对措施,而我只介绍目前使用最广泛的手段。(某些不可抗力)
Shadowsocks,及其衍生物ShadowsocksR,简称SS和SSR。原版(SS),基于Socks5代理的加密传输协议,目前SS的项目托管在github,作者clowwindy。
该协议要求客户端运行local.py,而海外服务器运行server.py,本地服务使用1080端口。
1,要访问海外网站时,会与localhost进行基于socks5的对话。
2,localhost:1080将访问的流量加密为普通TCP流量。
3,流量经过GFW,由于没有明显的协议特征,而被视为合法流量。
4,当server端收到来自client端的请求时,会访问被封禁的网站。
5,server端再将流量加密传回client端。
6,client端接收到加密流量并解密。
后来的ShadowsocksR在此基础上添加了一些数据混淆,提高了安全性,数据混淆也曾被用来“免流”。
至于安装方法嘛,买一台没有被墙的服务器,运行下脚本即可(懒人QAQ),我是推荐teddysun的脚本~
先wget下载脚本到本地
1 | wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR.sh |
再对脚本增加执行权限1
chmod +x shadowsocksR.sh
最后执行脚本1
./shadowsocksR.sh 2>&1 | tee shadowsocksR.log
至于对服务的操作嘛(启动 停止 重启 状态)1
/etc/init.d/shadowsocks start | stop | restart | status
(脚本来自https://shadowsocks.be/9.html)
0x03 碎语
无论是否喜欢这堵墙,它都存在,而我们能做的,只有绕开它,井水不犯河水而已。emmm,不过还是建议有看法的人不要过于冲动2333。
顺便贴一张gfwlist涉及国域的分布图
如果你对GFW的深层运作方式有兴趣的话,建议你去看看大佬们的文章,我所写的这篇文章,充满了自己的理解,QAQ应该有不少理解有问题的地方。
贴几个大佬们的链接:(大部分要翻出去查阅)
(ps:文章中部分图片摘自网络,如有侵权,请联系删除)
本文标题:GFW
文章作者:Raincorn
发布时间:2018-07-20
最后更新:2020-07-28
原始链接:https://blog.raincorn.top/2018/07/20/QWQ/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可