对于Squid服务配置代理服务器可以参考博文: 利用Squid构建传统代理及透明代理
Squid服务的ACL访问控制
Squid提供了强大的代理控制机制,通过合理设置ACL(访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。
在配置文件squid.conf中,ACL访问控制通过两个步骤来实现:
-
使用acl配置项定义需要控制的条件;
- 通过http_access配置项对已经定义的列表做“允许”或“拒绝”的控制。
1.定义访问控制列表
每行acl配置可以定义一条访问控制列表,格式如下:
其中: “列表名称”由管理员自行指定,用来识别控制条件; “列表类型”必须使用Squid预定义的值,对应不同类别的控制条件; “列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分隔,是“或者”的关系)
定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的类型有很多种,如图:
在定义访问控制列表是,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。比如:
首先创建一个存放域名黑名单的文件: [[email protected] ~]# vim /etc/squid/dmblock.list .qq.com .msn.com //定义存放域名的文件,当然也可以创建存放IP地址的文件,在配置文件,引用一下即可格式跟引用地址文件一样 [[email protected] ~]# 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之后。
[[email protected] ~]# 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服务
[[email protected] ~]# squid -k reconfigure
关于规则的执行过程:
-
找到一条规则即不再向后搜索;
-
没有配置任何规则时,squid服务将拒绝客户端的请求;
- 有规则但找不到相匹配的项:squid将采用与最后一条规则相反的权限。即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求。
通常情况下,把最常用的控制规则放在最前面,以减少Squid的负载。早访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认规则。
3.验证访问控制效果
(1)测试访问权限限制(客户机处于传统代理)自行验证!
(2)测试文件下载限制
①在web服务器网页根目录下创建一个大于10M的文件:
[[email protected] ~]# if=/dev/zero of=/var/www/html/dltest.data bs=1M count=15
②在squid代理服务器上编辑配置文件,加上如下行:
[[email protected] ~]# vim /etc/squid.conf ……………… //省略部分内容 reply_body_max_size 10 MB //限制最大网站文件10MB [[email protected] ~]# squid -k reconfigure //重启Squid服务
客户机测试(不要用192.168.1.10进行访问)自行验证
Squid日志分析
SARG是一款Squid日志分析工具,采用HTML格式,详细列出每位用户访问Internet的站点信息,时间占用等信息,排名、连接次数、访问量等。
1.在squid本地安装GD库
[[email protected] ~]# yum -y install gd
2.安装SARG
sarg软件包网盘下载链接:https://pan.baidu.com/s/1WItXGVlvrLQ9TijB7CWLmQ
提取码:zh41
[[email protected] ~]# tar zxf sarg-2.3.7.tar.gz -C /usr/src [[email protected] ~]# cd /usr/src/sarg-2.3.7/ [[email protected] 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.配置
[[email protected] 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.运行
[[email protected] sarg-2.3.7]# touch /usr/local/sarg/noreport //上面的配置项中添加了不计入排序的站点,需要存在这个文件中。 //这个文件中添加的域名将不被显示在排序中。 [[email protected] sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin [[email protected] sarg-2.3.7]# sarg //启动sarg SARG: 纪录在文件: 21, reading: 100.00% SARG: 成功的生成报告在 /var/www/html/sarg/2019Aug17-2019Aug18 [[email protected] sarg]# systemctl start httpd #启动httpd服务,若没有该服务,须自行安装。