Linux -- 代理服务器(Squid Server)的配置与应用1

一、代理服务器的配置与应用

随着Internet的迅速发展,宽带网络接入量快速增多,Internet终端用户数迅速膨胀,网络管理员面临的问题越来越多,问题也越来越严重,如IP资源匮乏、用户访问计费、内部网络安全等一系列问题。面临如此多的问题,我们迫切需要一个行之有效的方案应对,这个方案就是我们本章要重点学习的代理服务器。本章将介绍代理服务器的基本概念、工作原理、配置和使用方法等。

二、 代理服务器概述

在我们工作、生活和学习的这个社会环境中,代理服务是一种大家所熟知的服务形式,普遍存在于各个领域中,如律师、房屋租赁中介、婚庆公司等。这些代理服务的存在使得我们的各行各业的人办事,不再因为跨越不同领域而难于实现。另外也大大节省了办事的成本,办事过程也显得更为专业。同样,代理服务的思想在计算机领域的网络传输过程中得以实践、应用,形成了本章所要讨论的重点。

三、代理服务器种类

1、Microsoft Proxy代理服务器

Microsoft Proxy Server是微软提供的一种代理服务器解决方案,大型局域网可以用它作为局域网的代理服务器软件。Microsoft Proxy除了提供传统的代理功能之外,还可对当前Internet一些最新的应用提供代理服务,如IP电话、网络寻呼机等。

Microsoft Proxy包括了Web Proxy、Socks Proxy、Winsock Proxy。其中Web Proxy支持HTTP、FTP等服务,WinSock Proxy支持Telnet、电子邮件、RealAudio、IRC、ICQ等服务,Socks Proxy负责中转使用S0cks代理服务的程序与外界服务器间的信息交换。Microsoft Proxy在运行Windows NT/2000/2003的服务器上安装后,各工作站就可以使用Web Proxy提供的服务,上网浏览、使用FTP等。如果要使用winSock Proxy和Socks Proxy提供的服务,必须要在客户端安装配置程序,并且还要在服务器端进行设置。

相对于SyGate、WinGate等简易的代理服务器软件,Microsoft Proxy Server功能更强大,适用于企业级或大型网吧的局域网,但由于它一定要运行在WinNT/2000/2003上,且配置比较复杂,小型局域网使用较少。

2、Microsoft IS代理服务器

Microsoft Internet Security and Acceleration Server (简称Microsoft ISA或ISA Server)是Microsoft Proxy Server的升级换代产品。ISA Server是一个可扩展的企业防火墙和Neb缓存服务器,可与Windows 2000/2003集成,以便为互联网用户实现基于策略的安全的实现、数据访问的加速。

ISA Server最吸引人的地方在于它和Active Directory的集成,这使得我们可以使用与管理其它网络和用户相同的方法来管理用户访问、Internet以及安全策略。ISA Server使用Microsoft管理控制台, MMC是一个界面,用来管理Windows 2000/2003 Server中的许多功能,而且文档十分完善。

ISA Server构建在Windows 2000/2003安全、目录、虚拟专用网络(VPN)和带宽控制基础之上。不论是作为一组单独的防火墙还是缓存服务器来部署,ISA Server均可增强网络的安全性,实施一致的Internet使用策略,加速Internet访问,并最大限度地提高各种规模公司员工的办公效率。

3、WinProxy代理服务器

Winproxy是一种常用的代理服务器软件,只要安装在局域网的服务器上就可以了,它可以让局域网的多台客户机通过服务器上网。它支持SOCKs 4&5,利用Winproxy的SOCKs协议可以让客户机连通QQ。

Winproxy是一款集NAT、代理和防火墙为一体的代理软件,它能够支持我们提到过的多种代理方式,同样也能够支持常见的协议。从功能上看,WinProxy与WinGate十分相似,但不如WinGate强大,其性能介于WinGate和CCProxy之间,对于那些不希望使用 WinGate这么复杂软件,但还需要使用NAT共享方式的用户来说,这是一个相当不错的选择。

4、WinGate代理服务器

WinGate可以作为一个坚固的防火墙,能控制企业内部网络的入出访问。相对同类软件,WinGate有很多优点,如可以限制用户对 Internet访问的能力,通过GateKeeper提供的强劲远程控制和用户认证能力(Pro版),记录和审计能力,可作为服务运行等。

如果使用的是一个十多台计算机的局域网环境,以Wingate作为代理服务器通过一个Modem上网,应该说速度还是可以接受的。不过,问题就是我们刚才提到的,在操控方面,WinGate对用户的要求似乎更高些。

作为一款经典的代理服务软件,WinGate能够提供多种网络代理服务。其最新版除了提供常用的HTTP、Socks代理服务以外,还支持 DHCP、DNS服务。同时,它还提供了完整的POP3和SMTP服务,用户可以借此构建一个邮件服务器。WinGate还特别提供了按需拨号功能。更方便的是,WinGate还能够与Windows用户进行集成,Windows NT/2000/2003系统用户可以直接使用已创建好的用户信息。

5、winRoute代理服务器

