Internet网络浏览的监听、拦截和过滤-浅析GFW原理

我国网络界“和”风劲吹,GFW威力无边,网民不断抱怨网站被“墙”,这固然是制度、利益等政策性原因导致的,我们这里就不多言政治了,仅仅对相关技术问题探究一二。

据我所知,网络浏览的拦截无外乎下列三个方式:IP过滤、内容过滤和DNS劫持。这些过滤的前提就是浏览者“浏览”动作的相关IP报文均能被拦截者截获和分析。这一前提对于ISP来说是天然成立的。

先简单介绍一下一次浏览网页的技术流程。用户在终端上使用浏览器(IE、Firefox等)向网页服务器(例如IIS、Apache等等)发出一个HTTP协议的请求报文(一般是一个HTTP的GET或POST请求),这个请求报文中指明了浏览器想要获取的网页内容,网页服务器收到这个请求后把相应访问结果以HTTP响应的方式发回给浏览器(例如状态码200表示成功,404表示网页不存在,等等类似的一系列状态),而且如果是可正常处理的访问请求,就把用户请求的网页内容(一般就是HTML字符串)发送回用户的浏览器,浏览器收到之后,将HTML字符码解释后以网页的形式呈现在用户面前。当然,这一系列HTTP协议的交互是以TCP连接为通道通信的,TCP连接的建立和维护是这一切的基础和前提。

假如用户终端和网页服务器的TCP连接通道之间存在防火墙等类似的设备,这些设备就可以截获这个TCP连接的建立,乃至其上承载的HTTP交互动作,用户和服务器之间的任何HTTP通信都没有秘密可言,防火墙可以决定整个浏览过程的各个方面。

一、IP过滤(封IP)

拦截者(防火墙)截获了浏览者的HTTP请求,发现浏览器请求的网站的IP是“非法”、应该被禁止访问的,就可以直接丢弃掉(这样网页服务器就不能收到)这个请求,然后防火墙再分别把浏览器和网页服务器之前建立的TCP连接断开(可通过TCP的RST报文实现,实际上,TCP连接的建立也是在防火墙的监管下进行的)。对用户的每次请求都进行这样的处理,这样一来,搭建在这个IP地址上的网页服务器的所有网页就都无法访问到了。

二、内容过滤

网页服务器收到浏览器的请求后,会将自己的服务内容(网页内容)发回给浏览器,这时,位于浏览者和网页服务器之间的防火墙截获这一内容(一堆字符串),一旦发现这些内容有“非法”信息,丢掉这一内容报文,RST掉两端的TCP连接,这一含有“非法”内容的网页就不能被访问到了。

三、DNS劫持

浏览者访问网站时,一般是使用网站的域名来访问,也就是说,以这个域名为目的地建立前面提到的TCP连接、再发送HTTP请求报文等。但是TCP和HTTP这些IP报文,实际上是以IP地址来访问目的服务器主机的,所以,浏览器终端首先要把这个域名转换为IP地址。这个转换过程是通过DNS协议来进行的。浏览器发起DNS请求,问DNS服务器“这个域名的IP地址是多少?”,DNS服务器回应“这个域名的IP是xxx.xxx.xxx.xxx”。然后浏览器得到目的IP地址后,就可以如前面介绍的那样继续后面的浏览过程了。首先,网络服务商(ISP)给浏览器自动分配的DNS服务器是可以“捣乱”的,它提供的DNS服务是否“可靠”关系到DNS的结果;另外,防火墙当然可以截获浏览器终端和DNS服务器之间的 DNS报文(防火墙无所不能,因为它处于我们和服务器之间,我们与外面交互的所有报文都经过它),所以它可以让你获得不到这个IP地址,也可以给你假的IP地址!剩下的就不用多说了吧…

应对之策:

首先,孙猴斗不过如来,因为猴子永远在佛祖的手中。用户使用ISP的网络,就不可能有ISP对付不了的手段。

对于IP过滤,简单直接,封一个IP就换一个IP。

对于内容过滤,网页服务器提供HTTPS访问支持的话,浏览器用https方式访问网页服务器,所有的报文都是ssl方式加密的,那防火墙虽然可以截获报文,但是它无法“看懂”,也就无法过滤。浏览者拨入专用的VPN网络的技术也是在此范畴之内。

对于DNS劫持,可以不使用ISP提供的DNS而自己指定更可靠的DNS,另外,浏览终端的操作系统也可以跳过DNS解析这一步,例如HOSTS文件等。

另外,如果浏览者可以找到并使用合适的代理服务器(就是一个位于防火墙和网页服务器之间的服务器主机),浏览者就可以通过这个代理服务器跳过某些防火墙的封锁。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>