设计一种基于反向代理的 Web 资源访问控制系统

高国柱 蒋东兴 金磊 汤荷美

( 清华大学计算机与信息管理中心,北京 100084 , ggz@cic.tsinghua.edu.cn)

 

: Web 是信息发布的重要途径,如何保证 Web 资源在允许用户正常访问的同时不被恶意下载,是一件非常棘手的事情。我们设计的 Web 资源访问控制系统,采用反向代理技术,实现了对用户访问 Web 资源的控制。本文介绍了该系统的功能、模型与关键技术。

关键词 :访问控制;反向代理;负载均衡

 

Design a Web Resources Access Control System Based on Reverse Proxy

Gao Guozhu, Jiang Dongxing, Jin Lei, Tang Hemei

( Computer & Information Management Center of Tsinghua University , Beijing 100084)

 

Abstract : Web is a main way of information delivery. However, it is a rather difficult matter to keep the Web resources out of hostile downloading, and, meanwhile to permit normal access from users. In our Web resources access control system, the technology of reverse proxy is introduced, and thus, the capability of access control for the Web resources is realized. In this paper, the functions, model and key technologies of the above-mentioned system are presented.

Key words : access control, reverse proxy, load balancing

1 引言

   在 Internet 环境下, Web 是发布信息的最常用途径,如: HTML 文档、图片、电子书籍等多种信息资源。目前大多数 Web 资源对用户的访问是没有任何限制的,但随着 Internet 的不断发展,对 Web 资源的保护成为急待解决的问题。比如对一些电子图书、 mp3 等服务提供商,他们允许用户从正常使用信息资源,但不允许大肆下载。但如果不加限制的话,就等于默认了少数人的蓄意盗版行为,因此要需要一个既不影响用户的正常下载行为同时又能防止少数人恶意下载的一个访问控制系统;还有这些服务提供商也需要对用户的访问行为做较为详细的记录,从中分析出一些有用的数据来为他们的服务提供参考。针对以上问题我们设计实现了一个基于反向代理( reversed proxy )技术和负载均衡技术的 Web 资源访问控制系统。

2 系统设计

2.1 运行模式

   对于一个已有的 Web 系统来说,要实现对其资源的访问控制主要有两种途径。一种是在其内部增加访问控制模块,另外一种就是在原有系统外部增加对 Web 访问进行控制的系统。其运行模式主要有两种方式,如图 1 所示。

 

 

   第一种运行模式是在原有的 Web 系统上做二次开发,在原有的服务器内部增加新的访问控制模块,从而对传入 HTTP 请求进行过滤,这种模型的优势在于没有硬件投资,不会造成瓶颈,若 HTTP 服务可改写的话,开发单个控制模块的工作量也不大。缺点是针对不同的系统要开发相应的访问控制模块。而且访问控制系统跟原有的操作系统及 HTTP 服务系统有关,同时,这种运行模式也会带来服务器效率等负面影响。

   第二种运行模式是在原来的服务器系统外增加新的访问控制系统。该系统与原有服务器系统是完全独立的,所以不需要对服务器端进行任何改动。另外,访问控制系统的作用实际上是一个应用层的防火墙,对反向代理服务器的攻击并不会使得网页信息遭到破坏,大大增加了原有系统的安全性。它的缺点也是显而易见的:首先是增加了一个主机,硬件投资增加。其次是在对大量主机进行控制的时候,访问控制服务器的负荷较大,有可能造成瓶颈。但这种运行模式可以实现对一个机群的控制,并进行负载均衡。

   比较两种运行模式,我们可以看出,开发独立于服务器的访问控制系统,不仅具有很大的通用型,而且还可以同时实现负载均衡、防火墙等功能,具有很高的应用前景。特别地,对于一些服务提供商来说,有些资源是代理其他专业资源提供商的,资源本身就不在自己的控制范围内,第一种模式就更是无法实施了。

2.2 功能设计

   系统功能设计的原则是不能影响用户的正常访问,对合法访问的用户来说感觉不到控制系统的存在。系统的主要具体功能如下:

•  监测用户网络请求行为、即时禁止用户的恶意下载行为;

•  实现统一身份认证,用户与 IP 对应,可以追查用户身份;

•  提供详细的日志记录,包括用户名、 IP 、时间、访问地址等信息;

•  具备应用型防火墙功能,增强了内部主机的安全性;

•  可以进行负载均衡;

•  提供友好的管理界面。

3 系统结构

3.1 系统模型

    Web 资源访问控制系统主要由代理模块、控制模块、认证模块和日志处理模块组成,其结构如图 2 所示。

 

 

 

