建立可全面监控Squid代理服务器
代理服务器的功能是代理网络用户取得网络信息,它是网络信息的中转站。随着代理服务器的广泛使用,随之而来的是一系列的安全问题。由于没有对代理服务器的访问控制策略作全面细致的配置,导致用户可以随意地通过代理服务器访问许多色情、反动的非法站点,而这些行为往往又很难追踪,给管理工作带来极大的不便。
部署Squid服务器
1. 各种代理服务器的比较
Linux下的代理服务器软件很多,但是被广泛应用的只有Squid、socks、Apache等几个实践证明是高性能的代理软件。下面我们分别来比较一下这几个软件,如图1所示。

图1 Linux下主流代理服务器比较
虽然上面所列种类还不太全面,但是所谓窥一斑而知全豹,从中我们也可以看出什么样的代理服务器是被用户广泛使用的。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、Cache Digests、SNMP、HTCP
2.Squid工作原理和流程图
1)代理服务器的工作机制
代理服务器的工作机制很象我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。
2)Squid工作流程

图2 Squid工作原理图
◆客户端计算机向 代理服务器 端发送一个数据需求封包;
◆代理服务器 端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,那么代理服务器 端会预计开始替客户端计算机获取信息。
◆代理服务器首先会到自己的硬盘里面,也就是所谓的 cache (缓存) 查看一下有没有 客户端计算机端所需要的数据,如果有的话,那就将数据直接送到客户端计算机端,而不向互联网获取信息。
◆将数据传回给客户端计算机端使用。
◆在经过以上三部查寻知道缓存没有数据,或者数据过期之后,代理服务器会向互联网上面的目标网站要求数据;
◆在将数据取回之后,代理服务器会先将取得的数据储存一份到缓存当中。
◆最后才将数据传回给客户端计算机 端使用。
3.安装和配置Squid服务器
通常说来,安装Squid有两种方法:一是从Linux 发行版本中获取该软件的RPM包进行;二是安装从Squid的官方站点http://www.squid-cache.org/ 下载该软件的源码进行编译后安装。首先要确认是否已经安装vsftpd可以使用以下命令查看:
如果在系统安装时已经把squid 安装上了,那么我们就可以直接对vsftpd进行配置使用了。否则,可以通过Rat Het Enterprise Linux图形界面下的“添加/删除应用程序”工具进行安装。具体方法是,选择“主选单”→“系统设置”→“添加/删除应用程序”,在弹出的界面中选中万维网服务器的“squid”选项,单击“更新”即可,见图3。

图3 安装Squid代理服务器
也可以从Squid站点www.squid-cache.org 获取该软件的源代码安装包,包括gz和bz2两种压缩方式。
监控Squid工作情况
1.使用Linux命令和工具分别使用KDE系统卫士和netstat命令检查Squid代理组服务器允许情况,和端口使用情况,如图4。

图4 查看Squid服务器运行进程和端口
如果你的桌面出现图3类似的情况表示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
require valid-user
</Location>
生成口令文件:
#cd /usr/local/squid/etc
#htpasswd -c squid.pwd squidadmin “创建密码文件 ”
New passwd:
Re-type new passwd:
Adding password for user squidadmin
#chown apache:apche squid.pwd “将认证口令文件的属主改为apache”
重启squid与http ,要察看Cache Manager提供的信息时,请在浏览器的地址列中键入 http://服务器的名称或IP地址/cgi-bin/cachemgr.cgi。首先看到用户认证界面,经过认证后进入登录界面,输入代理服务器地址和端口号,见图5。

图5 cachemgr.cgi登录界面
输入管理员名称和口令,按“continue”按纽进入Squid监控界面见图6

图6 cachemgr.cgi实时监控界面
(2)重点解读监控数据
cachemgr.cgi提供的数据非常详细,下面重点解读一些内容:
◆Memory Utilization(内存使用情况)
内存是Linux所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Linux支持虚拟内存,就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内容又要使用时,再读回内存。Memory Utilization监控界面见图7。

图7 Memory Utilization监控界面
一个内存池是主要的物理内存逻辑区分,包括一个工作或工作组。你能检查正在使用每个进程的内存,空闲的内存,以及泄露的内存。
◆Event Queue(事件队列)
◆Async IO Function Counter(同步IO运行)
◆DISKD Stats(磁盘使用情况)
◆Current Squid Configuration (配置文件通常是处于隐藏状态)。
◆comm_incoming(低水平网络IO情况)
◆IP Cache Stats and Contents(IP缓存使用情况)
◆FQDN Cache Stats and Contents(域名缓存使用情况)
◆Internal DNS Statistics(内部域名统计)
◆External ACL stats(扩展ACL)
◆HTTP Header Statistics(HHTP包头统计)
◆Cache Utilization(缓存使用情况)
◆Full Histogram Counts(柱状图统计)
◆Process Filedescriptor Allocation(进程分配)
◆5 Minute Average of Counters(5分钟统计平均值)
◆60 Minute Average of Counters(60分钟统计平均值)
◆Cache Client List (缓存客户端列表)
◆General Runtime Information(squid服务器总体运行情况列表)见图8。

