【超详细】反向代理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
下图是定义访问控制列表图解:
如果当需要限制的同一类对象较多时,可以使用独立的文件来存放,在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"
如下图:
开始设置访问权限:
[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 将按照各条规则的顺序依次进行检测,如果找到了一天相匹配的规则就不再找。因此,规则的顺序安排时非常重要的
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
如下图:
[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/ ---(相当于多网站访问)
如下效果图:
可以将 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
如下图:
[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 反向代理拓扑:
反向代理原理描述:
(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“ 。那 我们就删除它。
下图是报错截图:
正确的配置文件如下图:
下面需要修改hosts 配置文件,因为 我们访问的是域名。如下图:
验证:
需要看到另一个结果,就要停掉其中一台web服务器:
[root@localhost ~]# systemctl stop httpd.service
再次访问:
反向代理的结论:
如果不停掉一台服务器,那么你的请求将会是一个结果,因为你请求的结果已经缓存在了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 反向代理
本文名称:【超详细】反向代理Squid缓存服务器+ACL访问控制+日志分析
标题URL:http://ybzwz.com/article/jcghos.html