部署squid服务及配置传统代理参考博文:Centos 7安装Squid代理服务及构建传统代理
配置squid透明代理参考博文:Centos7安装Squid代理服务及配置透明代理

一、ACL访问控制

squid提供了强大的代理控制机制,通过合理设置ACL并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。在配置文件squid.conf中,ACL访问控制通过两个步骤来实现:其一、使用ACL配置项定义需要控制的条件;其二、通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1、定义访问控制列表

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

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

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

通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的列表类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等,如下表:
Centos 7的squid服务器配置ACL访问控制及日志分析

ACL定义示例:

[root@centos02~ ]# vim /etc/squid.conf
                             ..........................
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network    <!--squid默认的一些ACL-->
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network    <!--默认存在-->
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network    <!--默认存在-->
acl localhost src 127.0.0.1/255.255.255.255            <!--源地址为127.0.0.1-->
acl mylan src 192.168.1.0/24 192.168.4.0/24          <!--客户机网段-->
acl to_localhost dst 127.0.0.0/8                        <!--目标地址为127.0.0.0/8网段-->
acl mc20 maxconn 20                              <!--最大并发连接量为20-->
acl blackurl url_regex -i ^rtsp:// ^emule://              <!--以rtsp://等开头的URL-->
acl mediafile urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$    <!--以.mp3等结尾的URL路径-->
acl worktime time MTWHF 9:00-18:00                 <!--时间为周一至周五的 9:00-18:00-->   
                              ........................

当需要限制的同一类对象较多时,可以使用独立的文件来存放,在acl配置行的内容处指定对应的文件位置即可。如下:

[root@centos02~ ]# mkdir /etc/squid
[root@centos02~ ]# cd /etc/squid
[root@centos02 squid]# vim ipblock.list         <!--建立目标IP地址名单-->

61.135.167.36
125.39.127.25
60.28.14.0

[root@centos02 squid]# vim dmblock.list         <!--建立目标域地址名单-->

.qq.com
.msn.com
.live.com
.verycd.com

[root@centos02 squid]#  vim /etc/squid.conf                  

acl ipblock dst "/etc/squid/ipblock.list"           <!--调用指定文件中的列表内容-->
acl dmblock dstdomain "/etc/squid/dmblock.list"

当ACL设置好后,还需要通过http_access配置项来进行控制。必须注意的是,http_access配置行必须放在对应的acl配置行之后。每行http_access配置确定一条访问规则,格式如下:

http_access allow或deny 列表名

将刚才定义的acl应用到规则中,如下:

[root@centos02 squid]# vim /etc/squid.conf
                        ......................
http_access deny !Safe_ports     <!--squid默认存在的访问权限-->
http_access deny mediafile        <!--禁止客户机下载mp3等文件-->
http_access deny ipblock              <!--禁止客户机访问黑名单中的IP地址-->
http_access deny dmblock              <!--禁止客户机访问黑名单中网站域-->
http_access deny mc20        <!--客户机的并发连接量超过20时将被阻止-->
http_access allow worktime           <!--允许客户机在工作时间内上网-->
reply_body_max_size 10 MB        <!--允许下载的最大文件大小(10M)-->
                            .......................
http_access deny all  <!--默认禁止所有客户机使用代理,squid默认存在的访问权限-->

在配置访问权限时,需要注意以下几点 :

  • 每条http_access规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,是“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。

  • 需要使用取反条件时,可以在访问控制列表前添加“ !”符号。

  • 执行访问控制时,squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点和iptables的规则匹配类似)。因此,规则的顺序非常重要。

  • 没有设置任何规则时,squid服务将拒绝客户端的请求。这也就是为什么配置文件中默认存在三个内网网段的ACL规则,若想拒绝默认存在的三个网段中某个,还需将其注释掉,再进行限制,以免发生冲突,造成访问规则不生效。

  • 有规则但找不到相匹配的项:squid将采用与最后一条规则相反的动作,即如果最好一条规则是allow,就拒绝客户端的请求,否则允许该请求,默认存在的最后一条规则为“http_access deny all ”
    通常情况下,把最常用的控制规则放在最前面,以减少squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式。

二、squid日志分析

为了使我们查看日志更为直观一些,可以使用SARG,它是一款squid日志分析工具,采用HTML格式, 详细列出每位用户访问Internet的站点信息,时间占用信息、排名、连接次数、访问量等。

1、导入gd包

1)导入gd包

[root@centos02 ~]# rz  

Centos 7的squid服务器配置ACL访问控制及日志分析

[root@centos02 ~]# ls
anaconda-ks.cfg  gd-devel-2.0.35-11.el6.x86_64.rpm  initial-setup-ks.cfg

2、安装及配置sarg

