对于Squid服务的部署可以参考博文:Squid代理服务器安装及部署 对于Squid服务配置代理服务器可以参考博文:利用Squid构建传统代理及透明代理

Squid服务的ACL访问控制

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

在配置文件squid.conf中,ACL访问控制通过两个步骤来实现:

  • 使用acl配置项定义需要控制的条件;

  • 通过http_access配置项对已经定义的列表做“允许”或“拒绝”的控制。

1.定义访问控制列表

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

其中: “列表名称”由管理员自行指定,用来识别控制条件; “列表类型”必须使用Squid预定义的值,对应不同类别的控制条件; “列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分隔,是“或者”的关系)


定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的类型有很多种,如图:
![](https://s1.51cto.com/images/blog/201908/17/ad4b75c480056472bb4d74324c39311c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。比如:

首先创建一个存放域名黑名单的文件: [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配置确定一条访问控制规则。语法格式:
![](https://s1.51cto.com/images/blog/201908/17/a7d42ac2b6062f0299cb1442466ad829.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**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服务,若没有该服务,须自行安装。


#### 5.验证

![](https://s1.51cto.com/images/blog/201908/17/4666e0a71ec99cb388d47a6d9cce4d13.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)