【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析

目录

1· squid 配置ACL访问控制列表


2· squid 日志分析结合周期计划任务


3· squid 反向代理


4· 文章总结


开头说明:上篇文章详细介绍了 squid 的两种缓存代理方式和原理,这篇文章就不介绍 squid 这个服务,直接从 squid 的 ACL 访问控制列表开始。有兴趣的朋友可以看看:Squid 缓存服务器 之 传统代理 + 透明代理ACL 访问控制列表的基本概念Nginx + Tomcat 反向代理

源码包提供:

1·squid 源码包:百度网盘 Squid 源码包 , 密码:12sq


2·squid 日志:百度网盘 Squid 日志分析源码包 ,密码:sgwk


1)Squid 的ACL 访问控制介绍

squid提供了强大的代理控制机制,通过合理的设置 ACL 并进行限制,可以针对很多方式来进行条件过滤,比如有以下的方式:针对源地址、目标地址、访问的URL路径、访问的时间等。


配置ACL 的两个步骤
1:在主配置文件中使用 acl 配置项定义需要控制的条件
2:通过 http_access配置项对已定义的列表做 “允许” ,“拒绝” 访问的控制


**下面是定义控制列表和设置访问权限的格式**:

> 1· acl 【列表名称】【列表类型】【列表内容】。
【列表名称】:可以自定义,用来识别控制条件;
【列表类型】:必须是 squid 预定义值,对应不同类别的控制条件
【列表内容】:是要控制的具体对象,它可以由多个值,以空格分开


> 2· http_access 【allow】或 【deny】列表名称
【allow】:表示允许通过
【deny】:表示拒绝通过


以下表格是访问控制的列表类型:

列表类型 列表内容示列 含义 / 用途
src 192.168.1.168 或 192.168.1.0 源 IP 地址、网段
dst 216.163.137.3 或 www.baidu.com 目标 IP 地址、主机名或网段
port 80 、443 、8080 目标端口
dstdomain .qq.com 目标域,匹配域内的所有站点
time MTWHF 8:30-17:30 AS 使用代理的服务时间段,字母代表星期中的各天
manconn 20 每个客户机的并发连接数
url_regex url_regex -i ^rtsp:// 目标资源的 URL 地址,-i 表示忽略大小写
urlpath_regex urlpath_regex -i .mp3$ 目标资源的整个URL路径,-i 表示忽略大小写

在实际生产环境中,定义ACL 访问控制时,应该结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件,下面演示针对不同的客户机地址、需要限制访问的目标网站、特定的时间段.......分别定义:


[root@localhost squid-3.4.6]# vim /etc/squid.conf


acl locahost src 127.0.0.1/255.255.255.255----- #源地址为:127.0.0.1


acl MYLAN src 192.168.1.0/24---- #客户机网段


acl to_locahost src 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$ --- #以 .mp3 .mp4 结尾的 URL路径


acl WORKTIME time MTWHF 08:30-17:30 ----- #时间为周一至周无 8:30~17:30


下图是定义访问控制列表图解:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


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


[root@localhost squid-3.4.6]# mkdir /etc/squid
[root@localhost squid-3.4.6]# cd /etc/squid/
[root@localhost squid]# vim ipblock.list ----(建立目标IP地址名单)


建立的目标IP如下:
61.135.167.36
125.49.127.25
60.28.14.0/24


[root@localhost squid]# vim dmblock.list ----(建立目标域地址名单)


建立目标域如下:
.qq.com
.msn.com
.live.com


[root@localhost squid]# vim /etc/squid.conf ---(再次配置ACL 访问控制列表)


定义内容如下:
acl IPBLOCK dst "/etc/squid/ipblock.list" ---(调用指定文件中的列表内容)
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"


如下图
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


开始设置访问权限:

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


设置如下
http_access deny MYLAN MEDIAFILE ---(禁止下载 MP3、MP4等危文件)
http_access deny MYLAN IPBLOCK ---(禁止客户机访问黑名单中的 IP 地址)
http_access deny MYLAN DMBLOCK ---(禁止客户机访问黑名单中的网站域)
http_access deny MYLAN MC20 ----(客户机的并发连接超20时将被阻止)
http_access allow MYLAN WORKTIME ---(允许客户机在工作时间上网)
http_access deny all ---(默认禁止所有客户机使用代理)


如下图:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


访问控制规则说明: squid 将按照各条规则的顺序依次进行检测,如果找到了一天相匹配的规则就不再找。因此,规则的顺序安排时非常重要的


Squid 日志分析:

Sarg 是一款 Squid 日志分析工具,采用 HTML 格式,详细列出每一位用户访问 Internet 的站点信息、时间占用信息、排名、连接次数和访问量等。


Sarg 部署过程如下:


安装GD库
[root@localhost ~]# mkdir /usr/local/sarg


安装 Sarg :
[root@localhost ~]# tar xvf sarg-2.3.7.tar.gz -C /opt/ ----(解压源码包,需要的请点击:百度网盘 Squid 日志分析源码包


[root@localhost sarg-2.3.7]# cd /opt/sarg-2.3.7


