CentOS 7.6 squid代理服务器的应用(访问控制列表,日志分析,反向代理)

一、ACL 访问控制

环境准备:
squid服务器:192.168.245.204(已安装squid)
web服务器:192.168.245.205(已安装apache)
客户机(win10):192.168.245.147

Squid 提供了强大的代理控制机制,通过合理设置 ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的 URL 路径、访问的时间等各种条件进行过滤。 在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:其一,使用 acl 配置项定义需要控制的条件;其二,通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

每行 acl 配置可以定义一条访问控制列表,格式如下所示:

acl 列表名称 列表类型 列表内容 …
  • “列表名称”由管理员自行指定,用来识别控制条件;
  • “列表类型”必须使用 Squid 预定 义的值,对应不同类别的控制条件;
  • “列表内容”是要控制的具体对象,不同类型的列表所对应 的内容也不一样,可以有多个值(以空格分隔,为“或”的关系)。

通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的 条件对象。Squid 预定义的列表类型有很多种,常用的包括源地址、目标地址、访问时间、 访问端口等

列表类型 列表内容示例 含义
src 192.168.1.168,192.168.1.0/24,192.168.1.0-192.168.3.0/24 源 IP 地址、网段、IP 地址范围
dst 216.163.137.3,61.135.167.0/24,www.playboy.com 目标 IP 地址、网段、主机名
port 80 443 8080 20 21 目标端口
dstdomain .qq.com .msn.com 目标域,匹配域内所有站点
time MTWHF 8:30-17:30,12:00-13:00,AS 使用代理服务的时间段:字母表示一星期中各天的英文缩写 M—Monday 、 T—Tuesday 、 W—Wednesday 、 H—Thursday、F—Friday、A—Saturday、S—Sunday
maxconn 20 每个客户机的并发连接数
url_regex url_regex -i ^rtsp://,url_regex -i ^emule:// 目标资源的 URL 地址,-i 表示忽略大小写
urlpath_regex urlpath_regex -i sex adult,urlpath_regex -i .mp3$ 网址中主机名后面的部分,-i 表示忽略大小写

定义好各种访问控制列表以后,需要使用 httpd_access 配置项来进行控制。必须注意 的是,http_access 配置行必须放在对应的 acl 配置行之后。每行 http_access 配置确定一 条访问控制规则,格式如下所示。

http_access allow 或 deny 列表名……

在每条 http_access 规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,为“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。需要使用取反条件时,可以在访问控制列表前添加“!”符号

修改配置文件,配置acl,拒绝192.168.245.147这个主机访问

[root@sqid ~]# vim /etc/squid.conf

# should be allowed
acl hostlocal src 192.168.245.147/32  <---定义访问控制列表的名字是hostlocal,源为192.168.245.147的主机

# Deny requests to certain unsafe ports
http_access deny hostlocal   <---策略是拒绝名为hostlocal的acl

修改完配置文件后记得重载服务

[root@squid ~]# service squid reload

登入192.168.245.147主机,访问网页,显示拒绝
在这里插入图片描述
当需要限制的同一类对象较多时,可以使用独立的文件来存放,在 acl 配置行的列表内容处指定对应的文件位置即可

执行访问控制时,Squid 将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与 iptables 的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况值得大家注意。

扫描二维码关注公众号,回复: 11610157 查看本文章
  • 没有设置任何规则时:Squid 服务将拒绝客户端的请求。
  • 有规则但找不到相匹配的项:Squid 将采用与最后一条规则相反的动作,即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求。

通常情况下,把最常用到的控制规则放在最前面,以减少 Squid 的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,设为“http_access allow all”或者“http_access deny all”。

二、日志分析

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

环境准备:
squid服务器:192.168.245.204
客户机(win10):192.168.245.147

安装gd库,支持图形界面

[root@squid ~]# yum -y install gd gd-devel

解压sarg的tar包,自定义配置

[root@squid opt]# tar zxvf sarg-2.3.7.tar.gz
[root@squid opt]# cd sarg-2.3.7/
[root@squid sarg-2.3.7]# 
[root@squid sarg-2.3.7]# ./configure \
> --prefix=/usr/local/sarg \   <----指定安装路径
> --sysconfdir=/etc/sarg \     <----配置文件目录,默认是/usr/loca/etc
> --enable-extraprotection    <----添加额外的安全保护

编译安装

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

修改sarg配置文件,默认这个文件里的内容是全部被注释掉的,把我们即将修改的部分取消注释

[root@squid sarg-2.3.7]# cd /etc/sarg/
[root@squid sarg]# vim sarg.conf 