WinRoute除了具有代理服务器的功能外,还具有NAT(网络地址转换)、防火墙、邮件服务器、DHCP服务器、DNS服务器等功能,能为用户提供一个功能强大的软网关。WinRoute有很多选项设置,涉及到网络配置的方方面面,但是它的帮助系统却不是很完善,由于WinRoute具有 DHCP服务器的功能,局域网内部的机器还可配置成由WinRoute动态分配的IP地址。

WinRoute的Commands选单比较简单,可以进行拨号、断线、收发电子邮件。总体来说,WinRoute的网络功能相当全面,是一个优秀的软网关,美中不足的就是它的用户界面显得有些简单,帮助系统不够完善,从而增加了配置工作的难度。

6、SyGate代理服务器

SyGate是一种支持多用户访问因特网的软件,并且是只通过一台计算机,共享因特网帐号,达到上网的目的。使用SyGate,若干个用户能同时通过一个小型网络,迅速、快捷、经济地访问因特网。易于安装的SyGate,在数分钟之内便可以安装完成,并且通常不需要其他外加的设置。和其他代理服务器软件不同的是,SyGate仅安装Server便可以了。

易于使用的SyGate拥有直观的图形化界面,懂得操作Windows的人员均会操作。SyGate启动后便在后台运行,不需要人工的干预。在TCP/IP网络上,SyGate Client能让用户从任何一台计算机上远程监察和管理SyGate Server。

SyGate诊断程序在任何时候都能帮助你确定系统设置以及解决网络连接的问题。SyGate设有使用日志文件以及系统设置文件,在需要的时候可轻易地查寻与检测。尽管这些功能并非是必须的,SyGate还是能以其高度的可配适性,满足任何小型网络中的多种需要。

7、CCProxy代理服务器

CCProxy是一款国产的代理服务器软件,能满足小型网络用户的所有代理需求。它支持HTTP、FTP、Socks4、Socks5等多种代理协议,虽然不具备与Windows用户的集成能力,但CCProxy可以自行创建用户,并允许网管员根据需要为不同用户分配不同的权限。而通过相关规则的设定,CCProxy还能对单个用户连接数、访问网址等加以限制。

CCProxy代理服务器于2000年6月问世,是国内最流行的、下载量最大的国产代理服务器软件。主要用于局域网内共享Modem代理上网,ADSL代理共享、宽带代理共享、专线代理共享、ISDN代理共享、卫星代理共享、蓝牙代理共享和二级代理等共享代理上网。

总体来说,CCProxy可以完成两项大的功能:代理共享上网和客户端代理权限管理。CCProxy非常适合中国用户使用,无论是政府机关部门,大中小公司,学校,或是网吧,CCProxy都是实现共享上网的首选代理服务器软件。

8、squid代理服务器

在Unix/linux下使用的比较优秀的代理服务器软件Squid。之所以说它比较优秀,是因为它可以在代理服务器上作一个很大的缓存,可以把好多常去的网站内容存储到缓存中,这样,内部网的机器再访问那些网站,就可以从缓存里调用了。

这样一方面可以加快内网浏览因特网的速度,这就是所谓的提高客户机的访问命中率;另一方面,Squid不仅仅支持HTTP协议,而且还支持 FTP,GOPHER,SSL和WAIS等协议,考虑到简捷实用的原则,squid作为代理服务器不仅性能优异,而且还详细的纪录了各个客户端的访问纪录。

Squid是一个缓存internet数据的软件,它接收用户的下载申请,并自动处理所下载的数据。Squid可以工作在很多的操作系统中,如 AIX,Unix,FreeBSD,Linux,NetBSD,Nextstep,Solaris,OS/2等,也有不少人在其他操作系统中重新编译过的 Squid。由于它安装简单,使用方便,所以已经被广泛使用。

四、 代理服务器的主要作用

代理服务器的英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,需送出请求信号来得到回答,然后对方再把信息以数据流方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,请求信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给终端用户的浏览器。而且,大部分代理服务器都具有缓冲功能,就好像有一个大的缓冲池(Cache),它有很大的存储空间,不断地将新取得的数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器请求获取数据,而直接将存储器上缓存的数据传送给终端用户的浏览器,这样就能显著提高浏览速度和效率。代理服务器的主要作用有以下几点。

1.共享网络

代理服务器最常见的用途之一便是共享上网。在我们现在生活和工作的环境中,大量的用户正在不知不觉地通过各种代理服务器访问外部站点的信息。例如,通过squid、sygate、wingate、isa、ccproxy及NT系统自带的网络共享等代理服务器访问外网信息,这些代理服务器也都能提供企业级的文件缓存、复制和地址过滤等服务。充分利用局域网出口的有限带宽,加快内网用户的访问速度,能解决仅仅有一条线路一个公有IP地址这种公有IP地址资源严重不足的情况,以满足局域网众多用户同时共享上网的需求。

2.访问代理

现在我们所处的网络环境中,常常会存在这样的问题:因为网络出现拥挤或故障,我们急切需要访问的某个网站不能够直接访问,但又希望访问该站点信息,如何解决这个问题呢?其实很简单,我们常常采用的解决方案便是通过代理服务器绕道访问目的站点。例如,用户需要在网络节点A访问网络节点C上部署的网站,但此时网络节点A到网络节点C之间的网络出现了故障,很显然用户不能成功访问网站;但此时假设网络节点B上设有一台代理服务器,同时网络节点A到网络节点B,网络节点B到网络节点C,这条网络通道是正常运转的,在这种环境下网络节点A上的用户访问网络节点C上网站的愿望可以通过在网络节点B上的代理服务器实现。