[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg -sysconfdir=/etc/sarg --enable-extraprotection


[root@localhost sarg-2.3.7]# make && make install


如下图:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


[root@localhost sarg-2.3.7]# vim /etc/sarg/sarg.conf ---(修改配置文件)


内容如下
access_log /usr/local/squid/var/logs/access.log ---(去掉注释,指定squid访问日志文件)


title "Squid User Access Reports" ---(去掉注释,网页标题)


output_dir /var/www/html/squid-reports ----(去掉注释,sarg报告输出目录)


user_ip no ----(去掉注释,使用用户名显示)


exclude_hosts /usr/local/sarg/noreport ---(这里路径需要添加,意思是不计入排序的站点列表文件)


topuser_sort_field connect reverse ---(需要修改为connect ,意思是:#top排序中又链接次数、访问字节、降序排列)


user_sort_field connect reverse ---(用户访问记录 连接次数、访问字节按降序排列)


overwrite_report no ---(当那个报告存在,是否覆盖报告)


mail_utility mailx.postfix ---(发送邮件报告)


charset UTF-8 ---(使用字符集)


weekdays 0-6 ---(top排行的星期周期)


hours 0-23 ---(去掉注释,top排行的时间周期)


www_document_root /var/www/html ---(指定网页根目录)


上述配置中,添加了不计入排序的站点,需要存在下面这个文件
[root@localhost sarg-2.3.7]# touch /usr/local/sarg/noreport


因为这个sarg是需要访问web来查看日志的,所以需要安装个apache
[root@localhost sarg-2.3.7]# yum install httpd -y


启动 apache 服务
[root@localhost sarg-2.3.7]# systemctl start httpd.service


[root@localhost ~]# mkdir /var/www/html/squid-reports
[root@localhost sarg-2.3.7]# sarg ---(启动sarg)


访问:http://192.168.106.154/squid-reports/ ---(相当于多网站访问)
如下效果图:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


可以将 sarg 做成计划任务,定期执行:

每日报告如下实列:
[root@localhost ~]# vim /usr/local/sarg/daily.sh


内容如下
#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
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-$TODAT &>/dev/null


如下图:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


[root@localhost ~]# chmod +x /usr/local/sarg/daily.sh
[root@localhost ~]# crontab -e ---(添加计划任务,每天 00:00 执行)


加入如下内容:
00 00 * /usr/local/sarg/daily.sh


[root@localhost ~]# chkconfig crond on


到这里日志分析完成,在生产环境中,考虑到多中因素,所以每日报告在 0点0份开始生成


Squid 反向代理:

许多大型的门户网站架构中都采用了反向代理加速,使用比较多的是 nginx 、squid 等。
下图是squid 反向代理拓扑
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


反向代理原理描述

(1)Squid 反向代理服务器位于本地 Web 服务器和 Internet 之间,客户端访问 Web 时,DNS 将访问的域名解析为 Squid 反向代理服务器的IP地址。客户端将访问 Squid 代理服务器


(2)如果Squid 反向代理服务器中缓存了改请求的资源,则将资源直接返回给客户端,否则squid将向后台的web服务器拿资源,提供给客户端并缓存在本地。


开始实现 Squid 反向代理。


[root@localhost ~]# vim /etc/squid.conf --(修改配置文件)


修改内容如下:

http_port 192.168.106.154:80 accel vhost vport ---(修改监听地址和端口,这里端口不再是3128,而是需要改为 http 的80 端口)


cache_peer 192.168.106.156 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 ----(添加后端真的服务器的IP地址1,指定做大连接数,权重,别名)


cache_peer 192.168.106.157 parent 80 0 no-query originserver round-robin max_conn=30 weight=2 name=web2 ----(添加后端真的服务器的IP地址2,指定做大连接数,权重,别名)


cache_peer_domain web1 web2 www.yun.com ---(访问的是域名,所以需要做DNS,现在可以直接修改 hosts 文件就好)


检查配置文件:
[root@localhost ~]# squid -k parse ---(检查配置文件,发现有报错)

报错信息如下:
2018/09/23 14:39:06| ERROR: Ignoring unknown cache_peer option 'max_conn=30'
//就是说配置文件现在不识别 ”max_conn=30“ 。那 我们就删除它。


下图是报错截图
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


正确的配置文件如下图
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


下面需要修改hosts 配置文件,因为 我们访问的是域名。如下图:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


验证:

【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


需要看到另一个结果,就要停掉其中一台web服务器:
[root@localhost ~]# systemctl stop httpd.service


再次访问:
【超详细】反向代理Squid 缓存服务器+ ACL 访问控制 + 日志分析


反向代理的结论:

如果不停掉一台服务器,那么你的请求将会是一个结果,因为你请求的结果已经缓存在了squid服务器上,所以需要更完善的验证,就需要关闭另一台web服务器,看看是否能得到不同的结果。


文章总结

(1)squid 服务的访问控制主要通过 acl 、http_access 配置项来设置,acl 用来定义控制条件、http_access 来决定通过还是拒绝。


(2)squid 日志分析工具 Sarg 采用的是 HTML 格式,所以要查看还需要搭建WEB服务器,比如 apache。它会详细列出用户的所有信息


(3)通过 squid 反向代理可以加速网站的访问速度,可以将不同的URL 请求分到不同后台的web服务器上,这样互联网用户只能看到代理服务器的地址。


与本文章相关的推荐文章:

(1):Squid 缓存服务器 之 传统代理 + 透明代理


(2):ACL 访问控制列表的基本概念


(3):Nginx + Tomcat 反向代理

猜你喜欢

转载自blog.51cto.com/13746824/2235402