[root@centos02 ~]# mount /dev/cdrom /mnt/  <!--挂载linux光盘-->
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# tar zxvf /mnt/sarg-2.3.7.tar.gz -C /usr/src/ 
          <!--解压缩sarg软件包-->
[root@centos02 ~]# umount /mnt/   <!--卸载光盘-->
[root@centos02 ~]# mount /dev/cdrom /mnt/  <!--挂载操作系统盘-->
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# rm -rf /etc/yum.repos.d/CentOS-* 
[root@centos02 ~]# yum -y install gd gd-devel httpd 
            <!--安装sarg依赖软件-->
[root@centos02 ~]# rpm -ivh gd-devel-2.0.35-11.el6.x86_64.rpm 
<!--检查sarg软件所需的依赖-->
[root@centos02 ~]# rpm -ivh gd-devel-2.0.35-11.el6.x86_64.rpm --nodeps    <!--强制忽略依赖关系安装gd-devel-->
[root@centos02 ~]# rpm -qa | grep gd <!--检查是否安装成功-->
[root@centos02 ~]# rpm -qa | grep gd-devel <!--检查是否安装成功-->
[root@centos02 ~]# rpm -qa | grep httpd <!--检查是否安装成功-->
[root@centos02 ~]# mkdir /usr/local/sarg  <!--创建安装sarg目录-->
[root@centos02 ~]# cd /usr/src/sarg-2.3.7/   <!--进入sarg目录-->
[root@centos02 sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection    <!--配置sarg-->
[root@centos02 sarg-2.3.7]# make && make install <!--安装sarg-->
[root@centos02 sarg-2.3.7]# ls -ld /etc/sarg/        
                <!--查看是否生成配置文件-->
drwxr-xr-x 2 root root 83 11月 18 10:35 /etc/sarg/     
[root@centos02 sarg-2.3.7]# ls -ld /usr/local/sarg/   
                <!--查看是否生成配置文件-->
drwxr-xr-x 4 root root 30 11月 18 10:35 /usr/local/sarg/
[root@centos02 ~]# cp /etc/sarg/sarg.conf /etc/sarg/sarg.conf.bak <!--备份sarg主配置文件-->
[root@centos02 ~]# vim /etc/sarg/sarg.conf  <!--修改sarg主配置文件-->
8 access_log /usr/local/squid/var/logs/access.log  
                      <!--指定squid的访问日志文件-->
27 title "Squid User Access Reports"  <!--网页标题-->
122 output_dir /var/www/html/squid-reports  <!--sarg报告的输出目录-->
182 user_ip no      <!--使用用户名显示-->
189 topuser_sort_field BYTES reverse     <!--在top排序中,指定连接次数、访问次数,
采用降序排序,升序将reverse换成normal-->
196 user_sort_field BYTES reverse <!--对于用户访问记录,
连接次数按降序排序-->
211 exclude_hosts /usr/local/sarg/noreport     
                              <!--指定不计入排序的站点列表文件-->
265 overwrite_report no  <!--当那个日期报告已经存在,是否覆盖报告-->
298 mail_utility mailx   <!--发送邮件报告的命令-->
444 charset utf-8      <!--使用字符集-->
529 weekdays 0-6     <!--指定top排序时的星期周期,0为周日-->
537 hours 0-23         <!--指定top排序时的时间周期-->
646 www_document_root /var/www/html       <!--网页根目录-->
[root@centos02 ~]# mkdir -p /usr/local/sarg/noreport 
          <!--创建不计入排序的目录-->
[root@centos02 ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/  
<!--优化执行命令-->
[root@centos02 ~]# sarg       <!--执行sarg启动一次记录-->
SARG: 纪录在文件: 27, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2019Nov18-2019Nov18
[root@centos02 ~]# systemctl start httpd   <!--启动httpd服务-->
[root@centos02 ~]# systemctl enable httpd <!--设置开机自动启动-->

3、windows客户端用浏览器访问测试

http://192.168.100.20/squid-reports/
Centos 7的squid服务器配置ACL访问控制及日志分析

http://192.168.100.20/sarg/
Centos 7的squid服务器配置ACL访问控制及日志分析

三、编写定期刷新日志的脚本

[root@centos02 ~]# vim log.sh  <!--创建脚本-->
#!/bin/bash
TD=$(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 $YETD_$TD &> /dev/null
exit 0
[root@centos02 ~]# chmod +x log.sh   <!--脚本添加执行权限-->
[root@centos02 ~]# ./log.sh &   <!--执行脚本-->
[1] 7798
[root@centos02 ~]# vim /etc/rc.d/rc.local    
          <!--将脚本添加至开机自动启动配置文件中-->
/root/log.sh
[root@centos02 ~]# chmod +x /etc/rc.d/rc.local  <!--添加执行权限-->

—————— 本文至此结束,感谢阅读 ——————