对于Squid服务的部署可以参考博文:Squid代理服务器安装及部署
对于Squid服务配置代理服务器可以参考博文:利用Squid构建传统代理及透明代理
Squid服务的ACL访问控制
Squid提供了强大的代理控制机制,通过合理设置ACL(访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。
在配置文件squid.conf中,ACL访问控制通过两个步骤来实现:
-
使用acl配置项定义需要控制的条件;
- 通过http_access配置项对已经定义的列表做“允许”或“拒绝”的控制。
1.定义访问控制列表
其中: “列表名称”由管理员自行指定,用来识别控制条件; “列表类型”必须使用Squid预定义的值,对应不同类别的控制条件; “列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分隔,是“或者”的关系)
定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的类型有很多种,如图:
在定义访问控制列表是,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。比如:
首先创建一个存放域名黑名单的文件:
[root@www ~]# vim /etc/squid/dmblock.list
.qq.com
.msn.com
//定义存放域名的文件,当然也可以创建存放IP地址的文件,在配置文件,引用一下即可格式跟引用地址文件一样
[root@www ~]# vim /etc/squid.conf
……………… //省略部分内容
acl MYLAN src 192.168.1.0/24
//定义列表名为MYLAN,源地址为192.168.1.0网段
acl MEDIAFILE urlpath_regex -i \.3gp$ \.mp4$ \.f4v$ \.mkv$ \.rmvb$ \.avi$
//定义列表名为MEDIAFILE,以 .3gp、.mp4、.f4v、.mkv、.rmvb、.avi结尾的URL路径
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
//定义列表名为DMBLOCK,目标域存放在etc/squid/dmblock.list文件中
acl deny10 src 192.168.1.10
//定义列表名为deny10,源地址为192.168.1.10
acl WORKTIME time MWTHF 08:30-17:30
//定义列表名称为WORKTIME,时间为周一到周五8:30~17:30
2.设置访问权限
定义好各种访问控制列表以后,需要使用http_access配置项来进行控制,必须注意的是,http_access配置航必须放在对应的acl配置行之后。每行http_access配置确定一条访问控制规则。语法格式:
http_access语句使用说明:
-
每一条http_access规则中,可以同时包含多个控制列表,空格分隔,为“与”的关系;
-
取反条件时,用!符号;
- http_access必须放在acl之后。
[root@www ~]# vim /etc/squid.conf ……………… //省略部分内容 http_access deny deny10 //禁止列表deny10 http_access allow MYLAN WORKTIME Safe_ports !MEDIAFILE !DMBLOCK //允许列表MYLAN、WORKTIME、Safe_ports列表和与MEDIAFILE和DMBLOCK列表条件相反的 http_access deny all //默认禁止所有客户机使用代理
设置完成之后重启Squid服务
[root@www ~]# squid -k reconfigure
关于规则的执行过程:
-
找到一条规则即不再向后搜索;
-
没有配置任何规则时,squid服务将拒绝客户端的请求;
- 有规则但找不到相匹配的项:squid将采用与最后一条规则相反的权限。即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求。
通常情况下,把最常用的控制规则放在最前面,以减少Squid的负载。早访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认规则。
3.验证访问控制效果
(1)测试访问权限限制(客户机处于传统代理)自行验证!
(2)测试文件下载限制
①在web服务器网页根目录下创建一个大于10M的文件:
[root@localhost ~]# if=/dev/zero of=/var/www/html/dltest.data bs=1M count=15
②在squid代理服务器上编辑配置文件,加上如下行:
[root@www ~]# vim /etc/squid.conf
……………… //省略部分内容
reply_body_max_size 10 MB
//限制最大网站文件10MB
[root@www ~]# squid -k reconfigure
//重启Squid服务
客户机测试(不要用192.168.1.10进行访问)自行验证
Squid日志分析
SARG是一款Squid日志分析工具,采用HTML格式,详细列出每位用户访问Internet的站点信息,时间占用等信息,排名、连接次数、访问量等。
1.在squid本地安装GD库
[root@www ~]# yum -y install gd
2.安装SARG
sarg软件包网盘下载链接:https://pan.baidu.com/s/1WItXGVlvrLQ9TijB7CWLmQ
提取码:zh41
[root@www ~]# tar zxf sarg-2.3.7.tar.gz -C /usr/src
[root@www ~]# cd /usr/src/sarg-2.3.7/
[root@www sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg \
--enable-extraprotection && make && make install
配置项含义如下:
--prefix=/usr/local/sarg:指定安装目录;
--sysconfdir=/etc/sarg:配置文件目录,若不指定,默认是/usr/local/etc;
--enable-extraprotection:添加额外的安全保护
3.配置
[root@www sarg-2.3.7]# vim /etc/sarg/sarg.conf
......................
#若只实现基本的功能,则配置以下三项即可:
access_log /usr/local/squid/var/logs/access.log #指定squid的访问日志文件
output_dir /var/www/html/sarg #sarg报告的输出目录,指向网站的根目录下
www_document_root /var/www/html #网页根目录
#其余一些优化的配置项如下,根据需求来改即可:
title "Squid User Access Reports" #网页标题
user_ip no #使用用户名显示
exclude_hosts /usr/local/sarg/noreport #指定不计入排序的站点列表文件
topuser_sort_field connect BYTES reverse
#在top排名中,指定连接次数、访问字节数,采用降序排列,升序将reverse换成normal即可。
user_sort_field connect reverse #对于用户访问记录,连接次数按降序排列
overwrite_report no #当那个日期报告已经存在,是否覆盖报告
mail_utility mailq.postfix #发送邮件报告的命令
charset utf-8 #使用字符集
weekdays 0-6 #指定top排序时的星期周期,0为周日。
hours 7-12,14,16,18-20 #指定top排序时的时间周期。
4.运行
[root@www sarg-2.3.7]# touch /usr/local/sarg/noreport
//上面的配置项中添加了不计入排序的站点,需要存在这个文件中。
//这个文件中添加的域名将不被显示在排序中。
[root@www sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin
[root@www sarg-2.3.7]# sarg //启动sarg
SARG: 纪录在文件: 21, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/sarg/2019Aug17-2019Aug18
[root@localhost sarg]# systemctl start httpd #启动httpd服务,若没有该服务,须自行安装。