发布时间:2019-12-23 15:41:08
考虑到有限的P地址资源以及网络安全性,在内部网络应用中代理服务器的使用十分普通,Linu×系统由于其卓越的性能及遵循自由软件协议,应用Linux作为代理服务器越来越广泛。本文试图通过对Linu×下的传统代理、IP伪装与透明代理的实现,分析这几种代理服务器实现方法的特点和应用。
本文所使用的服务器安装Redhat Linux 9 · 0〈服务器模式)系统,在服务器上安装三块网卡,三块网卡的iP地址
分别为eth0 211 · 66 · 80 · 52 4(默认网关为211.66 · 80 ·
1 0),ethl 192 · 1 68.1 0 · 1 4,eth2 172 · 1 6 · 1 · 1 6。其中 211 · 66 · 80.52 4是Intemet中的有效P的地址,另外两
个P则是内部IP地址。网络拓扑结构如图1所示:
图1 网络拓扑结构
1传统代理的实现
在Linux中使用最厂.泛的传统代理是Squid, Redhat
Linux 9. 0中已经自带有了u ℃。squid的服务程序是 squid,位+/usr/sbin目录下。控制squid服务的程序是/
e乜c /rc · d /init.d / u ℃,缺省的配置文件为/etc/squid/
squid.confo可以用u ℃作单网卡代理,也可以作双网卡代理,应用较普遍的是双网卡代理,即一块网卡与外部网络
60实践经验P幡!
连接,另一块网卡与内部网络连接,外部网络与内部网络在物理上是隔离的。
通过修改配置文件/etc /义uid / uid · conf的内容完成squid服务的配置,uid · conf是一个文本文件,用文本编辑器打开u ℃,conf文件对ujd进行配置。在实现传统代理时,主要配置该文件中的如下几项
http_port 192 · 168.10.1.3128 http-port 1 72.1 6 · 1,1,31 28
cache mem 32 MB visible-hostname PROXY SERVER maximum_obJeot-sjze 4 MB cache_djr ufs /oache 100 16 256 cache effective user squid httpd accel_host virtual httpd_acce Isort 80 httpd_acce I_with_pmxy on httpd_accel_uses_host_header on http-aocess引IOW all
配置好uid · conf文件后,运行命令u ℃ 一z建立缓存区,即在指定的缓存目录下建立两重目录。完成后则配置好一台代理服务器,其中
网卡ethl(1 92 · 1 68 · 1 0 · 1)向1 92 · 1 68 · 1 0 · 0网络
提供代理服务,网卡eth2向1 72 · 1 & 0.0网络提供代理服务。
配置好u ℃.conf后,启动squid代理服务即可。下面是squid服务程序的启动方法
〔1)启动u ℃代理服务
# /etc/rc.d/init.d/service squid start
(2)停止sq凵℃用以下命令
# (etc/rc.d/init.d /service squid stop
(3)重新启动uid代理服务
2開4年第1 0期 计算机系统应用
# /etc /陀· d /init. d /service squid restart
(4)显示当前的u ℃代理服务的状态
# /eto/rc.d /init.d /squid status
〈5)重新输出uid代理系统
# /etc/rc.d /init.d /squid reload 某些版本的凵nux不能以“ root "用户运行uid,需要创建特殊的用户。例如创建一个uid用户,并通过如下命令创建页面缓冲文件的目录/cache
# Ausr/sbinhuseradd一d /caohe/一r一s /dev/ null squid
# mkdir /cache
# chown一R squid. u ℃ /cache 启动uid代理服务后,只需在客户端浏览器中设置代理服务器的IP地址和端口号即可。
2 IP伪装
实现P伪装仍按图1的网络拓扑图结构及网络配置。 IP数据包的结构如图2所示,每一个IP数据包都有一个源发送地址(Sending Add SS),简称为源地址,一个目的地Ping 211 · 66 · 80 · 1 0 则IP数据包的源地址是1 92 · 1 68 · 1 0 · 2,目的地量是211 · 66 · 80 · 1 0,IP数据包的路由如下
192 · 1 68 · 1 0 · 2一一> 1 92 · 1 68 · 1 0 · 1一一> 211 · 66 · 80 ·
52一一> 211 · 66 · 80 · 1 0 发送的iP数据包到达21 1 · 66 · 80 · 1 0后由21 1 · 66 · 80 ·
1 0响应并回送IP数据包,回送IP数据包的源IP地址是 211 · 66 · 80 · 1 0,目的IP地址是1 92 · 1 68 · 1 0 · 2,但目的IP地址192 · 168 · 10 · 2对于网关211 · 66 · 80 · 10而言是不可识别的,只能发往它的上一级网关211 · 66 · 80 · 52,即IP数据包不能如期返回。显然这种情况下用内网的P地址是无法访问 Intemet的。
若希望用内部IP也能直接访问《ntemet,最有效的方法是利用Linux的路由功能将服务器配置为一台路由器,并且对eth0设置iP伪装功能,对于内部网络发送的数据包,路由器将源地址转换为合法的IP地址再发送出去,返回的数据包再由路由器(服务器)将目标地址转换成内部网络的
址([Destination Address),若在客户机192 · 168 · 10 · 2上 Version Number Header Length Type of Service(服务类型) Datagram Length(数据包长度) en f忆at地n(标识冫 0 DF MF Fragment Offset(数据块偏移) TIme to凵ve (TTL)(生存时间) Transport Protocol(传输协议) Header Checksum(标题检查和) Sending众ddress(发送端地址) Destination Address(目的地地址) Options(选项〕 Padding(填充) 图2 IP数据包结构 从客户机192 · 168 · 10 · 2上运行命令:ping 211 · 66 · 80 · 10时,IP数据包的路由和伪装过程如图3所示。 互转发的,在eth0上实现》P伪装,实现的过程如下(1)开启IP转发
IP地址。
1?以包械h攵IF数据包 211...52
1、1彐0、2 1上弱、80 10211. 66.10
返回冕包 銘由斟返p数蟮包
1 16& 10.221上.BO 10 I守2 1用、2211. 211..,211.10
图3 IP数据包地址的伪装过程
在路由器内部,eth0和ethl之间IP数据包是可以相
# echo 1 > /
/sys /het /iDV4 /ip- forward
IP伪装
# iptables t nat一A POSTROUT个℃一O eth0一j MASQUERADE
practical E n实践经验61
计算机系统应用 2004年第1 0期
(3)运行ute命令检查路由表,若还未设置默认网关可用以下命令手工添加
# mute add default 8W 211 · 66 · 80 · 10
这样在客户机端将192 · 168 · 10 · 1或172 · 16 · 1 · 1设置为网关,并配置好S服务器后,则拥有内网IP的客户机可以象拥有internet上的有效IP地址一样进行上网游览和收发E-Mailo
3透明代理
透明代理是指客户端感觉不到代理的存在,不需要在内部的浏览器中设置代理,只需要设置默认网关,客户端访问外部网络的数据包被发送到默认网关,默认网关运行着一个代理服务器,数据实际上被重定向到代理服务器的代理端口
(例如3128),由本地的代理服务器向外请求所需数据并拷贝给客户端。
透明代理一方面能利用代理服务器的缓存功能,另一方面理论上它对任何协议都适用。将传统代理和P伪装结合起来就可以实现透明代理。
实现透明代理使用图1的网络拓扑结构,在客户端计算机192 · 168.10.2使用浏览器访问站点202,101 · 66 · 100,透明代理的实现过程如下.
(1)客户端浏览器从端口1050向202 · 101 · 66 · 100的 Web站点发出一个http连接请求。
〈2)当请求的数据包从客户机的1050端口送往202 · 1 01 · 66,100的80端口时,被重定向到代理服务器的3128端口,即客户机使用端口1050与代理服务器的3128端口建立一个连接(连接1)。
(3)代理服务器从端口1025与202 · 101 · 66 · 100的端口 80建立另一个连接〔连接2)。
(4)当代理服务器从Web站点通过"连接2 "传来页面后,通过已经建立的“连接1 "把页面拷贝给客户机。
(5)从客户机的角度来看,连接是1 92 · 1 68 · 1 0 · 2的 1050端口与202.101 · 66.100的80端口建立一个连接来传送数据包的,但实际上客户机是和代理服务器建立的“连接 1 ",由代理服务器和202 · 101 · 66 · 100建立另一个"连接2 "来传送。这两个连接过程对用户是透明的,如图4中的虚线所
若已经配置好代理服务器,用jptables增加如下两条规则就可以实现透明代理
iptabtes一t nat一A PREROUT)NG一i ethl 一P
62实践经验Practical E职凹
top -m top一一d 80 -j REDIRECT一-to-闪酰s
图4 透明代理示意图
jptables一t nat一A POSTROUTING一0 eth0
MASQUERADE
其中第一条规则的作用是将所有80端口的包转发到
3128端口。第二条规则的作用是对eth0的端口进行欺骗。
4传统代理、JP伪装、透明代理的比较
传统代理的优点是对客户端要求很少,只要能连通 uid服务器即可实现,但具体应用中需要对每一台客户机设置代理服务器的IP地址和端口号,而且能为客户机提供缓存服务,以提高访问速度,减轻网络的负担。但传统代理是基于网络应用层的,对一些新的协议不一定能支持,象 ℃0、P等应用软件需要安装代理服务器的客户端软件。
P伪装是基于网络层进行数据交换的,理论上可以对任何协议都适用,但不能提供代理服务器的缓存功能。
透明代理兼顾了传统代理服务器和IP伪装的优占方面能提供代理服务器的缓存功能,另一方面它对任何协议都适合用,象ICQ、P等应用软件不需要另行安装代理服务器的客户端软件。但需要象iP伪装一样将每台客户机的默认网关都设为代理服务器,并在客户端来进行解析。
大客户
微信
置顶