Squid之ACL访问控制、日志分析及反向代理

Squid之ACL访问控制、日志分析及反向代理

一、ACL访问控制

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

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

(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1、ACL 规则优先级

  • 一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
  • 所有规则都不匹配时,Squid会使用与最后一条相反的规则

2、定义访问控制列表格式

常用的ACL列表类型

 3、定义访问控制列表格式模板

vim /etc/squid.conf
......
acl localhost src 192.168.70.5/32                     #源地址为 192.168.70.5
acl MYLAN src 192.168.70.0/24                        #客户机网段
acl destionhost dst 192.168.70.10/32                #目标地址为 192.168.70.10
acl MC20 maxconn 20                                    #最大并发连接 20
acl PORT port 21                                    #目标端口 21
acl DMBLOCK dstdomain .qq.com                        #目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule://            #以 rtsp://、emule:// 开头的 URL,-i表示忽略大小写
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$        #以 .mp3、.mp4、.rmvb 结尾的 URL 路径
acl WORKTIME time MTWHF 08:30-17:30                    #时间为周一至周五 8:30~17:30,“MTWHF”为每个星期的英文首字母

环境配置

4、Squid-Server(192.168.70.5)配置

iptables -F
iptables -t nat -F

vim /dest.list      # 创建一个表写入ACL控制范围           
192.168.70.10
192.168.70.0/24
vim /etc/squid.conf ...... acl destionhost dst "/dest.list" #调用指定文件中的列表内容 ...... http_access deny destionhost #注意,如果是拒绝列表,需要放在http_access allow all前面 http_port 3128 systemctl restart squid

注:Squid的安装详情请参考:Squid服务器、传统及透明代理服务配置

 5、Web1 (192.168.70.10)、Web2 (192.168.70.15)配置

systemctl stop firewalld.service 
setenforce 0
yum -y install httpd
systemctl start httpd

注:web1和web2操作相同,web2操作就不进行贴图了

6、浏览器访问验证

  • (192.168.70.129) 访问Web服务器 http://192.168.70.10 ,显示被访问被拒绝,访问http://192.168.70.15则可以访问。
  • 客户机浏览器打开代理功能,代理服务器192.168.70.5,端口3128

 二、Squid日志分析

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

1、编译安装安装图像处理软件包

#需要使用在线源,出现报错,将网卡配置文件中的dns和网关修改回原样即可

yum install -y pcre-devel gd gd-devel             #安装依赖环境

mkdir /usr/local/sarg                             #创建配置文件存放的目录
tar zxvf sarg-2.3.7.tar.gz -C /opt/
cd /opt/sarg-2.3.7
./configure--prefix=/usr/local/sarg \             #配置文件目录,默认是/usr/local/etc
--sysconfdir=/etc/sarg \                          #额外安全防护
--enable-extraprotection
--------------------------------------------------------------------
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection

make -j 2 && make install

 

 

2、修改sarg工具配置文件

vim /etc/sarg/sarg.conf
--- 7行 ---取消注释
access log /usr/local/squid/var/logs/access.log    #指定访问日志文件
--- 25行 ---取消注释
title "Squid User Access Reports"                  #网页标题
--- 120行 ---取消注释,修改
output dir /var/www/html/sarg                      #报告输出目录
--- 178行---取消注释
user_ip no                                         #是否使用用户名显示 
--- 184行 ---取消注释,修改
topuser_sort_field connect reverse                 #top排序中,指定连接次数采用降序排列,升序是normal
--- 190行 ---取消注释,修改 
user_sort_field connect reverse                    #对于用户访问记录,连接次数按降序排序 
--- 206行 ---取消注释,修改 
exclude_hosts /usr/local/sarg/noreport             #指定不计入排序的站点列表的文件,该文件内容不计入排序,该文件必须存在,即使为空文件否则会报错
--- 257行 ---取消注释 
overwrite_report no                                #同名同日期的日志是否覆盖 
---289行 ---取消注释,修改
mail_utility mailq.postfix                         #发送邮件报告命令
--- 434行 ---取消注释,修改
charset UTF-8                                      # 指定字符集UTF-8 
--- 518行 ---取消注释
weekdays 0-6                                       #top排行的星期周期 
--- 525行 ---取消注释
hours 0-23                                         #top排行的时间周期 
--- 633行 ---取消注释
www_document_root /var/www/html                    #指定网页根(根据安装的web服务)目录

 

3. 创建不计入站点文件,文件内添加的域名将不被显示在排序中

touch /usr/local/sarg/noreport

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
sarg --help

4、验证

sarg                #启动一次记录


yum install httpd -y
systemctl start httpd

 

5、浏览器访问 http://192.168.70.5/squid-reports ,查看sarg报告网页

6、添加计划任务、每天生成报告

vim /usr/local/sarg/report.sh

#/bin/bash

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-$TODAY &>/dev/null 

find /var/www/html/squid -type d -name "20*" -a -mtime +30 | xargs rm -rf &> /dev/null

exit 0

###-l指定导入的文件,-o指定输出的路径,-z导出所有进程消息,-d指定日期范围

 

chmod +x /usr/local/sarg/report.sh                #给予执行权限

crontab -e                            

0 0 * * * /usr/local/sarg/report.sh

crontab -l                                           

systemctl status crond                            #确保crond服务打开才能执行计划任务

三、Squid反向代理

如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

工作机制:

  • 缓存网页对象,减少重复请求
  • 将互联网请求轮训或按权重分配到内网Web服务器
  • 代理用户请求,避免用户直接访问Web服务器,提高安全

环境配置

配置思路

  • 修改squid配置文件,改变为反向代理加速模式,使用80端口监听数据请求,并添加源服务器信息,添加算法实现负载均衡
  • 注意清空之前iptables防火墙配置,关闭或修改httpd服务端口,防止端口冲突
  • 节点服务器配置web服务
  • 因为是虚拟机环境,客户端如果不在一个网段需要指定squid服务器为网关地址,访问squid服务器地址或添加端口映射直接使用域名访问,squid服务器会根据是否缓存过请求的数据再向后端服务器发起请求

1、清除防火墙规则

iptables -F  
iptables -t nat -F       # 清空规则
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT   # 允许3128端口通过

2、修改squid配置文件

vim /etc/squid.conf
...........
--- 60行 ---修改,插入
http_port 192.168.70.5:80 accel vhost vport
cache_peer 192.168.70.10 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.70.15 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 
cache_peer_domain web1 web2 www.zcm.com            #表示对www.zcm.com的请求,squid向192.168.70.10和192.168.70.20的80端口发出请求

squid -k parse                                     #检查一下语法是否有误

---------------------------------------------------------------------------------------------------------------------------------------------------------
http_port 80 accel vhost vport
#squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和webserver的请求端口(vhost vport)绑定,这个时候请求到了squid, squid是不用转发请求的,而是直接要么从缓存中拿数据要么向,绑定的端口直接请求数据。
accel:反向代理加速模式
vhost:支持域名或主机名来表示代理节点
vport:支持IP和端口来表示代理节点
parent:代表为父节点,上下关系,非平级关系
80:代理内部web服务器的80端口
0:没有使用icp,表示就一台squid服务器
no-query:不做查询操作,直接获取数据
originserver:指定是源服务器
round-robin:指定squid 通过轮询方式将请求分发到其中一-台父节点
max_conn:指定最大连接数
weight:指定权重
name:设置别名
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

3、启动Squid反向代理服务

systemctl start firewalld  开启防火墙
systemctl stop httpd       #关闭httpd服务
systemctl stop squid       # 关闭 squid服务
systemctl start squid      # 重新开启squid服务

4、节点服务器配置

yum install -y httpd
systemctl start httpd

节点1∶
echo "<h1>this is web1</h1>" >> /var/www/html/index.html

节点2∶
echo "<h1>this is web2</h1>" >> /var/www/html/index.html

5、客户机的域名映射配置

修改C: \Windows\System32 \drivers\etc\hosts 文件
192.168.70.5 www.zcm.com

6、客户机的代理配置

打开浏览器,工具-->Internet选项-->连接-->局域网设置-->开启代理服务器(地址: Squid服务器IP地址,端口:80)

浏览器访问http://www.zcm.com

posted @ 2021-09-09 16:26  YhtWeirdo  阅读(684)  评论(0编辑  收藏  举报