另外,代理服务器中通常会备份有相当数量的缓存文件,如果我们当前所访问的数据在代理服务器的缓存文件中,则可直接读取,而无须再连接到远端Web服务器。这样可以达到加快访问网站速度,节约通信带宽的目的。据估计,在一个中型网络中,这样可以节省大约60%的通信带宽;在一个大型网络中,节省的通信带宽可能会更多。

3.防止攻击

内部主机的访问是通过代理服务器完成的。在这个过程中,内部主机地址等信息不会发送到外部,隐藏了自己的真实地址信息,还可隐藏自己的IP地址。这样外部攻击者就无法通过扫描、刺探等方式对内部主机进行渗透,进而起到保护内部主机的作用。

例如,大家在一些论坛上看到,论坛中明确标出了发帖用户目前所在地,这就是根据论坛会员登录时的IP地址解析的。还有平日里我们最常用的显IP版QQ,在"发送消息"窗口中,能查看对方的IP地址及解析出的地理位置。这些案例都是通过分析指定的IP地址,查询到网络用户的目前所在地。而当我们使用相应协议的代理服务器后,就能达到隐藏自己当前所在地地址的目的了。

4.突破限制

互联网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内,那么客户通过代理服务器访问目标网站就成为可能。国内的高校大多使用教育网,不能出国,但通过代理服务器,就能实现访问Internet,这就是高校内代理服务器热的原因所在。

5.掩藏身份

代理服务器使内部用户访问Internet时受到保护,内部网的用户要对外发布信息就需要使用代理服务器的反向代理功能。这样就不会影响到内部网络的安全性能,起到了掩藏身份的目的。很常见的一个案例就是黑客进行攻击的过程,既要攻击目标主机,又不能把自己暴露给对方。

其实代理服务器知识是黑客基本功。黑客的很多活动都是通过代理服务器,运用扫描、刺探等方法对局域网内机器进行渗透实现的,黑客一般攻击时都是中转了多级跳板,才攻击目标机器,隐藏了身份,确保了自己的安全。

6.提高速度

提高下载速度,突破下载限制。例如,有的网站提供的下载资源,做了一个IP地址一个下载线程的限制,这时候能用影音传送带,设置多线程,为每个线程设置一个代理。对于限制一个IP地址的情况非常好突破,只要用不同的代理服务器,就可同时下载多个资源,适用于从Web和FTP上下载的情况。不过如果是论坛里面的资源,每个用户一个账号,并且限制一个账号一个IP地址,代理服务器就突破不了了。

突破下载限制还有另外一种情况。例如,电信的用户上不了联通的电影网站,联通的用户上不了电信的电影网站,这种情况只要电信用户找到一个IP地址属于联通网络的代理,联通用户找到一个IP地址属于电信网络的代理。此时电信用户和联通用户就能互访本无权限访问的电影网站或下载电影资源了。同样,教育网用户也能通过代理服务器访问本无出国权限或没有访问某IP段权限的计算机来访问相关资源。

7.起到防火墙的作用

因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽掉某些信息。这是局域网网管对局域网用户访问范围限制最常用的办法,也是局域网用户为什么不能浏览某些网站的原因。拨号用户如果使用代理服务器,同样必须服从代理服务器的访问限制,除非你不使用这个代理服务器。

8.方便对用户管理

通过代理服务器,管理员可以设置用户验证和记账功能,对用户进行记账,没有登记的用户无权通过代理服务器访问Internet;并对用户的访问时间、访问地点、信息流量进行统计。

五、Squid Server的安装

Squid是Linux环境下最流行的高性能的缓存代理服务器软件,是由国家网络应用研究室(the National Laboratory for Applied Network Research)的Duane Wessels主持,NSF出资支持,以及互联网上的众多开发人员共同研发完成的。Squid的官方网站是http://www.squid-cache.org/,如图16-2所示。Squid前生是美国政府ARPA出资大力发展的缓存服务器Harvest Research Project研究计划。Squid在内存里保存访问频繁的对象,并且在硬盘内维护一个健壮的访问对象数据库,它接受客户软件的连接,并把连接转发到相应的网络主机上,Squid在向用户返回网络主机信息的同时,也要在本地的磁盘上做一份拷贝。这意味着,假如同样的内容再次请求,Squid就不用再转发请求而直接使用磁盘中的拷贝,这会使用户觉得速度相当快。

Squid系统是一个在UNIX系统下运行的全功能的代理服务器软件。它可以为HTTP协议、FTP协议及其他使用URL方式定位的协议作缓存;它支持客户端使用SSL协议进行数据传送;它可以使用ICP、HTCP、CARP、Cache Digests等协议和其他运行Squid的服务器进行协同;它支持SNMP协议,可以用相应的软件来进行协调和管理。

Squid系统的另外一个优越性在于它使用访问控制列表(ACL)和访问权限列表(ARL)进行权限管理和内容过滤。访问控制清单和访问权限清单通过组织特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的网站。

Squid对硬件和操作系统的要求:

Squid可以运行在所有流行的Linux系统和UNIX系统上,也可以运行在Windows系统上,但对Windows的支持还在不断持续改善。

