大点干!早点散----------深入剖析缓存加速--squid(反向代理与ACL访问控制以及sarg日志)

时间:2022-07-24
本文章向大家介绍大点干!早点散----------深入剖析缓存加速--squid(反向代理与ACL访问控制以及sarg日志),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、squid的概念

squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。

squid代理的作用 通过缓存的方式为用户提供Web访问加速 对用户的Web访问进行过滤控制

二、工作流程

当代理服务器中有客户端需要的数据时:

a. 客户端向代理服务器发送数据请求;

b. 代理服务器检查自己的数据缓存;

c. 代理服务器在缓存中找到了用户想要的数据,取出数据;

d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:

客户端向代理服务器发送数据请求;

代理服务器检查自己的数据缓存;

代理服务器在缓存中没有找到用户想要的数据;

代理服务器向Internet 上的远端服务器发送数据请求;

远端服务器响应,返回相应的数据;

代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

三:ACL访问控制

原理图如下

当squid服务器上启用acl访问控制列表的时候

1、定义

ACL(Access Control List,访问控制列表),可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤

2、设置ACL分为两步

  • 定义ACL
  • 调用ACL

定义ACL格式: 格式: acl 列表名称 列表类型 列表内容…… 列表名称:自己设定

3、列表类型:

src 源地址, dst 目标地址, port 目标端口 dstdomain 目标域名 time 访问时间 maxconn 最大并发量 url_regex 目标URL urlpath_regex 整个目标URL 路径

使用acl配置项定义需要控制的条件 通过http_access配置项对已定义的列表做允许或拒绝的访问控制 ACL一些解释

4、典型的访问规则配置(白名单)

'这种是允许某个规则可以,其他的不行  为白名单  白名单安全系数高一点'
[root@squid ~]# vim /etc/squid.conf	'//编辑squid配置文件'
# should be allowed
acl hostlocal src 192.168.110.20/32  '//监控client客户端的主机(192.168.110.20/32)取名为hostlocal'
# Deny requests to certain unsafe ports
http_access deny hostlocal  '//调用hostlocal,设置拒绝访问'
[root@squid ~]# service squid restart

5、允许多个网段在工作时间上网

'这种是允许某个规则可以,其他的不行  为白名单  白名单安全系数高一点'
[root@localhost ~]# vi /etc/squid.conf
......

acl all src 0.0.0.0/0.0.0.0
acl MYL AN src 192.168.1.0/24 192.168.4.0/24
acl WORKTIME time MTWHF 08:30-17:30     '周一到周五  开头字母' 
http_ access allow MYLAN WORKTIME     '两个列表一起调用'
http_ access deny all                  '最后一条是拒绝' 

6、通过黑名单来拒绝访问

这里的文件要绝对路径 ,要有可读的权限

[root@localhost opt]# echo "192.168.110.20" > /opt/ip.list 
[root@localhost opt]# vim /etc/squid.conf

acl shang src "/opt/ip.list"    '将原来的具体的IP地址改成绝对路径,效果等同于在后面接ip地址  ,只不过这样的话配置文件比较简洁,跟便于管理'
http_access deny shang     '调用策略,如果上面都匹配不上的话 就取反通过'

四、squid日志分析工具–sarg

SARG的全称是:Squid Analysis Report Generator SARG作为一款Squid日志分析工具,它采用html格式,详细列出了每一位用户访问internet的站点信息,时间占用信息,排名,连接次数,访问量,访问量等。 软件的主页:http://www.sarg-squid.org/ 目前最新的版本是2.0.2

1、安装squid服务

安装详细步骤请点击这里

2、squid服务器上安装sarg工具

