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