柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: 网络与安全
2013-03-13 09:38:31
一、各种代理服务器的比较
表-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的官方站点 下载该软件的源码进行编译后安装。目前网上最新的稳定版本为squid-2.6.STABLE10,下面以前者为例进行介绍。首先要确认是否已经安装vsftpd可以使用以下命令查看:
[rpm -q squid]
如果在系统安装时已经把squid 安装上了,那么我们就可以直接对squid配置使用了。
也可以从Squid站点 获取该软件的源代码安装包,包括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,添加以下内容
AuthTypeBasic
AuthNamw"Squidadmin"
AuthUserFile/usr/local/squid/etc/squid.pwd
require valid-user
生成口令文件:
#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日志分析程序主要是基于该文件的。
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日志文件格式如下所示:
time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
子段说明见下表
3. 使用Linux命令
如果我们仅仅需要查看某一个字段,可以用awk命令,它把一个记录行分割成多个字段,我们使用参数传回需要的字段。命令如下:
# tail -f /var/log/squid/access.log | awk '{print$3 " " $8 " " $7}'
这里选择的是客户访问时间和用户请求所花费的时间,显示见图10:
图10查看客户访问时间和用户请求所花费的时间
这种方式的优点是实时性强,显示的是当前正在访问的记录的情况。
4 使用专业软件分析
事实上, squid 已经有众多的日志分析软件了,而且大多是免费的,您可以依照自己的喜好来加以安装与分析你的 squid代理服务器。
pwebstatus(
webalizer(
squid-graph(http://squid-graph.securlogic.com/
squidsites(
sarg(
1.Webalizer
Webalizer工作方式不同于Linux命令,这个软件主要侧重于信息的汇总,如带宽、输入输出量,用于比较在不同的时间段网络的使用情况。可以从站点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的日志进行统计分析。可以使用浏览器查看。方法:地址或者域名/usage_quid 。工作界面见图11.
图11 Webalizer 工作界面
也可以通过命令行配置webalizer,也可以通过配置文件进行配置,在下面我们将介绍使用命令行参数进行配置,需要了解配置文件使用方法的朋友可以参考README文件,里面有很详细的介绍。
2. 用Squid-Graph进行监测
Squid-Graph是用Perl语言写成的,但正如它的名字一样,它用图形化的方法产生squid代理的使用情况,它产生一些综合信息。可以从站点http://squid-graph.securlogic.com/files/stable/squid-graph-3.1.tar.gz下载这个软件,这个软件是目前最后一个可获得的版本。这个程序的执行需要使用Perl GD模块,名称一般为GD.pm,是perl的绘图模块,其功能类似于市面上的许多图形程序。利用GD,我们展示如何创建几何图形,以及如何进行图像处理,这个模块可在软件发行版本的CD上找到,也可以从站点下载。
把下载的软件放到/usr/local/目录,进行解压。执行如下命令:
#cd /usr/local/
# tar xvzf squid-graph-3.1.tar.gz
# mv squid-graph-3.1 squid-graph
# cd squid-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="Squid server usage " < /var/log/squid/access.log
上面的这个命令用-c选项产生累计图形,用-n选项指定在命令执行过程中不向屏幕上输出信息,-o选项指定输出文件的目录,-title选项指定自定义的输出文档标题,图12是一个输出示例。
图12 squid-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's usage"
3. 用Calamaris进行监测
Calamaris是一个用perl语言写成的程序,如果要使用的话,首先系统里要安装perl解释器。它产生Squid日志的详细报告,包括按高峰时间时的使用情况、流进网内流量、流出流量、进出UDP包、进出TCP包、请求的二级或三级域名产生的报告文档。除用于Squid日志产生的日志分析外,它还可用于其他形式的代理服务软件产生的日志,如NetCache、Inktomi Traffic Server、Oops! proxy server、Novell InterNet Caching System等。
安装Calamaris也很简单,首先从站点下载Calamaris V2.59到/usr/local/目录。执行以下命令:
#cd /usr/local/
#tar xvzf calamaris-2.59.tar.gz
# cd calamaris-2.59
解压后的目录包含可执行文件calamaris,无须安装,直接使用即可,比如用以下命令使Calamaris处理squid日志文件,产生html格式的文件,并输出到/var/www/html/calamaris/index.html。然后执行如下命令就可以查看输出报告了。
#/usr/local/calamaris/calamaris -a -F html /var/log/squid/access.log>/var/www/html/calamaris/index.html
对一般的应用来讲,上面的命令产生了最详细的输出报告,我们用命令选项-a表示产生所有类型的报告,用选项-F html表示产生html格式的文档。/var/log/squid/access.log表示squid日志文件的存放位置,/var/www/html/calamaris/index.html表示输出的文件名。当产生报告文件后,在客户端用浏览器可进行浏览。 命令行下工作界面见图13
图13 Calamaris 工作界面
总结:squid的安装维护中需要注意以下问题:理解代理服务器工作流程;全面监控代理服务器Squid运行情况;输入分析注Squid代理服务器的日志。