通常的代理服务器,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到 Web 服务器上的 http 请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在 Internet 上搜寻多个不确定的服务器,而不是针对 Internet 上多个客户机的请求访问某一个固定的服务器,因此普通的 Web 代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务(也称为逆向代理)。
通过反向代理服务器,可以记录用户所有的访问行为,但这也会带来系统资源相当大的额外开销。但对于不同的服务器来说,其保护的资源类型是有限的,我们只需要记录、控制用户对我们所关心的资源的访问即可。比如对一个 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 分钟等。
反向代理是访问控制系统最核心的部分,其核心技术就是地址转换。通过它可以保证使用者对客户端计算机不进行任何设置的情况下就使用访问控制系统。从外观看来,也就是从普通用户看来,反向代理就像普通的 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/
此外,不仅是收到服务器的信息需要改写,用户发给服务器的请求信息也要改写,其情形与上面所说的类似,这里不再举例。
分享到:
- 2008-02-26 17:01
- 浏览 1656
- 评论(0)
- 论坛回复 / 浏览 (0 / 11040)
- 查看更多
相关推荐
论何为教育.pdf
8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式缓存...
30张PPT截图揭秘何为工业4.0
8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式...
8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式...
新浪微博何为舟-自动化策略生成的思考与实践.pdf
NAT(Network Address Translation)是网络地址转换的缩写,是一种网络技术,用于解决公网IP地址短缺的问题。通过NAT,内部网络中的设备可以使用私有IP地址进行通信,而对外界显示统一的公网IP地址,从而有效地节省...
何为编程.zip
何为区块链技术
何为行为财务学
### 敏捷开发(Agile Development)概览 敏捷开发是一种迭代式的软件开发方法,强调灵活性、快速响应变化以及紧密的团队协作。这种方法特别适用于规模较大或中等的项目。 #### 敏捷的核心特点 ...
机器视觉是一种技术,它使计算机和自动化设备能够“看”并理解现实世界,进而执行基于图像的任务。在本文中,我们将深入探讨机器视觉的基本概念、组成部分、应用领域以及其在现代科技中的重要性。...
《水浒传》是中国古典文学中的四大名著之一,作者施耐庵以其独特笔法描绘了一群豪杰聚义梁山的壮丽画卷,提出了何为英雄、英雄为何的深刻主题。通过对书中英雄人物的剖析,我们可以看到英雄的三个主要特质:兄弟义气...
何为特别行政区.pptx
何为科学发展观.docx
何为商务管理
何为有效的经理人.doc
何为机器视觉?机器视觉入门.pdf
何为简单而有效的管理.doc