Squid对硬件要求不算高。其中最为重要的资源就是内存和磁盘空间,内存短缺会严重影响性能,而磁盘空间受限意味着缓存目标受限同时命中率会下降。另外,磁盘转速和CPU速度也对改善系统性能有很大的影响,但并不是提高性能的关键因素。

【方法一】RPM包安装方式

目前Squid官方网站提供的Squid的RPM安装包是squid-3.0.STABLE7版本。安装过程如下:

查询是否安装了Squid服务。

Red Hat Enterprise Linux 5中的Squid服务默认并不会自动安装,所以我们首先需要执行以下命令查看它是否已经安装,如图16-3所示。

[root@localhost ~]#rpm -q squid

下载Squid。

当确认系统未安装Squid服务后,我们可以从官方网站下载Squid最近的RPM包文件。地址如下:

http://people.redhat.com/mnagy/squid/squid-3.0.STABLE7-1.el5/i386/squid-3.0.STABLE7-1.el5.i386.rpm

安装Squid。

要安装上述RPM包文件,可以使用rpm -ivh命令安装。命令执行后,如果出现如图16-4所示的结果,则表明Squid服务安装成功了。

[root@localhost ~]#rpm -ivh squid-3.0.STABLE7-1.el5.i386.rpm


添加Squid用户和用户组。

[root@localhost ~]# groupadd squid
[root@localhost ~]# useradd squid

Squid Server的基本配置

在成功完成了Squid Server的安装工作后,在目录"/usr/local/squid/etc"中会自动产生一个样本"squid.conf"配置文件,文件中对每一个选项都有详细的说明,我们可以通过修改该文件以满足不同的需要。在此按照我们配置的需求,仅对最常用的几个重要配置参数进行详细说明。

Squid的配置文件"squid.conf"内容是相对比较规范的,每行以一个配置参数开始,后面跟着数字值或者关键字。在读取配置文件时,Squid会忽略空行和注释掉的行(以符号"#"开头的行)。在这里有必要提醒大家的是,Squid对配置文件中的参数是大小写敏感的。例如,将"cache_mem"写成大写的"CACHE_MEM"就会发生错误。

16.3.1  设置监听的IP地址和端口

"squid.conf"配置文件中的http_port参数设置便是为了告诉Squid Server在哪个IP地址的哪个端口侦听来自客户机的HTTP请求。该参数默认的配置是在本机的3128端口进行侦听。该参数的默认定义如下。

http_port 312

当将Squid Server作为Web服务器的加速器应用时,通常会将该参数设置为80。


http_port 80

当需要Squid侦听多个端口时,可以通过附加一行http_port参数定义实现。此类应用也常常发生,例如,来自某个部门的浏览器发送请求到3128端口,而另一个部门使用8080端口,此时该参数定义如下:

http_port 3128
http_port 8080

另外,我们也可以使用参数http_port来指明在哪个接口地址的端口上进行侦听。例如,当Squid作为防火墙运行时,它有两个网络接口:一个内部接口和一个外部接口。我们可能不想接收来自外部的HTTP请求,但需要接收来自内部的HTTP请求,为了使Squid仅仅侦听内部接口,达到前面阐述的规则约束,我们的实现方案如下:


http_port 192.168.1.100:3128


仅仅是将当前主机的内部接口IP地址放在了端口号前面,但所表达的意义已经发生了质的改变。


设置缓冲大小

参数cache_mem并非用于指定Squid进程开辟的内存缓存的最大值,它只是设定额外提供多少内存给Squid使用。这里的额外是指Squid会将最常用的一些缓存放到这块内存中。

Squid是这样来计算使用多少内存的:Squid本身的进程大概需要10~20MB,我们下面设置的Cache目录的大小是500MB,它放在内存里的hash索引大概需要20MB左右,再加上这里设置的cache_mem的值。官方文档建议实际内存大小应该是这个Squid所需要总内存的2倍以上。因此我们在估计设置参数cache_mem时要量力而行,根据前述的计算方法反推。当然在条件许可的情况下,总希望cache_mem是越大越好了。

参数cache_dir是squid.conf配置文件里最重要的命令之一,它告诉Squid以何种方式将Cache文件存储到磁盘的什么位置。参数cache_dir的定义格式如下:

cache_dir scheme directory size L1 L2 [options]

参数cache_swap_low和cache_swap_high控制了存储在磁盘上对象的置换。它们的值是最大cache体积的百分比,这个最大cache体积来自于所有cache_dir大小的总和。例如:

cache_swap_low 90
cache_swap_high 95

如果总共磁盘使用低于cache_swap_low,Squid不会删除cache目标;如果cache体积增加,Squid会逐渐删除目标。在稳定状态下,你发现磁盘使用总是相对接近cache_swap_low值。可以通过请求cache管理器的storedir页面来查看当前磁盘使用状况。

   清除代理服务器上cache记录


1.停止squid
/usr/local/squid/sbin/squid -k interrupt

