Squid日志分析

  • Sarg全名是Squid Analysis Report Generator 是一款 Squid日志分析工具,采用Html格式,可以列出每一位用户访问Internet的站点信息,时间占用信息,排名,连接次数,访问量等

squid采用传统代理模式,具体操作可参考另一篇文章《搭建squid缓存代理服务(传统代理,透明代理,反向代理)》

需要的安装包:百度云盘免费提供

sarg-2.3.7.tar.gz: https://pan.baidu.com/s/190Lkx2BnqMjZUUinuysggg 

squid-3.4.6.tar.gz: https://pan.baidu.com/s/114jVkk-fo9P_KwkdKH3xUg

日志分析工具Sarg的部署;

  • .安装GD库,httpd服务,并启动httpd服务

yum install -y gd gd-devel httpd

service httpd start

  • 安装sarg

tar xvf sarg-2.3.7.tar.gz

cd sarg-2.3.7/

./configure --prefix=/usr/local/sarg \             #指定安装路径

--sysconfdir=/etc/sarg \                    #指定配置文件目录

--enable-extraprotection                      #添加额外的安全保护

make && make install

  • 修改配置文件,很多参数选项是被注释的,大部分选项去掉前面的注释,个别需要进行修改

cd /etc/sarg/

vim sarg.conf

7 access_log /usr/local/squid/var/logs/access.log          #指定squid的访问日志文件
25 title "Squid User Access Reports"                    #网页标题
120 output_dir /var/www/html/sarg              #sarg报告的输出目录
178 user_ip no                            #不显示用户名ip
206 exclude_hosts /usr/local/sarg/noreport          #指定不计入排序的站点列表文件
184 topuser_sort_field connect reverse              #在top排序中,指定连接次数,访问字节数,采用降序排序,升序将reverse换成normal
190 user_sort_field connect reverse          #对于用户访问记录,连接次数按降序排序
257 overwrite_report no              #当那个日期报告已经存在,是否覆盖报告
289 mail_utility mailq.postfix               #发送邮件报告的命令
434 charset UTF-8                   #使用字符集
518 weekdays 0-6                                         #指定top排序时的星期周期,0为周日
525 hours 0-23                                  #指定top排序时的时间周期
633 www_document_root /var/www/html          #网页根目录

  • 为不计入排序的站点准备配置文件,文件中添加的域名不被显示在排序中

cd /usr/local/sarg/

touch noreport

  • 设置命令符号连接,方便执行sarg

ln -s /usr/local/sarg/bin/* /usr/local/bin/

  • 直接执行sarg即可启动一次记录,

sarg               
SARG: 纪录在文件: 258, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2018Sep23-2018Sep23

  • 验证

多次执行sarg后,在客户端上访问http://192.168.30.1/squid-reports,可以看到生成的报表

squid代理服务的日志分析与ACL访问控制_第1张图片

  • 计划 任务

可将sarg做成计划任务,定期执行。如下示例,写个每日报告:

vim /usr/local/sarg/daily.sh             #每日报告

#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get one week ago today
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)

/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null

exit 0

 

chmod +x /usr/local/sarg/daily.sh

crontab -e                #添加计划任务,每天00:00执行

00 00 * * * /usr/local/sarg/daily.sh

chkconfig crond on

ACL 访问控制

  • Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)进行限制,可以针对源地址,目标地址,访问的URL路径,访问的时间等进行条件过滤

  • 在squid.conf文件中,HTTP的访问控制主要由 acl 和 http_access 共同实现,控制条件和实施控制

    1)使用acl定义需要控制的条件

    2)通过http_access对已定义的列表做allow或deny访问控制

定义acl访问控制列表

  • 每一行acl配置可以定义一条访问控制列表,格式如下。

acl 列表名称 列表类型 列表内容....

其中,"列表名称"由管理员自行定义,用来识别控制条件;

”列表类型“必须使用squid预定义的值,对应不同类别的控制条件;

“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(使用空格间隔。都为“或”的关系)。

  • 常用的访问控制列表类型

列表类型 列表内容实例 用途、含义
src 192.168.1.100
192.168.1.0/24
192.168.1.0-192.168.3.0/24
源IP地址、网段、IP范围
dst 216.163.137.3
61.135.167.0/24
www.playboy.com
目标IP地址、网段、主机名
port 80 443 8080 21 20 目标端口
dstdomain .qq.com .sina.com 目标域、匹配域内所有站点
time MTWHF 8:30-17:30 
12:00-1300
AS
使用代理服务的时间段
字母表示一星期中各天的英文缩写

M-Monday、T-Tuesday、W-Wednesday 、H-Thursday

F-Friday、A-Saurday、S-Sunday

maxconn 20 每个客户的并发连接数
url_regex url_regex -i ^rtsp://
url_regex -i ^emule://
目标资源的URL路径, -i 不区分大小写
urlpath_regex urlpath_regex -i \.mp3$
urlpath_regex -i sex adult
目标资源的整个URL路径, -i 表示忽略大小写

下面定义几个规则实例,并解释其中含义

vim /etc/squid.conf

acl localhost src 192.168.30.20/255.255.255.255 //源地址为192.168.30.20

acl destination dst 192.168.30.15/32          //目标地址为192.168.30.15

acl MC20 maxconn 20                //最大并发连接数20

acl work time MTWHF 08:30-17:30     //时间为周一至周五8:30-17:30

squid代理服务的日志分析与ACL访问控制_第2张图片

上面规则定义好了,下面使用http_access 来确定允许还是拒绝

http_access deny destination

http_access allow localhost
http_access allow work

执行访问控制时,squid将按照各规则顺序依次检查,如果找到一条规则匹配就停止(有点类似iptables的规则匹配),因此,规则的顺序安排是非常重要的。有两种默认情况需要注意

  • 没有设置任何规则时,squid服务器将拒绝所有客户端的请求;

  • 有规则但找不到匹配的项,squid将采用与最后一条规则相反的权限,即如果最后一条规则是allow,那么就拒绝客户端请求,否则就允许。

通常情况下,将常用规则放到前面,减少squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式。最后加上一条设为默认策略。 http_access allow all 或者 http_access deny all

 

验证访问控制效果

squid代理服务的日志分析与ACL访问控制_第3张图片

squid代理服务的日志分析与ACL访问控制_第4张图片 

还可以启用对象列表管理

[root@localhost sarg]# mkdir /etc/squid
[root@localhost sarg]# vim /etc/squid/dest.list

192.168.30.10
192.168.10.50
12.0.0.12
192.168.30.33

[root@localhost sarg]# vim /etc/squid.conf

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl dest dst "/etc/squid/dest.list"                #定义规则(文件的绝对路径)
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 p

# Only allow cachemgr access from localhost
http_access deny dest                              #拒绝列表(注意置顶)  

[root@localhost sarg]# service squid restart
停止 squid服务
启动 squid服务

验证访问控制效果

squid代理服务的日志分析与ACL访问控制_第5张图片  

 squid代理服务的日志分析与ACL访问控制_第6张图片