3.2 代理模块

   通常的代理服务器,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 http 请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在 Internet 上搜寻多个不确定的服务器,而不是针对 Internet 上多个客户机的请求访问某一个固定的服务器,因此普通的 Web 代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务(也称为逆向代理)。

   本系统中,代理模块对用户来说表现为一个 Web 服务器,其核心就是一个反向代理服务器。与通常的 Web 服务器不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者 CGI 程序,都保存在内部的 Web 服务器上。用户访问受控资源实际上是先访问代理服务器的 Web 服务,由代理服务器处理用户请求,然后向实际的服务器发送请求,再将应答转发给客户。代理模块也记录了控制模块所定义的用户访问行为,并把它写到一个日志文件中去。

3.2 控制模块

   控制模块是系统核心模块,它主要功能是实时控制代理服务器的工作。对每次用户的访问请求,控制模块首先判断这个用户是否合法、判断它的 IP 地址是否合法。在这里判断合法的依据主要是以前有没有恶意访问的记录,同时也依据一些事先设定好的控制策略。通过设置受控对象来控制代理服务器记录、控制用户对 Web 特殊资源的访问。通过设置阀值参数可以设定日志如何分析(例如间隔多长时间分析一次)、如何判断访问请求是“恶意”的等。

   该模块也为系统提供了统一的管理界面,给管理员提供服务接口。管理员可以通过它来制定服务器的控制策略,修改一些服务器配置参数,如手动限制某些用户或者 IP 的访问等。

3.3 认证模块

   认证模块的是系统的一个可选模块(对于只需要实现基于 IP 地址的控制的系统,不需要认证服模块)。由于用户是通过 Web 来访问反向代理服务器的,因此可以通过 Http 协议来实现对用户的认证。系统通过修改 Web 服务器( Apache )源代码,把接受用户的认证信息发送到一个认证服务器,并接受认证结果。

3.4 日志处理模块

   日志处理模块主要完成日志记录与分析,每隔一定时间,对代理服务器的日志文件进行处理,分析用户( IP 地址)的访问行为,并通过数据库接口写入数据库。日志分析进程对数据依据一定的规则对进行整理、分析,在此基础上,生成控制模块需要的特殊 IP 地址列表、特殊用户列表等控制参数。同时也可以生成一些管理员关心的其他信息。

4 关键技术研究与实现

4.1 控制策略的研究

   通过反向代理服务器,可以记录用户所有的访问行为,但这也会带来系统资源相当大的额外开销。但对于不同的服务器来说,其保护的资源类型是有限的,我们只需要记录、控制用户对我们所关心的资源的访问即可。比如对一个 mp3 服务提供商来说,只需要控制用户对 .mp3 文件的请求次数即可。

   从用户访问的角度来分,非法访问主要有以下两个方面:瞬间恶意多次请求和长时间持续攻击。针对这两种情况我们制定了以下控制策略:

1) 对抗瞬间恶意攻击

   这种情况是恶意的网上用户使用多线程访问同一资源,或者是在短时间内访问多个资源。对于第一种情况,可以定义一个参数 m ,即同一用户同时访问的线程数量,若超过这个数量,则将他的请求暂缓发出或者废除他的请求。为了对付第二种情况,访问控制系统应定义两个参数,一个是时间 t ,以秒为单位。第二个是资源个数 g 。用这两个参数确定一个规则 r ,即 r=F(g, t) 。 r 的含义就是最多允许网上用户在 t 秒内访问 g 个资源。同时,规则 r 可以有多条,这样为精确控制带来方便。

2) 对抗长时间持续攻击

   用上面提到的规则 r=F(g, t) 也可以对抗长时间持续下载。这里再定义一种规则 k=F(t1,t2) 。 t1 、 t2 都是时间长度,以秒为单位。 t1 是最长持续时间。 t2 是判断用户是否连续访问的间隔时间。例如可以规定网上用户连续访问一类资源 3 小时(参数 t1 ),若有 8 小时(参数 t2 )未访问此类资源,则可认为用户是重新开始访问。

   将 t1 、 t2 定义的比较长并不能防止恶意用户定时攻击。比如他为了不违反上面的规则,就每隔 8 小时下载 3 个小时。对付这种情况,可以定义多条 k 规则,例如用户每访问 3 分钟就必须休息 1 分钟;每访问 10 分钟必须休息 3 分钟等。

