当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > Squid代理服务器部署使用攻略
Linux下的代理服务器软件很多,但是被广泛应用的只有Squid、socks、Apache等几个实践证明是高性能的代理软件。
一、各种代理服务器的比较
表-1Linux下主流代理服务器比较
Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。Squid支持以下协议:
客户端协议:HTTP、FTP、Gopher、WAIS、SSL
缓存及管理协议:ICP、CacheDigests、SNMP、HTCP
二、Squid工作原理和流程图
1.代理服务器的工作机制
代理服务器的工作机制很像我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。
2.squid工作流程
图1是Squid工作原理图。
图1Squid工作原理图
1.客户端计算机向代理服务器端发送一个数据需求封包;
2.代理服务器端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,那么代理服务器端会预计开始替客户端计算机获取信息。
3.代理服务器首先会到自己的硬盘里面,也就是所谓的cache(缓存)查看一下有没有客户端计算机端所需要的数据,如果有的话,那就将数据直接送到客户端计算机端,而不向互联网获取信息。
4.将数据传回给客户端计算机端使用。
5.在经过以上三部查寻知道缓存没有数据,或者数据过期之后,代理服务器会向互联网上面的目标网站要求数据;
6.在将数据取回之后,代理服务器会先将取得的数据储存一份到缓存当中。
7.最后才将数据传回给客户端计算机端使用。
三、安装和配置Squid服务器
通常说来,安装Squid有两种方法:一是从Linux发行版本中获取该软件的RPM包进行;二是安装从Squid的官方站点
[rpm-qsquid]
如果在系统安装时已经把squid安装上了,那么我们就可以直接对squid配置使用了。
也可以从Squid站点
配置并保存好squid.conf后,可以用以下命令启动squid。
或者,使用RHEL4.0的启动脚本来启动squid。
/etc/rc.d/init.d/squidstart
同样,也可以用下列脚本停止运行squid或重启动squid。
/etc/rc.d/init.d/squidstop
/etc/rc.d/init.d/squidrestart
判断squid已经正常启动方法:分别使用ps命令和netstat命令检查Squid代理组服务器允许情况,和端口使用情况,见图-2。
图-2查看Squid服务器运行进程和端口
如果你的Linux服务器终端桌面出现图2类似的情况表示Squid代理服务器运行正常。
理解Squid配置文件
Squid配置文件由一组文件组成见表2。
其中最重要的是squid.conf,squid.conf配置文件可以分为十三个部分,这十三个部分分别是:
1)NETWORKOPTIONS(有关的网络选项)。
2)OPTIONSWHICHAFFECTTHENEIGHBORSELECTIONALGORITHM(作用于邻居
选择算法的有关选项)。
3)OPTIONSWHICHAFFECTTHECACHESIZE(定义cache大小的选项)。
4)LOGFILEPATHNAMESANDCACHEDIRECTORIES(定义日志文件的路径cache的目录)。
5)OPTIONSFOREXTERNALSUPPORTPROGRAMS(外部支持程序选项)。
6)OPTIONSFORTUNINGTHECACHE(调整cache的选项)。
7)TIMEOUTS(超时)。
8)ACCESSCONTROLS(访问控制)。
9)ADMINISTRATIVEPARAMETERS(管理参数)。
10)OPTIONSFORTHECACHEREGISTRATIONSERVICE(cache注册服务选项)。
11)HTTPD-ACCELERATOROPTIONS(HTTPD加速选项)。
12)MISCELLANEOUS(杂项)。
13)DELAYPOOLPARAMETERS(延时池参数)。
理解squid的命令启动参数
Squid有很多命令参数,见图-3。
图-3squid命令选项
对于Squid命令这里需要了解其参数,在开始其他事情之前,让我们先看一下squid的命令行选项。这里的许多选项你会经常使用,另外有些仅仅在调试问题时有用。
squid命令行选项
-aport:
指定新的http_port值。该选项覆盖了来自squid.conf的值。然而请注意,你能在quid.conf里指定多个值。-a选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a是因为在Harvestcache里,HTTP端口被叫做ASCII端口)。
-dlevel:
让squid将它的调试信息写到标准错误(假如配置了,就是cache.log和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1工作良好。
-ffile:
指定另一个配置文件。
-h:
显示用法。
-kfunction
指示squid执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,orparse。
+reconfigure导致运行中的squid重新读取配置文件。
+rotate导致squid滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。
+shutdown发送关闭squid进程的信号。
+interrupt立刻关闭squid,不必等待活动会话完成。
+kill发送KILL信号给squid,这是关闭squid的最后保证。
+debug将squid设置成完全的调试模式,假如你的cache很忙,它能迅速的用完你的磁盘空间。
+check简单的检查运行中的squid进程,返回的值显示squid是否在运行。
+最后,parse简单的解析squid.conf文件,如果配置文件包含错误,进程返回非零值。
-s:
激活将日志记录到syslog进程。squid使用LOCAL4syslog设备。0级别调试信息以优先级LOG_WARNING被记录,1级别消息以LOG_NOTICE被记录。更高级的调试信息不会被发送到syslogd.你可以在/etc/syslogd.conf文件里使用如下接口:
local4.warning/var/log/squid.log
-uport:
指定另一个ICP端口号,覆盖掉squid.conf文件里的icp_port。
-v:
打印版本信息。
-z:
初始化cache,或者交换,目录。在首次运行squid,或者增加新的cache目录时,你必须使用该选项。
-C:
阻止安装某些信号句柄,它们捕获特定的致命信号例如SIGBUS和SIGSEGV。正常的,这些信号被squid捕获,以便它能干净的关闭。然而,捕获这些信号可能让以后调试问题困难。使用该选项,致命的信号导致它们的默认动作,通常是coredump。
-D:
禁止初始化DNS测试。正常情况下,squid直到验证它的DNS可用才能启动。该选项阻止了这样的检测。你也能在squid.conf文件里改变或删除dns_testnames选项。
-F:
让squid拒绝所有的请求,直到它重新建立起存储元数据。假如你的系统很忙,该选项可以减短重建存储元数据的时间。然而,如果你的cache很大,重建过程可能会花费很长的时间。
-N:
阻止squid变成后台服务进程。
-R:
阻止squid在绑定HTTP端口之前使用SO_REUSEADDR选项。
-V:
激活虚拟主机加速模式。类似于squid.conf文件里的httpd_accel_hostvirtual指令。
-X:
强迫完整调试模式,如你在squid.conf文件里指定debug_optionsALL,9一样。
-Y:
在重建存储元数据时,返回ICP_MISS_NOFETCH代替ICP_MISS.忙碌的父cache在重建时,该选项可以导致最少的负载。
本文介绍了Squid代理服务器的安装,下一篇文章中,接着介绍其如何使用及其注意事项,敬请关注。
介绍了Squid代理服务器的安装,本文接着介绍其如何使用及其注意事项。
四、监控Squid工作情况
1.使用Linux命令和工具
分别使用KDE系统卫士和netstat命令检查Squid代理组服务器允许情况,和端口使用情况,见图4。
图4查看Squid服务器运行进程和端口
2.使用cachemgr.cgi
(1)cachemgr.cgi配置过程
squid本身提供一个cgi程序,文件名为cachemgr.cgi,squid安装完后将它复制到Apache服务器下的cgi-bin这个目录下即可使用。
#cp/usr/lib/squid/cachemgr.cgi/home/httpd/cgi-bin
下面我们通过apache进行监控squid,修改配置文件/etc/http/conf/http.conf,添加以下内容
<Location/cgi-bin/cachemgr.cgi>
AuthTypeBasic
AuthNamw"Squidadmin"
AuthUserFile/usr/local/squid/etc/squid.pwd
requirevalid-user
</Location>
生成口令文件:
#cd/usr/local/squid/etc
#htpasswd-csquid.pwdsquidadmin"创建密码文件"
Newpasswd:
Re-typenewpasswd:
Addingpasswordforusersquidadmin
#chownapache:apchesquid.pwd"将认证口令文件的属主改为apache"
重启squid与http,要察看CacheManager提供的信息时,请在浏览器的地址列中键入http://服务器的名称或IP地址/cgi-bin/cachemgr.cgi。首先看到用户认证界面,经过认证后进入登录界面,输入代理服务器地址和端口号,见图5。
图5cachemgr.cgi登录界面
输入管理员名称和口令,按"continue"按纽进入Squid监控界面见图6。
图6cachemgr.cgi实时监控界面
(2)重点解读监控数据
cachemgr.cgi提供的数据非常详细,下面重点解读一些内容:
?MemoryUtilization(内存使用情况)
内存是Linux所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Linux支持虚拟内存,就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。MemoryUtilization监控界面见图7。
图7MemoryUtilization监控界面
一个内存池是主要的物理内存逻辑区分,包括一个工作或工作组。你能检查正在使用每个进程的内存,空闲的内存,以及泄露的内存。
?EventQueue(事件队列)
?AsyncIOFunctionCounter(同步IO运行)
?DISKDStats(磁盘使用情况)
?CurrentSquidConfiguration(配置文件通常是处于隐藏状态)。
?comm_incoming(低水平网络IO情况)
?IPCacheStatsandContents(IP缓存使用情况)
?FQDNCacheStatsandContents(域名缓存使用情况)
?InternalDNSStatistics(内部域名统计)
?ExternalACLstats(扩展ACL)
?HTTPHeaderStatistics(HHTP包头统计)
?CacheUtilization(缓存使用情况)
?FullHistogramCounts(柱状图统计)
?ProcessFiledescriptorAllocation(进程分配)
?5MinuteAverageofCounters(5分钟统计平均值)
?60MinuteAverageofCounters(60分钟统计平均值)
?CacheClientList(缓存客户端列表)
?GeneralRuntimeInformation(squid服务器总体运行情况列表)见图8。
图8Squid总体运行情况
GeneralRuntimeInformation是cachemgr.cgi监控Squid代理服务器的核心。包括:
StartTime:启动时间(GMT格林尼治标准时间格式)。
CurrentTime:当前时间。
Connectioninformationforsquid:Squid代理服务器连接信息。
Cacheinformationforsquid:Squid代理服务器缓存信息。
MedianServiceTimes(seconds)5min60min:Squid代理服务器五分钟、60分钟相关统计信息。
Resourceusageforsquid:Squid代理服务器资源使用情况。
Memoryusageforsquidviamallinfo():Squid代理服务器内存统计。
Memoryaccountedfor:内存占用结构。
Filedescriptorusageforsquid:文件系统使用统计。
InternalDataStructures:内部数据使用比例。
3.安全应用cachemgr.cgi监控
cachemgr.cgi可以监测的数据包括:网络流量、使用协议、系统负载、数据包发送时间等。透过它﹐基本上所有进出数据都无所遁形,不管拿来做例行的网络监测工作﹐还是拿来做报告﹐都是非常优秀的工具,让您的网络流量透明化。,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况。不过如何保护这些信息只能给授权的人士获得﹐将变得额外重要。除了前面介绍的控制访问外最好使用SSL协议保护敏感的监控网页。
保护HTTP通讯:SSL的一个常见的用途是保护浏览器和网络服务器之间的网络HTTP通讯,但这并排除应用于不加保护的HTTP。其方法主要是,对普通HTTP加以SSL保护(称为HTTPS),但有一个重要的区别:它使用URL类型https而不是http,而且使用不同的服务器端口(默认的是443)。限于篇幅SSL配置过程读者可以参考一些修改书籍。配置SSL完成后。使用浏览器访问首页输入:https://IP地址或者域名/cgi-bin/cachemgr.cgi在Linux下Firefox浏览器屏幕提示https安全。注意浏览器位置栏和右下角的安全标志。见图9。
图9Firefox浏览器https安全性提示的界面
注意客户端如果使用IE的话,此时只有右下角的安全标志。通过SSL(Securesocketlayer)进行HTTP传输的协议就是HTTPS,它不但通过公用密钥的算法进行加密保证传输的安全性,而且还可以通过获得认证证书CA,保证客户连接的服务器没有被假冒。
五、Squid日志分析
Linux网络管理员应当尽量记录所有日志,这些日志会记录所有异常访问的线索。网络日志不是用来应付检查,而且它能够帮助你更好地从事网络管理工作。它记录了系统每天发生的各种各样的事情,包括哪些用户曾经或者正在使用系统,可以通过日志来检查错误发生的原因,更重要的是在系统受到黑客攻击后,日志可以记录下攻击者留下的痕迹,通过查看这些痕迹,系统管理员可以发现黑客攻击的某些手段以及特点,从而能够进行处理工作,为抵御下一次攻击做好准备。
1squid日志格式
squid拥有完善的日志系统,但是对用户来说,以下的几个日志文件具有重要的意义:
access.log
该文件主要包含了客户访问的相关信息,如客户机的ip地址,访问的站点,访问的流量大小等等。一般的squid日志分析程序主要是基于该文件的。
cache.log
该文件包含着squid服务进程的相关信息,如启动的状态,错误信息等等。
store.log
该文件包含缓存中存储对象的相关信息,如对象存储的时间,对象的大小,对象超期的时
间等等。
2分析access.log日志文件
access.log日志文件的格式说明
由于access.log文件是最重要的一个日志文件,很多squid的日志分析程序都是围绕该文件编写的(如计费,流量分析,热门站点等),所以在这里我们就着重讲述一下该日志文件的格式。access.log可以有两种基本的格式,一种native(原始日志文件)日志文件格式,另外一种是common(普通日志文件)日志文件格式。common日志文件格式包含的信息要比native日志文件格式来得少,并且native日志文件包含着许多管理员感兴趣的信息。默认时,squid采用native日志文件格式。如果要切换到common日志文件格式,可以更改emulate_httpd_log选项为on。
native日志文件格式如下所示:
timeelapsedremotehostcode/statusbytesmethodURLrfc931peerstatus/peerhosttype
子段说明见下表
3.使用Linux命令
如果我们仅仅需要查看某一个字段,可以用awk命令,它把一个记录行分割成多个字段,我们使用参数传回需要的字段。命令如下:
#tail-f/var/log/squid/access.log|awk'{print$3""$8""$7}'
这里选择的是客户访问时间和用户请求所花费的时间,显示见图10:
图10查看客户访问时间和用户请求所花费的时间
这种方式的优点是实时性强,显示的是当前正在访问的记录的情况。
4使用专业软件分析
事实上,squid已经有众多的日志分析软件了,而且大多是免费的,您可以依照自己的喜好来加以安装与分析你的squid代理服务器。
pwebstatus(
webalizer(
squid-graph(
squidsites(
sarg(
1.Webalizer
Webalizer工作方式不同于Linux命令,这个软件主要侧重于信息的汇总,如带宽、输入输出量,用于比较在不同的时间段网络的使用情况。可以从站点
下面建立目录并且复制文件:
#mkdir/var/www/html/usage_squid/
#cpmsfree.pngwebalizer.png/var/www/html/usage_squid/
配置文件修改完毕以后,需要定时webalizer,每天生成当日的统计分析。以root身份运行crontab-e进入定时运行任务编辑状态,加入如下任务:
$50***/usr/bin/webalizer-f/etc/webalizer.squid.conf
这样定义在凌晨00:05对squid的日志进行统计分析。可以使用浏览器查看。方法:
图11Webalizer工作界面
也可以通过命令行配置webalizer,也可以通过配置文件进行配置,在下面我们将介绍使用命令行参数进行配置,需要了解配置文件使用方法的朋友可以参考README文件,里面有很详细的介绍。
2.用Squid-Graph进行监测
Squid-Graph是用Perl语言写成的,但正如它的名字一样,它用图形化的方法产生squid代理的使用情况,它产生一些综合信息。可以从站点
把下载的软件放到/usr/local/目录,进行解压。执行如下命令:
#cd/usr/local/
#tarxvzfsquid-graph-3.1.tar.gz
#mvsquid-graph-3.1squid-graph
#cdsquid-graph
#chmod+x/usr/local/squid-graph/bin/*
软件不须安装,直接使用,比如我们用以下的命令可产生TCP访问的累计图形:
#/usr/local/squid-graph/bin/squid-graph-c-n-o=/var/www/html/squid-graph/--title="Squidserverusage"</var/log/squid/access.log
上面的这个命令用-c选项产生累计图形,用-n选项指定在命令执行过程中不向屏幕上输出信息,-o选项指定输出文件的目录,-title选项指定自定义的输出文档标题,图12是一个输出示例。
图12squid-graph工作界面
另外squid-graph命令配合Linux下的其他命令如grep可以在squid日志中搜索需要的字符串,然后针对这一匹配项产生需要的图形。如下面的命令就产生了在所有日志行中有字符串"192.168.6.99"的客户端机器的使用squid代理的图形。
#cat/var/log/squid/access.log|grep"192.168.6.99"|/usr/local/squid-graph/bin/squid-graph-c-n/-o=/var/www/html/squid-graph/--title="192.168.6.99'susage"
3.用Calamaris进行监测
Calamaris是一个用perl语言写成的程序,如果要使用的话,首先系统里要安装perl解释器。它产生Squid日志的详细报告,包括按高峰时间时的使用情况、流进网内流量、流出流量、进出UDP包、进出TCP包、请求的二级或三级域名产生的报告文档。除用于Squid日志产生的日志分析外,它还可用于其他形式的代理服务软件产生的日志,如NetCache、InktomiTrafficServer、Oops!proxyserver、NovellInterNetCachingSystem等。
安装Calamaris也很简单,首先从站点
#cd/usr/local/
#tarxvzfcalamaris-2.59.tar.gz
#cdcalamaris-2.59
解压后的目录包含可执行文件calamaris,无须安装,直接使用即可,比如用以下命令使Calamaris处理squid日志文件,产生html格式的文件,并输出到/var/www/html/calamaris/index.html。然后执行如下命令就可以查看输出报告了。
#/usr/local/calamaris/calamaris-a-Fhtml/var/log/squid/access.log>/var/www/html/calamaris/index.html
对一般的应用来讲,上面的命令产生了最详细的输出报告,我们用命令选项-a表示产生所有类型的报告,用选项-Fhtml表示产生html格式的文档。/var/log/squid/access.log表示squid日志文件的存放位置,/var/www/html/calamaris/index.html表示输出的文件名。当产生报告文件后,在客户端用浏览器可进行浏览。命令行下工作界面见图13
图13Calamaris工作界面
总结:squid的安装维护中需要注意以下问题:理解代理服务器工作流程;全面监控代理服务器Squid运行情况;输入分析注Squid代理服务器的日志。
评论 (0) All