图8 Squid总体运行情
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。

图9 Firefox浏览器 https 安全性提示的界面
注意客户端如果使用IE的话,此时只有右下角的安全标志。通过SSL(Secure socket layer)进行HTTP传输的协议就是HTTPS,它不但通过公用密钥的算法进行加密保证传输的安全性,而且还可以通过获得认证证书CA,保证客户连接的服务器没有被假冒。
关注Squid代理服务器日志
Linux网络管理员应当尽量记录所有日志,这些日志会记录所有异常访问的线索。网络日志不是用来应付检查,而且它能够帮助你更好地从事网络管理工作。它记录了系统每天发生的各种各样的事情,包括哪些用户曾经或 者正在使用系统,可以通过日志来检查错误发生的原因,更重要的是在系统受到黑客攻击后,日志可以记录下攻击者留下的痕迹,通过查看这些痕迹,系统管理员可以发现黑客攻击的某些手段以及特点,从而能够进行处理工作,为抵御下一次攻击做好准备。
1.Squid日志格式
squid拥有完善的日志系统,但是对用户来说,以下的几个日志文件具有重要的意义:
access.log
该文件主要包含了客户访问的相关信息,如客户机的i p地址,访问的站点,访问的流量大小等等。一般的squid日志分析程序主要是基于该文件的。
cache.log
该文件包含着squid服务进程的相关信息,如启动的状态,错误信息等等。
store.log
该文件包含缓存中存储对象的相关信息,如对象存储的时间,对象的大小,对象超期的时间等等。
2.分析access.log日志文件
access.log日志文件的格式说明
由于access.log文件是最重要的一个日志文件,很多s q u i d的日志分析程序都是围绕该文件编写的(如计费,流量分析,热门站点等),所以在这里我们就着重讲述一下该日志文件的格式。access.log可以有两种基本的格式,一种native(原始日志文件)日志文件格式,另外一种是common(普通日志文件)日志文件格式。common日志文件格式包含的信息要比native日志文件格式来得少,并且native日志文件包含着许多管理员感兴趣的信息。默认时,squid采用native日志文件格式。如果要切换到common日志文件格式,可以更改emulate _ httpd _ log选项为on。
native日志文件格式如下所示:
time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type

图11 查看客户访问时间和用户请求所花费的时间
这种方式的优点是实时性强,显示的是当前正在访问的记录的情况。
4.使用专业软件分析
事实上, squid 已经有众多的日志分析软件了,而且大多是免费的,您可以依照自己的喜好来加以安装与分析你的 squid代理服务器。
pwebstatus( http://martin.gleeson.com/pwebstats
webalizer(http://www.mrunix.net/webalizer/
squid-graph(http://squid-graph.securlogic.com/
squidsites(http://www.stefanopassiglia.com/downloads.htm
sarg(http://sarg.sourceforge.net/
Webalizer工作方式不同于Linux命令,这个软件主要侧重于信息的汇总,如带宽、输入输出量,用于比较在不同的时间段网络的使用情况。可以从站点http://www.mrunix.net/webalizer/download.html下载,当前稳定版本是 2.01-10,提供RPM包和tar包格式的下载。Webalizer的配置文件是webalizer.conf,在/etc/目录下,安装后产生可执行命令webalizer,当命令执行时,寻找webalizer.conf配置文件,产生相应的输出。webalizer.conf的配置比较简单,主要是指定squid日志文件的目录位置及产生报告的输出目录,主要参数如下:“LogFile /var/log/squid/access.log”表示squid日志文件目录;“LogType squid”表示Webalizer报告文件的输出类型;“OutputDir /var/www/html/usage_squid/ ”表示报告文件的输出目录。
下面建立目录并且复制文件:
#mkdir /var/www/html/usage_squid/
#cp msfree.png webalizer.png /var/www/html/usage_squid/
配置文件修改完毕以后,需要定时webalizer,每天生成当日的统计分析。以root身份运行crontab -e进入定时运行任务编辑状态,加入如下任务:
$ 5 0 * * * /usr/bin/webalizer -f /etc/webalizer.squid.conf
这样定义在凌晨00:05对squid的日志进行统计分析。可以使用浏览器查看。方法:http://IP地址或者域名/usage_quid 。
- 最新评论
