Squid代理服务器的架设
一、 代理服务器的概述
1、代理服务器的工作原理
代理服务器一般构建在内部网络和internet之间,负责转发网计算机对internet的访问,并对转发的请求进行控制和登记。利用代理,除了可以实现最基本的连接功能外,还可以实现安全和保护,缓存数据,内容过滤和访问控制等功能。
例如客户机A,访问外网的基本台WEB服务器时,发过去的HPPT请求要先经过WEB代理,WEB代理要先对这些HTTP请求进行分析,如果发现所请求的数据在缓存中已经存在,刚直接把这些数据发送给客户机A;如果WEB代理在缓存中找不到所请求的数据,刚会转发这个HTTP请求到客户机要访问的WEB服务器,WEB服务器响应后,把数据发给了WEB代理,WEB代理再把这个数据转交给客户机A,同时把这些数据储存在缓存中,当客户机A或者其他客户机再次向WEB服务器请求数据时,WEB代理就直接用缓存中的数据进行响应,而不需要再次向WEB服务器请求数据,对于客户机来说,它是感觉不到代理存在的,以为看到的网页是真实的WEB服务器。特别是对一些访问量大的热门网站,速度更是有明显的提高。
除是上面提到的使用代理可以大大提高访问速度外,代理服务器还有以下几个好处:
A、可以起到防火墙的作用
B、客户机的安全性能得到提高
C、可以访问受限的服务器
D、 减少出口流量
2、WEB缓存的类型和特点
A、 客户端缓存
几乎所有的浏览器都提供了缓存功能,允许客户机的内存或硬盘上缓存访问过的WEB对象,如:网页,图像和声音等,客户端的缓存容量小,不能缓存大量的WEB对象;每个客户机的缓存都是在本地的,虽然距离很近,相互之间却不能共享缓存中的数据,从而造成存在大量和重复数据,因此,客户端的缓存的作用与效果并不是很明显。
B、代理服务器的缓存
代理服务器缓存位于网络的中间位置,他可以同时接收很多客户机的请求,因此,它的缓存可以被这些客户机共享,当一个客户机请求在代理服务器处得到满足时,就减少了代理服务器与WEB服务器之间的网络流量,也就减少了请求的延时和WEB服务器的负载,代理缓存应该具有健壮性,可扩展性,稳定性,负载平衡等特点。
C、服务器缓存
设置服务器的缓存是为了减轻WEB服务器的负载,而不是为了提高网页访问的命中率,他接收到的都是访问自己的请求,而不是像代理缓存那样,接收到的请求指向为数众多的WEB服务器。服务器缓存不仅减少了WEB服务器所在的网络流量,同时还保护着WEB服务器的安全性,因为WEB服务器是不直接面对客户机的,它只向服务器缓存提供数据。
3、3种典型的代理方式
A、传统代理
这是用户最熟悉的,需要在浏览器中设置进行代理,明确指出代理服务器的IP地址和网络端口,使得浏览器访问指定的服务时,先把访问请求发送给代理服务器,这种方式的优点是便于用户对访问进行管理,使用的各类多,并且可以在需要时进行设定,但是对于管理员员挺麻烦的。
B、透明代理
它一般为内网计算机提供外网的访问服务,不需要客户端的任何设置,他克服了传统代理的缺点,不需要客户端进行配置,能够强制客户端进行使用代理,容易实现平衡,他的缺点就是需要其他网络设备的配合,把某种数据包转发给代理服务器,其次是需要从大量的外出internet流量中过滤出所需的数据包,增加了网络设备的负担,而且还有一定的延时。
C、反向代理
反向代理服务器能够代理外部网络上的主机访问内部网络,反向代理主要为一个或几个本地网站作缓存,以加快WEB服务器的响应速度,或者代理外网的计算机访问内部的服务器,以加强WEB服务器的安全。
二、 Squid服务器的安装与运行
1、Squid 简介
Squid是一种快速的代理程序,它扮演着一种中介的角色,从浏览器等客户端程序接受请求,并把他传递给请求的URL所指向的internet服务器,然后把返回的数据送给客户端,同时存储一份副本在磁盘中。这样做的好处是下次再有客户端有同样的请求时,磁盘中的副本可以马上传送给客户端,从而加快速度,节省带宽。
Squid主要有以下工功能:
Ø 加快内部网络与internet 的连接;
Ø 保护内部网络免受来自internet的攻击;
Ø 获得内部网络用户访问internet的上网行为记录;
Ø 阻止不合适的internet访问;
Ø 支持用户认证功能;
Ø 过滤敏感信息;
Ø 加速WEB服务器的页面访问速度;
Squid支持以下客户端网络协议:
Ø 访问WEB服务器的HTTP协议;
Ø 文件传输协议FTP;
Ø 信息查找协议Gopher;
Ø 广域信息查找系统WAIS;
Ø 安全套接层协议SSL;
Squid支持以下内部缓存和管理协议
Ø HTTP协议,用于其他缓存抽取WEB对象的副本
Ø ICP(Internet Cache Protocol互连网缓存协议)协议,用于其他缓存中查找一个特定的对象;
Ø Cache Digests协议,用于生成其他缓存中所存对象的索引;
Ø SNMP协议,为外部工具提供所缓存信息;
Ø HTCP协议 ,是一个用来发现HTTP缓冲区,并储存,管理HTTP数据的协议;
2、squid软件的安装与运行
以下是我的一个试验环境,2台服务器,一台安装squid服务的RHEL6.0,一台是XP,squid服务器有两块网卡,桥接物理网桥的网卡IP为192.168.1.111,与XP桥接的网卡的IP为172.16.12.2,XP的IP为172.16.12.100,注意这里XP的网关要指向172.16.12.2
这样,我的机器上已经安装了squid,有 关squid服务器的几个重要文件分布如下:
/etc/httpd/conf.d/squid.conf 在apache服务器中加入运行cachemgr.cgi程序的配置
/etc/logrotate.d/squid: squid的日志滚动方式的配置
/etc/pam.d/squid: squid的PAM认证配置
/etc/squid/errors: 是一个目录,存放给客户端报告出错时的HTML文件
/etc/squid/mib.txt: 为SNMP协议配置squid的MIB
/etc/squid/mime.conf: 定义MIME类型的文件
/etc/squid/msntauth.conf 用于window NT 认证的配置
/etc/squid/squid.conf squid的主配置文件
/usr/lib/squid/*_auth 各种认证方式的库文件
/usr/lib/squid/cachemgr.cgi 对缓存进行管理的CGI程序
/usr/sbin/squid Squid服务器的主程序
/usr/sbin/squidclient 统计显示摘要报表的客户程序
/usr/share/squid/errors 是一个目录,存放各种语言出错报告的HTML文件
/var/log/squid 存放Squid日志的目录
/var/spool/squid Squid缓存的根目录
现在启动Squid服务:
打开squid的配置文件,在http_access deny all 前面加入http_access allow all 允许所有网络通信,否则实验会不成功。
可以看到,squid启动了3个进程,Squid服务器监听的是TCP3128端口,也就是说squid服务器通过这个端口接胺客户端的代理请求。
到这里就可以用XP验证了。。
这是我的XP客户端:
Ok 实验一已经成功!!XP可以通过squid代理上网。
3、配置Squid服务器
注意:在Squid配置文件中,字母大小写的意义是不同的!
对于某些取唯一值的选项,如果在不同的行给予不同的值,刚后面的值覆盖前面的值,如果选项可以取多个值,则每一个值都有效,取多个值的选项也可以在同一行中进行赋值。
http_port 3128 设置Squid服务监听的端口,也可以设置为其他值,还可以监听多个值,在后面放置多个值,以空格分隔
icp_port 3130 设置squid服务器这间共享缓存协议ICP使用的端口为3130
ICP协议是专门用于在代理服务器之间交换缓存数据的协议,通过他,一台服务代理服务器可以查询和读取另一台代理服务器中的缓存数据,以响应客户请求,这个是UDP端口。
cache_effective_user squid 设置运行squid服务器进程的用户是squid
pid_filename /var/run/squid.pid 设置squid服务器进程的PID文件的位置和名称
cache_mem 8MB 设置cach内存为8MB,设定一个squid能够用多少额外的内存来缓存对象的限制值
cache_dir ufs /var/spool/squid 100 16 256 指定缓存目录类型为ufs,目录位置是/var/spool/squid ,大小限制为100MB ,第一层子目录为16个,第二层子目录为256个
maximum_object_size_in_memory 8KB 设置squid保存在内存中的对象最大为8KB
maximum_object_size 4096KB 设置最大的缓存对象字节数为4096KB
cache_swap_low 90
cache_swap_high 95
设置Squid缓存空间的使用策略,以上设置表示当缓存中的数据占到整个缓存大小的95%以上时,将开始按一定的算法删除缓存中的数据,直到缓存数据占到整个缓存空间大小 的90%
Cache_mgr root 设置服务器管理员用户的E-mail邮箱 当Squid出故障时,将会发送一封邮件到该地址
4、Squid访问控制
Squid用于访问控制的配置选项主要有两个,一个是acl,它是Squid访问控制的基础,用于命名一些网络资源或网络对象,还有一个是http_access ,它对acl命名的对象进行权限控制,允许或拒绝他们的某些行为,acl选项的格式如下 :
acl name type valuel value2…(name 是对象的名称,它不能是squid保留的一些关键字,type是网络对象的类型,可以是IP地址,域名,用户名,网络端口号,协议,请求方法,以及正则表达式等,)详见下表:
常见的acl类型
类型
|
含义
|
src
|
源IP地址,可以是单个IP,也可以是地址范围或子网地址
|
dst
|
目的IP址,可以是单个IP,也可以是地址范围或子网地址
|
myip
|
本机网络接口的IP地址
|
srcdomain
|
客户所属的域,Squid将根据客户IP地址进行反向DNS查询
|
dstdomain
|
服务器所属的域,与客户请求的URL匹配
|
time
|
表示一个时间段
|
port
|
指向其他计算机的网络端口
|
myport
|
指向服务器自己的网络端口
|
proto
|
客户端请求所使用的协议,可以是http,https,ftp,gopher,urn,whois,和cache_object等值
|
method
|
http请求方法
|
proxy_auth
|
由Squid自己认证的用户名
|
url_regex
|
有关URL的正则表达式
|
定义和使用acl对象时,要注意以下几点:
1)某种acl类型的值可以是同种类型的acl的对象
2)不同类型的对象其名称不能重复
3)Acl对象的值可以有多个,在使用过程中,当任一值被匹配时,刚整个acl对象被认为是匹配的
4)当同种类型的对象其名称重复使用时,Squid将会把所有的值的组合到这个名称的对象中
5)对象的值可以是文件名,则该文件包含的内容做为对象的值,此时文件名要带双引号
实验二:下面通过acl选项的具体例子来理解他的格式和使用方法
示例1:acl worktime time MTWHF 08:00-17:00
将周一至周五的早上8点到下午17点命名为worktime
示例2:acl mynet src 10.10.1.0/24
将IP地址为10.10.1.0/24的子网命名为mynet,使用时要与源地址进行匹配
示例3:acl all dst 0.0.0.0/0.0.0.0
将所有的地址命名为all,使用时,与目的地址进行匹配
示例4:acl aim dstdomain .sina.com.cn .sohu.com .163.com
将“.sina.com.cn sohu.com .163.com”3个域名的组合定义为aim,当使用时,与目的域进行匹配
示例5:acl giffile url_regex –i \.gif$
把以gif结尾的URL路径命名为giffile
示例6:acl other srcdomain “/etc/squid/other”
把/etc/squid/other文件中的内容作为other对象的值,类型是源URL中的域名
示例7:acl safe_port port 80 21 43
将端口80,21,43的组合命名为safe_port
定义ACL对象的目的不是为了对与这些对象匹配的请求进行访问控制,这个控制功能不能由ACL实现,而是由http_access或icp_access 选项实现的,http_access的格式如下所示:
http_access <allow|deny> [!] ACL对象1 [!] ACL对象2 ……
allow表示允许,deny表示拒绝,两者必须选一,“!”表示取反
下面是几个http_access 的例子,
示例8:只允许Tom的用户访问,ident也是ACL的选项类型一种,表示用户
acl Tom ident Tom
http_access allow Tom
示例9:只允许源地址为10.20.6.100-10.20.6.200的IP使用Squid服务器
acl ALL src 0/0
acl MyNet src 10.20.6.100-10.20.6.200
acl ProblemHost src 172.16.5.9
http_access deny ProblemHost
http_access allow MyNet
http_access deny ALL
示例10:给三个客户机分别规定不同的上网时间
acl abc src 10.20.163.85
acl xyz src 10.20.163.86
acl asd src 10.20.163.87
acl morning time 06:00-11:00
acl lunch time 14:00-14:30
http_access allow abc morning
http_access allow xyz morning lunch
http_access allow lunch