[root@squid ~]# cd /mnt/company/
[root@squid company]# tar zxvf sarg-2.3.7.tar.gz -C /opt	'//解压源码包'
[root@squid company]# cd /opt/sarg-2.3.7/
[root@squid sarg-2.3.7]# yum install gd gd-devel -y	'//安装gd库,gcc gcc-c++之前装过了'
[root@squid sarg-2.3.7]# mkdir /usr/local/sarg	'//创建sarg目录'
[root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg 		'//指定sarg目录'
> --sysconfdir=/etc/sarg 	'//配置文件'
> --enable-extraprotection	'//开启安全防护'
[root@squid sarg-2.3.7]# make && make install

3、开启sarg工具的功能

[root@squid sarg-2.3.7]# vim /etc/sarg/sarg.conf 
    '//配置文件中所有的都被注释了,我们需要取消注释一下内容'
access_log /usr/local/squid/var/logs/access.log  '第7行//指定访问日志文件'
title "Squid User Access Reports"  '第25行//网页标题'
output_dir /var/www/html/squid-reports  '第120行//报告输出目录'
user_ip no  '第178行//使用用户名显示'
exclude_hosts /usr/local/sarg/noreport  '第206行//不计入排序的站点列表文件'
topuser_sort_field connect reverse  
'第184//top排序中有连接次数,访问字节,降序排列,升序是normal'
overwrite_report no  '第257行//同名日志是否覆盖'
mail_utility mailq.postfix  '第289行//发送邮件报告命令'
charset UTF-8  '第434行//使用字符集'
weekdays 0-6  '//top排行的时间周期'
hours 0-23  '第525行//top排行的时间周期'
www_document_root /var/www/html  '第633行//网页根目录'
[root@squid sarg-2.3.7]# touch /usr/local/sarg/noreport	'//添加不计入站点文件,添加的域名将不被显示'
[root@squid sarg-2.3.7]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/	'//创建sarg命令的软连接'
[root@squid sarg-2.3.7]# sarg	'//生成报告'
SARG: 纪录在文件: 123, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Feb08-2020Feb08	'//提示报告生成在这个目录,我们进入这个目录查看一下'
[root@squid sarg-2.3.7]# cd /var/www/html/squid-reports/	'//进入目录'
[root@squid squid-reports]# ls
2020Feb08-2020Feb08  images  index.html
[root@squid squid-reports]# yum install httpd -y	'//安装httpd'
[root@squid squid-reports]# systemctl start httpd	'//开启httpd'
[root@squid squid-reports]# systemctl stop firewalld.service 	'//关闭防火墙'
[root@squid squid-reports]# setenforce 0

4、验证

这里是因为我生成了两个报告所以会显示两条

5、执行周期性计划任务,每天生成报告

[root@squid squid-reports]# sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)

五、squid缓存加速+反向代理

反向代理使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发给用户。这种方式通过降低了WEB服务器的请求数从而降低了WEB服务器的负载。

1、squid服务器设置

关闭httpd服务并设置防火墙规则

[root@squid squid-reports]# systemctl stop httpd	'//关闭httpd服务,因为会占用80端口,后面设置代理需要用到80端口'
[root@squid squid-reports]# systemctl start firewalld.service 
[root@squid squid-reports]# iptables -F
[root@squid squid-reports]# iptables -t nat -F
[root@squid squid-reports]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

2、设置反向代理

[root@squid squid-reports]# vim /etc/squid.conf
http_port 192.168.110.132:80 accel vhost vport	'//监控本机80端口'
cache_peer 192.168.110.133 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1	'//节点服务器1最大访问30,权重1,别名web1'
cache_peer 192.168.110.134 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2	'//节点服务器2最大访问30,权重1,别名web2'
cache_peer_domain web1 web2 www.yun.com  '//访问www.yun.com匹配web1,web2节点'
'重启服务之前检查80端口有没有被占用  如果有的话kill掉进程'
[root@squid squid-reports]# service squid restart	'//重启服务'
正在关闭 squid...
正在启动 squid...
[root@squid squid-reports]# netstat -ntap |grep 80	'//查看80端口是否被squid使用'
tcp        0      0 192.168.110.132:80       0.0.0.0:*               LISTEN      5197/(squid-1)  

3、添加一台web服务器,并设置主页内容

4、 client客户端设置域名解析和squid代理并测试

设置域名解析(以administrator用户登录)

C盘-Windows-system32-drivers-etc-hosts

这里要切换管理员账号进行更改文件,不然没权限

更改代理服务器的端口为80

5、验证