防火长城(Great Firewall of China,GFW)
目录 |
防火长城也称中国国家防火墙,,是对中国政府在其互联网边界审查系统(包括相关行政审查系统)的统称。此系统起步于1998年,其英文名称得自于2002年5月17日Charles R. Smith所写的一篇关于中国网络审查的文章《The Great Firewall of China》,取与Great Wall(长城)相谐的效果,简写为Great Firewall,缩写GFW。随着使用的拓广,中文“墙”和英文“GFW”有时也被用作动词,网友所说的“被墙”即指被防火长城所屏蔽。
一般情况下,防火长城主要指中国政府监控和过滤互联网国际出口上内容的软硬件系统的集合。例如监视系统就曾与美商合作,构建类似美国的棱镜项目的深度侦查机制,但中国政府并进一步设置将查获的特定网点阻断等,造成大家所熟知的连接错误现象,因此防火墙不是中国特有的一个专门单位,是由分散部门的各服务器和路由器等设备,加上相关公司的应用程序所构成,是一个跨军民合作的大型信息管制系统,实际上就如大多数国家也会创建网络监管一样。不过其他政府的管理仅止于金融洗钱、国际诈骗等犯罪行为,与中国的审查机制有着相当大的不同。防火长城的作用主要是监控国际网关上的通讯,对认为不匹配中共官方要求的传输内容,进行干扰、阻断、屏蔽。由于中国网络审查广泛,中国国内含有“不合适”内容的网站,会受到政府直接的行政干预,被要求自我审查、自我监管,乃至关闭,故防火长城主要作用在于分析和过滤中国境外网络的信息互相访问。
原理:防火长城对所有经过骨干出口路由的在UDP的53端口上的域名查询进行IDS入侵检测,一经发现与黑名单关键词相匹配的域名查询请求,防火长城会马上伪装成目标域名的解析服务器给查询者返回虚假结果。由于通常的域名查询没有任何认证机制,而且域名查询通常基于的UDP协议是无连接不可靠的协议,查询者只能接受最先到达的格式正确结果,并丢弃之后的结果。用户若改用TCP在53端口上进行DNS查询,虽然不会被防火长城污染,但可能会遭遇连接重置,导致无法获得目标网站的IP地址。
原理:相比起之前使用的访问控制列表(ACL)技术,现在防火长城采用了效率更高的路由扩散技术封锁特定IP地址。正常的情况下,静态路由是由管理员根据网络拓扑或是基于其它目的而给出的一条路由,所以这条路由最起码是要正确的,这样可以引导路由器把数据包转发到正确的目的地。
而防火长城的路由扩散技术中使用的静态路由其实是一条错误的路由,而且是有意配置错误的,其目的就是为了把本来是发往某个IP地址的数据包统统引导到一个“黑洞服务器”上,而不是把它们转发到正确目的地。这个黑洞服务器上可以什么也不做,这样数据包就被无声无息地丢掉了。更多地,可以在服务器上对这些数据包进行分析和统计,获取更多的信息,甚至可以做一个虚假的回应。这些错误静态路由信息会把相应的IP数据包引导到黑洞服务器上,通过动态路由协议的路由重分发功能,这些错误的路由信息可以发布到整个网络。这样对于路由器来讲现在只是在根据这条路由条目做一个常规数据包转发动作,无需再进行ACL匹配,与以前的老方法相比,大大提高了数据包的转发效率。
原理:防火长城配合上文中特定IP地址封锁里路由扩散技术封锁的方法进一步精确到端口,从而使发往特定IP地址上特定端口的数据包全部被丢弃而达到封锁目的,使该IP地址上服务器的部分功能无法在中国大陆境内正常使用。
原理:防火长城会监控特定IP地址的所有数据包,若发现匹配的黑名单动作(例如TLS加密连接的握手),其会直接在TCP连接握手的第二步即SYN-ACK之后伪装成对方向连接两端的计算机发送RST数据包(RESET)重置连接,使用户无法正常连接至服务器。这种方法和特定IP地址端口封锁时直接丢弃数据包不一样,因为是直接切断双方连接因此封锁成本很低,故对于Google的多项(强制)加密服务例如Google文档、Google网上论坛、Google+和Google个人资料等的TLS加密连接都是采取这种方法予以封锁。
从2015年初开始,RST重置已被实时动态黑洞路由替换。
在连接握手时,因为身份认证证书信息(即服务器的公钥)是明文传输的,防火长城会阻断特定证书的加密连接,方法和无状态TCP连接重置一样,都是先发现匹配的黑名单证书,之后通过伪装成对方向连接两端的计算机发送RST数据包(RESET)干扰两者间正常的TCP连接,进而打断与特定IP地址之间的TLS加密连接(HTTPS的443端口)握手,或者干脆直接将握手的数据包丢弃导致握手失败,从而导致TLS连接失败。但由于TLS加密技术本身的特点,这并不意味着与网站传输的内容可被破译。
TCP重置是TCP协议的一种消息,用于重置连接。一般来说,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的TCP协议栈就会给客户端回复一个RESET通知消息,可见RESET功能本来用于应对例如服务器意外重启等情况。
防火长城切断TCP连接的技术实际上就是发送连接重置消息。对于防火长城而言,发送连接重置数据包比直接将数据包丢弃要好,因为如果是直接丢弃数据包的话客户端并不知道具体网络状况,基于TCP协议的重发和超时机制,客户端就会不停地等待和重发,加重防火长城审查的负担,但当客户端收到RESET消息时就可以知道网络被断开不会再等待了。而实际上防火长城通过将TCP连接时服务器发回的SYN/ACK数据包中服务器向用户发送的序列号改为0从而使客户端受骗认为服务器重置了连接而主动放弃向服务器发送请求,故这种封锁方式不会耗费太多防火长城的资源而效果很好,成本也相当的低。