Squid代理服务器部署使用攻略(上)
Linux下的代理服务器软件很多,但是被广泛应用的只有Squid、socks、Apache等几个实践证明是高性能的代理软件。
一、各种代理服务器的比较
表-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
二、 Squid工作原理和流程图
1.代理服务器的工作机制
代理服务器的工作机制很像我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。
2.squid工作流程
图1是Squid工作原理图。

图1 Squid工作原理图
1.客户端计算机向 代理服务器 端发送一个数据需求封包;
2.代理服务器 端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,那么代理服务器 端会预计开始替客户端计算机获取信息。
3.代理服务器首先会到自己的硬盘里面,也就是所谓的 cache (缓存) 查看一下有没有 客户端计算机 端所需要的数据,如果有的话,那就将数据直接送到客户端计算机端,而不向互联网获取信息。
4. 将数据传回给客户端计算机端使用。
5.在经过以上三部查寻知道缓存没有数据,或者数据过期之后,代理服务器会向互联网上面的目标网站要求数据;
6.在将数据取回之后,代理服务器会先将取得的数据储存一份到缓存当中。
7.最后才将数据传回给客户端计算机 端使用。
三、安装和配置Squid 服务器
通常说来,安装Squid有两种方法:一是从Linux 发行版本中获取该软件的RPM包进行;二是安装从Squid的官方站点http://www.squid-cache.org/ 下载该软件的源码进行编译后安装。目前网上最新的稳定版本为squid-2.6.STABLE10,下面以前者为例进行介绍。首先要确认是否已经安装vsftpd可以使用以下命令查看:
如果在系统安装时已经把squid 安装上了,那么我们就可以直接对squid配置使用了。
也可以从Squid站点www.squid-cache.org 获取该软件的源代码安装包,包括gz和bz2两种压缩方式。
配置并保存好squid.conf后,可以用以下命令启动squid。
或者,使用RHEL 4.0的启动脚本来启动squid。
/etc/rc.d/init.d/squid start
同样,也可以用下列脚本停止运行squid或重启动squid。
/etc/rc.d/init.d/squid stop
/etc/rc.d/init.d/squid restart
判断squid已经正常启动方法:分别使用ps命令和netstat命令检查Squid代理组服务器允许情况,和端口使用情况,见图-2。

图-2查看Squid服务器运行进程和端口
如果你的Linux服务器终端桌面出现图2类似的情况表示Squid代理服务器运行正常。
理解Squid配置文件
Squid配置文件由一组文件组成见表2。

其中最重要的是squid.conf,squid.conf配置文件可以分为十三个部分,这十三个部分分别是:
1)NETWORK OPTIONS (有关的网络选项)。
2)OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM (作用于邻居
选择算法的有关选项)。
3)OPTIONS WHICH AFFECT THE CACHE SIZE (定义cache大小的选项)。
4)LOGFILE PATHNAMES AND CACHE DIRECTORIES (定义日志文件的路径cache的目录)。
5) OPTIONS FOR EXTERNAL SUPPORT PROGRAMS (外部支持程序选项)。
6) OPTIONS FOR TUNING THE CACHE (调整c a c h e的选项)。
7) TIMEOUTS(超时)。
8) ACCESS CONTROLS (访问控制)。
9) ADMINISTRATIVE PARAMETERS (管理参数)。
10) OPTIONS FOR THE CACHE REGISTRATION SERVICE (c a c h e注册服务选项)。
11) HTTPD-ACCELERATOR OPTIONS (H T T P D加速选项)。
12) MISCELLANEOUS (杂项)。
13) DELAY POOL PARAMETERS (延时池参数)。
理解squid的命令启动参数
Squid有很多命令参数,见图-3。

图-3 squid命令选项
对于Squid命令这里需要了解其参数,在开始其他事情之前,让我们先看一下squid 的命令行选项。这里的许多选项你会经常使用,另外有些仅仅在调试问题时有用。
squid 命令行选项
-a port :
指定新的http_port 值。该选项覆盖了来自squid.conf 的值。然而请注意,你能在quid.conf里指定多个值。-a 选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a 是因为在Harvest cache 里,HTTP 端口被叫做ASCII 端口) 。
-d level :
让squid 将它的调试信息写到标准错误(假如配置了,就是cache.log 和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1 工作良好。
-f file :
指定另一个配置文件。
-h :
显示用法。
-k function
指示squid 执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,or parse。
reconfigure 导致运行中的squid 重新读取配置文件。
rotate导致squid 滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。
shutdown 发送关闭squid 进程的信号。
interrupt 立刻关闭squid,不必等待活动会话完成。
kill 发送KILL 信号给squid,这是关闭squid 的最后保证。
debug 将squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。
check 简单的检查运行中的squid 进程,返回的值显示squid 是否在运行。
最后,parse 简单的解析squid.conf 文件,如果配置文件包含错误,进程返回非零值。
-s :
激活将日志记录到syslog 进程。squid 使用LOCAL4 syslog 设备。0 级别调试信息以优先级LOG_WARNING 被记录,1 级别消息以LOG_NOTICE 被记录。更高级的调试信息不会被发送到syslogd.你可以在/etc/syslogd.conf 文件里使用如下接口:
local4.warning /var/log/squid.log
-u port:
指定另一个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_host virtual 指令。
-X :
强迫完整调试模式,如你在squid.conf 文件里指定debug_options ALL,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
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。

图5cachemgr.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 总体运行情况
General Runtime Information是cachemgr.cgi监控Squid代理服务器的核心。包括:
Start Time:启动时间(GMT格林尼治标准时间格式)。
Current Time:当前时间。
Connection information for squid: Squid代理服务器连接信息。
Cache information for squid: Squid代理服务器缓存信息。
Median Service Times (seconds) 5 min 60 min: Squid代理服务器五分钟、60分钟相关统计信息。
Resource usage for squid: Squid代理服务器资源使用情况。
Memory usage for squid via mallinfo():Squid代理服务器内存统计。
Memory accounted for:内存占用结构。
File descriptor usage for squid:文件系统使用统计。
Internal Data Structures:内部数据使用比例。
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日志分析程序主要是基于该文件的。
- 最新评论