2.清除cache目录内容
Rm -rf /tmp/squid/*

3.重建cache目录
/usr/local/squid/sbin/squid -z

4.启动squid
/usr/local/squid/sbin/squid -D


设置访问控制

Squid默认的配置文件拒绝所有客户的请求。为了能够让所有终端客户通过Squid代理服务器访问Internet资源,在所有终端能使用该代理服务器之前,必须首先在"squid.conf"文件里加入附加的访问控制规则。附加访问控制规则最简单的实现方法就是定义一个针对终端客户IP地址的访问控制列表(Access Control List,ACL)和一系列访问规则,告诉Squid服务器允许来自哪些IP地址的HTTP请求。

访问控制列表(ACL)便是Squid进行网络控制的有力工具,用来过滤进出代理服务器的数据。学会如何灵活运用访问控制列表(ACL),便是我们合理应用好Squid代理服务器的关键。而构成访问控制列表(ACL)的基本元素就是acl参数定义,用来指定包括IP地址、端口号、主机名和URL匹配等变量。每个acl参数都有一个名字,在编写访问控制规则时需要引用它们。acl参数定义的语法格式如下:

acl 列表名称 列表类型 [-i] 列表值1  列表值2 ...

列表名称:用于区分Squid的各个访问控制列表(ACL),任何两个访问控制列表(ACL)不能定义相同的列表名称。尽管列表名称可以随意定义,但为了方便进行日后长期的维护管理工作,建议大家在命名列表时尽量使用有意义的、便于理解的列表名称,如badurl、clientip和worktime等。

列表类型:是可以被Squid识别的类型。

列表值:针对不同的类型,列表值的内容是不同的。例如,对于类型src或dst,列表值的内容是某台主机的IP地址或子网地址;对于类型time,列表值的内容是时间;对于类型srcdomain和dstdomain,列表值的内容是主机域名。


 其他参数设置

1.设定cache_effective_user参数

设定使用缓存的有效用户。假如没有设置cache_effective_user,则以root来启动Squid,Squid使用nobody作为默认值。不管你选择什么用户ID,请确认它有对下面目录的读访问权:/usr/local/squid/etc、/usr/local/squid/libexec和/usr/local/squid/share。该用户ID也必须对日志文件和缓存目录拥有写访问权。

2.设定cache_effective_group参数

设定使用缓存的有效用户组。Squid也有一个cache_effective_group命令,但我们可以不必设置它。在默认情况下Squid使用cache_effective_user的默认组(从/etc/passwd文件读取)。

3.设定DNS服务器的地址

为了能够使Squid解析域名,必须告诉Squid有效的DNS服务器。

dns_nameservers 61.144.56.101

4.设置日志文件路径

默认的日志目录是Squid安装位置下的logs目录。当我们在安装过程的./configure环节中没有使用--prefix=选项时,则默认的日志文件路径是"/usr/local/squid/var/logs"。

你必须确认日志文件所存放的磁盘位置空间足够。在Squid写日志时如果接收到错误,它会退出或重启,此时管理员应该特别注意,检查是否有异常行为出现,特别是当前的系统是否被滥用或者被攻击。

Squid有3个主要的日志文件:cache.log、access.log和store.log。其中第1个文件cache.log,包含了状态性的和调试性的消息。当刚开始运行Squid时,你应密切关注该文件。假如Squid拒绝运行,原因也许会出现在cache.log文件的结尾处。在正常条件下,该文件不会变得很大。请注意,假如你以-s选项来运行Squid,重要的cache.log消息也可以被送到syslog进程。通过使用cache_log参数,你可以改变该日志文件的路径:

cache_log /squid/logs/cache.log

第2个文件access.log,包含了对Squid发起的每个终端客户请求,每个请求以一行记录,每行平均约有150个字节。也就是说,在接收100万条客户请求后,它的体积约为150MB。请使用cache_access_log参数来改变该日志文件的路径:

cache_access_log /squid/logs/access.log

假如因为某些原因,你不想让Squid记录终端客户请求日志,则可以设定日志文件的路径为"/dev/null"。

第3个文件store.log,对大多数cache管理员来说并非很有用。它包含了进入和离开缓存的每个目标的记录,平均记录大小典型的为175~200字节。然而,Squid不在store.log里对cache单击创建接口,所以它比access.log包含少得多的记录。请使用cache_store_log参数来改变它的位置:

cache_store_log /squid/logs/store.log

例如,通过指定路径为none,我们可以轻易地完全禁止store.log日志。


cache_store_log none


某些操作系统对单个文件强制执行2GB的大小限制(即使有充足的磁盘空间),超过该限制会导致写错误,这样Squid就会退出。为了保证日志文件大小合理,我们应该创建任务来有规律地重命名和打包日志。Squid拥有内建功能来容易完成这个工作。

5.设置运行Squid主机的名称

vsible_hostname参数定义了运行Squid主机的名称。当访问发生错误时,该参数的值会显示在错误提示网页中,建议输入主机的IP地址。

visible_hostname 192.168.1.101

6.设置管理员的联系信息

设置cache_mgr参数是作为对终端用户的帮助。它是一个E-mail地址,假如问题发生,用户能写信给它。cache_mgr地址默认出现在Squid的错误消息里。例如:

cache_mgr [email protected]

7.允许或拒绝某个访问控制列表的HTTP请求

Squid会针对客户HTTP请求检查http_access规则,根据定义的访问控制列表后,使用http_access参数决定哪个访问控制列表被禁止或者被许可。http_access参数的基本格式如下:

http_access [allow | deny] 访问控制列表名称

[allow | deny]:定义允许或禁止指定访问控制列表。

访问控制列表名称:需要http_access控制的ACL名称。

例如,定义允许名称为all访问控制列表的HTTP请求。

http_access allow all

初始化Squid

1.初始化硬盘cache目录

成功安装并配置好Squid服务器后,为了能够使Squid在硬盘中缓冲终端客户访问目标服务器的内容,在初次运行Squid之前,或者修改了cache_dir设置后,我们都必须初始化硬盘cache目录。命令格式如下:

[root@localhost ~]# /usr/local/squid/sbin/squid -z

该命令在每个cache_dir下面创建了所需的子目录。你不必担心Squid会破坏当前cache目录。命令执行完后,查看目录"/usr/local/squid/var/cache"的内容时,可以看到Squid已经根据配置文件的定义建立了目录结构,如图16-9所示。

在该阶段属主和许可权是通常遇到的问题。Squid在特定的用户ID下运行,这在squid.conf文件里的参数cache_effective_user中指定。用户ID必须对每个参数cache_dir目录有读和写权限;否则,你将看到如下信息,如图16-10所示。


Creating Swap Directories 
FATAL: Failed to make swap directory /usr/local/squid/var/cache/00:

(13) Permission denied


在这样的情形下,应该确认"/usr/local/squid/var/cache"目录的所有资料必须都可以被squid.conf给定的用户ID进行写访问。

cache目录初始化工作可能花费一些时间,这取决于cache目录的大小和数量,以及磁盘驱动器的速度。如果我们想观察这个过程,可以使用-X选项,如图16-11所示。

[root@localhost ~]# /usr/local/squid/sbin/squid -zX

2.在终端窗口中测试Squid

当成功初始化了cache目录后,就可以在终端窗口里运行Squid了,将日志记录重定向到标准错误。这样,我们就能轻易地定位任何错误或问题,并且确认Squid是否成功启动。使用-N选项来保持Squid在前台运行,-d1选项在标准错误里显示1级别的调试信息。

[root@localhost ~]# /usr/local/squid/sbin/squid -N -d1

我们将会看到如图16-12所示的输出结果。


如果看到错误消息,我们便可以修正它。请检查输出信息的开始几行以发现警告信息。最普通的错误是文件/目录许可问题,以及配置文件语法错误。

当我们看到"Ready to serve requests"消息时,就可用一些HTTP请求来测试Squid。配置浏览器使用Squid作为代理,然后打开某个Web页面。如果Squid工作正常,页面将会被迅速载入,就像没有使用Squid一样。

另外,我们可以使用squidclient程序,它随Squid一起发布。

[root@localhost ~]# /usr/local/squid/bin/
squidclient

执行上述命令后,如果Squid正常工作,Squid的主页html文件将会在终端窗口里滚动,如图16-13所示。等我们能够完全确认Squid工作正常后,便可以中断Squid进程(使用"Ctrl+C"组合键)。在以后应用过程中,以后台运行的方式启动Squid服务。


启动和停止代理服务器

1.启动代理服务器

在正常情况下,我们通常将Squid以后台进程的方式运行(不出现在终端窗口里)。最容易的方法是执行如下命令:

[root@localhost ~]#  /usr/local/squid/sbin/squid -s


-s选项导致Squid将重要的状态和警告信息写到syslogd。Squid使用LOCAL4设备,以及LOG_WARNING和LOG_NOTICE优先权。syslogd进程实际可能会或不会记录Squid的消息,这依赖于它被如何配置。同样的消息被写进cache.log文件,所以忽略-s选项也是安全的。

当不使用-N选项来启动Squid时,Squid自动在后台运行并且创建父/子进程对。子进程做所有的实际工作,父进程确认子进程总在运行。这样,假如子进程意外终止,父进程启动另外一个子进程以使Squid正常工作。通过观察syslogd消息,便能看到父/子进程交互作用。

2.停止代理服务器

【方法一】最安全地停止代理服务器的方法。

最安全地停止Squid代理服务器的方法是使用squid -k shutdown命令,命令执行后如图16-14所示。


[root@localhost ~]#  /usr/local/squid/sbin/squid -k shutdown


该命令发送TERM信号到运行中的Squid进程,Squid进程在接收到TERM信号后,将关闭进来的套接字以拒收新请求。然后它等待一段时间,用来处理外出请求。默认时间是30秒,我们也可以在shutdown_lifetime参数里更改它。

【方法二】运用kill命令强行停止代理服务器的方法。

如果因为某些未知原因导致squid.pid文件丢失或不可读,那么Squid -k命令执行会失败。在这种情形下,我们可以用命令ps找到Squid的进程ID,然后手工停止Squid进程。具体做法如下:

[root@localhost ~]# ps ax |grep squid

此时如果你看到不止一个Squid进程,请停止以(squid)显示的那个进程,如图16-15所示。例如:


[root@localhost ~]# kill -TERM 3530

在发送TERM信号后,我们或许想查看日志,以确认Squid是否已关闭。执行命令如下,如图16-16所示。


[root@localhost ~]# tail -f /usr/local/squid/var/logs/cache.log

【方法三】立即停止代理服务器的方法。

我们可以使用squid -k interrupt命令,立即关闭Squid代理服务器,不用等待完成活动请求。这与在kill里发送INT信号的方法是等同的,如图16-17所示。

[root@localhost ~]# /usr/local/squid/sbin/squid -k interrupt

3.重新启动代理服务器

重新启动Squid代理服务器的命令如下:

[root@localhost ~]# /etc/init.d/squid restart

4.重新载入配置文件

【方法一】

重新载入配置文件的命令如下:

[root@localhost ~]# /etc/rc.d/init.d/squid reload


【方法二】

使用squid -k reconfigure命令,如图16-18所示。

[root@localhost ~]# /usr/local/squid/sbin/squid -k reconfigure

当运行该命令时,HUP信号被发送到运行中的Squid服务进程,然后Squid服务进程读取和解析squid.conf文件。


修改了Squid服务的配置文件,若想使新的配置生效,虽说可以通过重启服务的方式实现,但是面临大型应用的网络正在处于服务状态的Squid服务器是不能够随意重新启动的。遇到此类问题时,只好采用当前这种重新载入配置文件的方法,既不会重启Squid服务影响当前正在进行的服务,又可以载入新编辑的配置文件,以达到变更规则的目的。但在使用重新载入配置文件的方法时我们需谨慎,因为所做的配置上的改变可能会导致致命错误。

5.自动启动代理服务器

通常我们希望Squid在每次计算机重启后自动启动。对于不同的操作系统,它们的启动脚本如何工作也是不同的。在这里描述一些通用的方法。

最容易的方法之一是修改"/etc/rc.local"脚本。这是一个简单的shell脚本,在每次系统启动时以root运行。使用该脚本来启动Squid非常容易,增加如下一行命令:

/usr/local/squid/sbin/squid -s


当然安装位置可能不同,还有你可能要使用其他命令行选项,但不要在这里使用-N选项。

在某些情况下可能没有使用cache_effective_user参数,此时我们可以尝试使用su来让Squid以非root用户运行。

当然方法绝非仅此两种,还有修改"init.d"和"rc.d"脚本文件,使用独立的shell脚本来启动服务,以及修改"/etc/inittab"文件,使init进程启动基于运行等级的服务等诸多方法,在此不再赘述。


代理服务器测试

如果要检查Squid是否处于正常运行状态,可以采用两种方法:一种方法是命令方式(squid -k check);另一种方法就是进入Squid所在目录查看访问日志文件access.log,看看浏览过的网页是否都保存在此日志文件中。

1.命令方式

检查Squid代理服务器是否处于正常运行状态的命令如下,如图16-19所示。


[root@localhost ~]# /usr/local/squid/sbin/squid -k check

这是Squid默认的检查代理服务器运行的方法。


2.查看访问日志文件access.log

执行下面的命令检查访问日志文件access.log,如图16-20所示。

[root@localhost ~]# gedit /usr/local/squid/var/logs/access.log

Squid Server高级配置

本节将为大家介绍如何进行透明代理配置和用户认证配置。

16.4.1  透明代理

透明代理是把NAT技术和代理技术二者有机结合起来的一种应用,在这种工作模式下终端用户感觉不到代理服务器的存在,不需要在浏览器或其他客户端工具(如网际快车、QQ、迅雷等)中设置任何代理,只需将Linux服务器的IP地址设置为默认网关即可。透明代理一词也就是由此缘故而得来的。

当终端客户访问Internet资源,请求Internet资源的数据包途经Linux服务器转发时,Linux服务器上的防火墙iptables服务会应用NAT技术将终端客户的HTTP请求重定向到Squid代理服务器,由Squid代理服务器替代终端客户访问外部的Internet信息资源,再将获取到的信息资源回传给终端客户。

在这种情况下,终端客户必须在TCP/IP中正确地设置DNS服务器地址。因为浏览器不设置任何代理,DNS查询必须由终端客户直接访问DNS服务器来完成。

在Linux平台下我们使用iptables+Squid来实现透明代理和网络地址转换。

1.配置Squid

在"/etc/squid/squid.conf"文件中需修改的参数如下:

#Squid监听HTTP客户端端口
httpd_port 192.168.1.101:8080
#缓存设置
cache_mem 128MB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /cache/squid 1000 16 256
#缓存日志
cache_access_log /cache/squid/access.log
cache_log /cache/squid/cache.log
cache_store_log /cache/squid/store.log
#透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#子网掩码
client_netmask 255.255.255.255
#代理权限
http_access allow all

此笔者认为有必要向大家讲解一下与实现透明代理相关的几个相关参数。

参数httpd_accel_host和httpd_accel_port本来是用来定义Squid加速模式的。在这里设置参数httpd_accel_host为virtual,是为了指定当前采用虚拟主机模式;而设置参数httpd_accel_port为80,是为了指定需要加速的请求端口。采用这种模式时,Squid默认是取消了缓存和ICP功能的;如果需要这些功能,就必须设置httpd_accel_with_proxy参数。

参数httpd_accel_with_proxy设置为on后,Squid服务器既是Web请求的加速器,又是缓存代理服务器了。

参数httpd_accel_uses_host_header设置为on后,在透明代理模式下,代理服务器的缓存功能才能正确工作,这时Squid会把存储的对象加上主机名作为索引。

2.编写防火墙规则

使用iptables实现NAT的具体方法可以参照本书的第17章"网络防火墙与NAT服务"。

iptables在此所起的主要作用是端口重定向,执行如下的命令将所有进入eth0网络接口80端口的Web服务的请求直接转发到8080端口,交由Squid代理处理,如图16-21所示。

[root@localhost ~]# iptables -t nat -A 
PREROUTING -i eth0 -p tcp -m tcp 
--dport 80 -j        REDIRECT --to-ports 8080
[root@localhost ~]# iptables -t nat
-A POSTROUTING -o eth0 -j MASQUERADE


身份认证是实现网络通信安全的重要机制之一。在安全的网络通信中,涉及的通信各方必须通过某种形式的身份验证机制来证明他们的身份,验证用户的身份与所宣称的是否一致,然后才能实现对于不同用户的访问控制和记录。用户身份认证作为保护网络系统资源的第一道防线,在任何公共服务中都是必要的组成部分。Squid代理服务也同样需要搭配满足需求的用户身份认证机制,保证合法终端客户以合法的权限访问网络系统资源。

在默认情况下,Squid服务本身不包括任何身份认证程序,但我们可以通过绑定外部用户认证程序的方式实现Squid服务本身的用户身份认证。下面是一些Squid服务能够绑定的用户认证程序:

(1)LDAP认证:使用轻量级目录访问协议(Lightweight Directory Access Protocol);

(2)NCSA认证:使用NCSA风格的用户名和密码;

(3)SMB认证:使用SMB协议的服务,如SAMBA或Windows NT;

(4)MSNT认证:使用Windows NT的域验证;

(5)PAM认证:使用Linux的可装载验证模块;

(6)Getpwam认证:使用Linux的密码文件/etc/passord。

Squid不支持在透明代理模式下启用用户身份认证功能。

接下来给大家介绍一下Squid代理服务绑定NCSA用户认证的实现过程。

1.配置squid.conf文件

虽然Squid代理服务器可以绑定前述的多种用户认证方式,但最为常用的认证方式还是NCSA。下面是在Squid主配置文件"/usr/local/squid/etc/squid.conf"中实现NCSA认证方式绑定配置的重要部分。

#该选项指出了认证方式(basic)、需要的程序(ncsa_auth)
和对应的密码文件(password) 
auth_param basic program /usr/bin/ncsa_auth 
/usr/local/squid/etc/password 
# 指定认证程序的进程数 
auth_param basic children 5 
# 浏览器显示输入用户名/密码对话框时的领域内容 
auth_param basic realm My Proxy Caching Domain 
# 基本的认证有效时间 
auth_param basic credentialsttl 2 hours 
# 普通用户需要通过认证才能访问Internet 
acl normal proxy_auth REQUIRED 
http_access allow normal

(1)设置认证方式

参数auth_param basic program定义了认证方式为basic(从Squid 2.5版以后,NCSA认证包含在了basic中)、认证程序路径和认证程序需要读取的账号文件。

auth_param basic program /usr/bin/
ncsa_auth /usr/local/squid/etc/password

该设置说明绑定NCSA认证,认证程序在"/usr/bin/ncsa_auth"路径下,用户账号文件在"/usr/local/squid/etc/password"路径下。

(2)设置认证程序的进程数

参数auth_param basic children定义了认证程序的进程数。

auth_param basic children 5

该设置说明NCSA认证程序许可的进程数是5。

(3)设置认证有效时间

参数auth_param basic credentialsttl定义了用户经过认证后的有效时间,用户在有效时间后如果还需要继续使用Squid代理服务,则必须重新输入用户名和密码。

auth_param basic credentialsttl 2 hours

该设置说明NCSA认证的有效时间是两个小时。

(4)设置认证领域内容

参数auth_param basic realm定义了Web浏览器显示用户名/密码对话框时的领域内容。

auth_param basic realm My Proxy Caching Domain

该设置说明当我们首次使用Web浏览器访问外网资源时,系统提示输入用户名/密码时,对话框中的标题内容。


(5)设置允许经过认证的用户访问

定义了一条名为auth_user的ACL,ACL类型为proxy_auth,通过外部程序进行用户认证方式,列表值是REQUIRED,然后使用http_access选项允许该访问控制列表。

acl normal proxy_auth REQUIRED 
http_access allow normal

2.建立账号文件

为了建立供用户认证使用的账号文件,可以利用Apache的htpasswd程序生成账号文件,放置在"/usr/local/squid/etc/passwd"路径下。该账号文件每行包含一个用户账号信息,即用户名和经过加密后的密码。

[root@localhost ~]# htpasswd -c /usr/local/squid/etc/passwd test

3.测试用户认证

当Squid的安全配置工作完成后,有必要进行一下测试,检验一下我们的配置是否合适。测试用户认证的过程如下:

重启Squid服务,重启方法参见本章16.3.6节"启动和停止代理服务器"。

在终端客户的Web浏览器中配置好代理服务器的IP地址和端口号。

访问任意外部站点,此时Web浏览器会弹出输入用户名和口令的对话框,如图16-22所示。

输入正确的用户名和口令,就能够连上Internet了。

如果用户名和口令不正确,则出现"网络缓存服务器拒绝访问"的错误提示信息,如图16-23所示。



参考 : http://book.51cto.com/art/200904/119210.htm 

本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1554342

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。