透明代理

在网络上常见的代理服务器有三种:

1. 标准的代理缓冲服务器

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

2. 透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的 (即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将 缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

3. 反向代理缓冲服务器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向 代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请 求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没 有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

 

实验设备:Red Hat Enterprise Linux 5虚拟机一台,XP系统主机一台

 

拓扑图:

clip_p_w_picpath002

 

客户端配置:

配置网关为:192.168.102.254

配置首选DNS为:222.88.88.88

clip_p_w_picpath004

 

squid服务器配置

安装squid

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom #建立挂载点进行光盘挂载

[root@localhost ~]# cd /mnt/cdrom/Server

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

[root@localhost ~]# vim /etc/resolv.conf #指明DNS服务器

clip_p_w_picpath006

[root@localhost ~]# vim /etc/sysctl.conf #开启数据包转发功能

clip_p_w_picpath008

[root@localhost ~]# vim /etc/squid/squid.conf #编辑squid配置脚本

clip_p_w_picpath010

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.102.0/24 -p udp --dport 53 -o eth0 -j MASQUERADE #添加DNS的nst转换

[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j REDIRECT --to-ports 3128 #添加squid的端口重定向

[root@localhost Server]# service squid restart #重启squid服务

Stopping squid: ....... [ OK ]

Starting squid: ........... [ OK ]

 

 

测试:

用PC1访问百度主页

clip_p_w_picpath012

clip_p_w_picpath014

 

上述实验表明实验成功!

 

附:

squid代理服务中常用到的控制元素

acl aclname src ip-address/netmask ... (clients IP address) 基于来源ip地址进行控制

acl aclname src addr1-addr2/netmask ... (range of addresses)基于来源ip地址范围进行控制

acl aclname dst ip-address/netmask ... (URL host's IP address) 基于目标ip地址进行控制

acl aclname myip ip-address/netmask ... (local socket IP address) 基于本地ip进行控制

acl aclname arp mac-address ... (xx:xx:xx:xx:xx:xx notation) 基于mac地址进行控制

acl aclname srcdomain .foo.com ... # reverse lookup, client IP基于来源域进行控制

acl aclname dstdomain .foo.com ... # Destination server from URL基于目标域进行控制

acl aclname time [day-abbrevs] [h1:m1-h2:m2] 基于时间进行控制

day-abbrevs:

S - Sunday

M - Monday

T - Tuesday

W - Wednesday

H - Thursday

F - Friday

A - Saturday

h1:m1 must be less than h2:m2

acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL基于URL关键字进行控制

acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path 基于内容(图片,flash)进行控制