7:access_log /usr/local/squid/var/logs/access.log  <----指定 squid 的访问日志文件
25:title "Squid User Access Reports"   <----网页标题
120:output_dir /var/www/html/squid-reports   <----sarg 报告的输出目录
178:user_ip no    <----使用用户名显示
184:topuser_sort_field connect reverse   <----在 top 排序中,指定连接次数、访问字节数,采用降序排列,升序将 reverse 换成 normal
190:user_sort_field reverse  (注释这一行)
206:exclude_hosts /usr/local/sarg/noreport   <----指定不计入排序的站点列表文件
257:overwrite_report no    <----当那个日期报告已经存在,是否覆盖报告
289:mail_utility mailq.postfix    <----发送邮件报告的命令
434:charset UTF-8   <----使用字符集
518:weekdays 0-6    <----指定 top 排序时的星期周期,0 为周日
525:hours 0-23     <----指定 top 排序时的时间周期
633:www_document_root /var/www/html    <----网页根目录

上述配置中,添加了不计入排序的站点,需要存在/usr/local/sarg/noreport 文件,/usr/local/sarg/noreport 文件中,添加的域名将不被显示在排序中

[root@squid sarg]# mkdir /usr/local/sarg
[root@squid sarg]# touch /usr/local/sarg/noreport

把sarg命令建立软链接便于使用

[root@squid sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/

直接执行 sarg 即可启动一次记录

[root@squid sarg]# sarg
SARG: 纪录在文件: 178, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Sep07-2020Sep07

因为sarg是html格式的,所以需要安装web服务,这里是apache

[root@squid sarg]# yum -y install httpd
[root@squid sarg]# systemctl start httpd
[root@squid sarg]# netstat -anpt | grep 80
tcp        0      0 192.168.245.204:22      192.168.245.1:55880     ESTABLISHED 100272/sshd: root@p 
tcp6       0      0 :::80                   :::*                    LISTEN      8237/httpd     

客户机验证:

客户机访问http://192.168.245.204/squid-reports就可以看到sarg的日志页面了,并且能看到本次访问的日志内容
在这里插入图片描述
点击文件名进去可以看到具体内容

在这里插入图片描述

三、反向代理+负载均衡

代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的代理服务是不能实现的,需要使用反向代理来实现。

Squid最典型的应用是代理局域网的机器联入互联网,它支持现在流行的网络协议。Squid的另一项非常出色的功能就是实现反向代理功能。本实例同时也演示了squid服务器加上后端两个web服务器实现负载均衡

环境准备:
squid服务器:192.168.245.204
web1服务器:192.168.245.205
web2服务器:192.168.245.206
客户机(win10):192.168.245.147

修改squid配置文件,注意:指定的ip是自己的ip,端口一般都设置成80端口,这样使用户感觉不到反向代理的存在,就像访问真正的WEB服务器一样

[root@squid ~]# vim /etc/squid.conf
# Squid normally listens to port 3128
http_port 192.168.245.204:80 accel vhost vport
cache_peer 192.168.245.205 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.245.206 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com

配置解读:

http_port 192.168.245.204:80 accel vhost vport
设定squid为accel加速模式,vhost必须要加.否则将无法将主机头转发至后端服务器,访问时就会出现无法找到主机头的错误

这个时候squid相当于一台web服务器,在80端口监听请求,同时和另外的web服务器的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是向绑定的端口直接请求数据
cache_peer 192.168.245.205 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
定义不同的父节点,将节点设为no-query以及originserver说明这些节点是实际服务器
round-robin:轮询
max_conn=30:最大连接数30
weight=1 权重为1
name=web1  定义名字
cache_peer_domain web1 web2 www.yun.com
设定访问该域名将转发到不同的cache_peer上:web1和web2

重载squid服务

[root@squid ~]# service squid reload

web1服务器安装apache(省略安装步骤)编辑默认主页内容:

[root@web1 ~]# cd /var/www/html/
[root@web1 html]# vim index.html
<h1>this is 205 web</h1>

启动apache

[root@web1 html]# systemctl start httpd

[root@web1 html]# netstat -anpt | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      102263/httpd    

web2服务器安装apache(省略安装步骤)编辑默认主页内容:

[root@web2 ~]# cd /var/www/html/
[root@web2 html]# vim index.html
<h1>this is 206 web</h1>

启动apache

[root@web2 html]# systemctl start httpd

[root@web2 html]# netstat -anpt | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      102263/httpd    

验证分别访问2个web服务器,访问主页成功

在这里插入图片描述

在这里插入图片描述
现在为客户机的浏览器设置代理,地址为squid服务器的ip地址,端口为80

在这里插入图片描述
因为squid配置文件里我们配置了域名,为了方便用域名进行访问验证,直接编辑C:\Windows\System32\drivers\etc目录下的hosts文件即可

在这里插入图片描述
打开方式选择用记事本打开,编辑之前需要修改该文件的权限,administrator和user的权限全部设定为完全控制,否则无法保存编辑后的文件

在这里插入图片描述
客户机直接访问域名验证可以访问到两台web服务器的主页,并且是轮询的显示不同页面

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/108451737
今日推荐