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,可以看到生成的报表
-
计划 任务
可将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
上面规则定义好了,下面使用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
验证访问控制效果
还可以启用对象列表管理
[root@localhost sarg]# mkdir /etc/squid
[root@localhost sarg]# vim /etc/squid/dest.list192.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服务