4.2 反向代理的实现

   反向代理是访问控制系统最核心的部分,其核心技术就是地址转换。通过它可以保证使用者对客户端计算机不进行任何设置的情况下就使用访问控制系统。从外观看来,也就是从普通用户看来,反向代理就像普通的 Web 服务器一样。而反向代理所代理的每一个 Web 服务器都好像是反向代理服务器中的一个目录。例如反向代理服务器本身的 URL 是 http://reverse-proxy ,它可以代理清华主页服务器( http://www.tsinghua.edu.cn/index.html ),普通的用户想通过反向代理服务器来访问清华主页服务器就只需要访问 http://reverse-proxy/www.tsinghua.edu.cn/index.html 就行了。

   在反向代理中,等于把反向代理服务器中的目录映射到其它需要被代理的服务器上。这样做只能解决用户的一次访问问题,不能做到让用户通过反向代理连续访问。因为被代理的服务器上的信息是未知的,对于 HTTP 协议来讲,很有可能出现绝对地址或者绝对链接,这样的话,普通用户的下一次访问将会跳过反向代理而直接访问真实的服务器。这是我们不希望看到的。因此,必须对服务器返回给用户的信息进行过滤,将所有的绝对 URL 更改成为通过反向代理的相对 URL 。为此,我们使用了正则表达式对所有的链接进行检测、替换。于是就实现了通过反向代理连续访问的功能。

   当用户的请求到达反向代理服务器之后,反向代理通过一定的规则将 URL 中的目录信息解析成服务器以及端口的信息,从而进行 socket 链接,即反向代理服务器模拟一个客户端向真正的 Web 服务器发出 http 请求。当得到回应信息的时候,通过 HTTP 头中的 Content-Type 和文件的扩展名来判断得到的信息的类别。若是非 HTML 信息(如 jpg, gif, zip 等),则将其原样照发还给用户,若是 HTML(html, htm, shtml 等),则用先用正则表达式建立字符串识别自动机,查找 html 文本中所有的链接信息。例如, <a href="......"> 、 <img src="......"> 等。然后判定链接的类型,对于在代理范围之内(代理范围之外不予理会)的绝对 URL (以“ http:// ”打头),则把它改写成通过反向代理的格式。例如

<a href="http://www.test.org">

就会被改成

<a href="http://reverse-proxy/www.test.org">

对于绝对 URI (以“ / ”打头的),也需要更改,例如

<img src="/img/1.jpg">

就要被改成

<img src="/www.test.org/img/1.jpg"> 。

   对于相对链接,则不需要改动。除了对 HTML 本身进行更改之外,对 HTTP 的头信息也要解析。其中最关键的就是对 Cookie 路径的改写。例如收到 www.test.org 的 cookie 为

Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/

就要改写成

Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/www.test.org/

此外,不仅是收到服务器的信息需要改写,用户发给服务器的请求信息也要改写,其情形与上面所说的类似,这里不再举例。

4.3 HTTP 代理认证的实现

   由于 HTTP 认证的密码明文性,即使不用 Basic 方式认证,黑客也可以通过网络监听得到其它用户的密码的密文,然后将密文原样照搬到请求包里面,以求骗过系统认证。因此我们在代理服务器中添设 SSL 加密认证服务。

系统通过下面的方法实现了 http 代理对用户的认证。

   1) 对客户端的请求进行缓存及处理,包括对请求行进行分析和转化以及对请求头和实体头进行处理。例如,通过对于请求行 GET    http: ∥ www.edu.cn/ index. html HTTP/ 1 . 1 的分析,要获得方法、协议类型、目的站点、端口号以及绝对路径等后续工作所必需的重要信息,还要将其转化成目的服务器可以接收的请求行 GET index. html HTTP/ 1.1 。接着对请求头和实体头进行处理,例如,请求头“ proxy-authorization: ”提供用户认证的信息。

   2) 如果需要用户认证,则代理会向客户端发送下列响应:

   HTTP/ 1 . 1 40 7Proxy Authentication Required

   Proxy-Authenticate:Basic realm=“http proxy http”

   这里,状态码 407 告诉客户端需要向代理提供用户认证的信息, Basic 表示使用基本认证协议。

5 结束语

   WWW 是目前 Internet 上最流行的服务,其安全问题也越来越突出,尤其是对资源的访问控制。比如清华大学图书免费为全校师生提供 EI 、 SCI 等多种电子资源,但发现有少部分人乘机进行盗版活动。针对这种情况我们开发了一个图书馆电子资源访问控制系统,可以记录、控制用户对 .pdf 、 .zip 、 .jpg 等文件的访问次数,有效地防止了用户的恶意访问,取得了良好的效果。

参考文献

  1. Tim Berners- L ee,et al. The World- Wide Web. Communications of ACM,1 994,37(8):76 ~ 82
  2. 刘彦等 防火墙逆向代理的研究与实现 计算机工程 1999 , 25 ( 9 ): 66-67
  3. 朱树人,李伟琴 代理防火墙的设计与应用 计算机工程与科学 2000 , 23 ( 1 ): 16-19