Squid缓存代理

Squid代理服务器

Squid代理服务器是基于Unix的代理服务器(proxy server),它主要提供缓存加速、应用层过滤控制的功能,缓存网页对象,可以减少重复请求

1.功能

缓存加速
应用层过滤控制

2.工作机制

代替客户机向网站请求数据,从而隐藏用户的真实IP地址
将获得的网页数据保存到缓存中,对下次请求相同数据时做到快速响应

3.代理类型

传统代理
适用于Internet,需在客户机指定代理服务器的地址和端口。
透明代理
客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器
反向代理
如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存(静态)在本地,供下一个请求者使用

4.优点

  • 提高Web访问速度
  • 隐藏客户端的真实IP地址

实验

设备准备

Squid代理服务器(192.168.233.103)
Web服务器1192.168.118.50192.168.233.104)
Web服务器2192.168.118.50192.168.233.105)

1.配置squid

1.安装依赖环境包

[root@squid ~]# yum -y install gcc gcc-c++ make

2.解压软件包

[root@squid opt]# tar -xf squid-3.5.27.tar.gz

3.编译安装

[root@squid squid-3.5.27]# ./configure --prefix=/usr/local/squid 
> --sysconfdir=/etc 								#将配置文件修改到/etc目录下
> --enable-arp-acl 									#可在ACL中设置通过MAC地址进行管理,防止IP欺骗
> --enable-linux-netfilter 							#使用内核过滤
> --enable-linux-tproxy 							#支持透明模式
> --enable-async-io=100 							#异步i/o,提升存储性能
> --enable-err-language="Simplify_Chinese" 			#错误信息的显示语音
> --enable-underscore 								#允许URL中有下划线
> --enable-poll 									#使用Poll模式,提升性能
> --enable-gnuregex									#使用GNU正则表达式

[root@squid squid-3.5.27]# make && make install

4.优化squid管理

[root@localhost squid-3.5.27]# ln -s /usr/local/squid/sbin/* /usr/local/sbin   //创建链接文件,优化路径
[root@localhost squid-3.5.27]# useradd -M -s /sbin/nologin squid   //创建程序用户
[root@localhost squid-3.5.27]# chown -R squid:squid /usr/local/squid/var/  //改变目录属主

5.修改squid配置文件

[root@localhost squid-3.5.27]# vim /etc/squid.conf

在这里插入图片描述
6.编写squid启动服务脚本

[root@squid squid-3.5.27]# vim /etc/squid.conf
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
        start)
                netstat -utpln | grep squid &>/dev/null
                if [ $? -eq 0 ]
                        then
                                echo "Squid is running"
                else
                        $CMD
                fi
        ;;
        stop)
                $CMD -k kill &>/dev/null
                rm -rf $PID &>/dev/null
        ;;
        status)
                [ -f $PID ] &>/dev/null
                        if [ $? -eq 0 ]
                          then
                                netstat -utpln | grep squid
                        else
                                echo "Squid is not running"
                        fi
	;;
        restart)
                $0 stop &>/dev/null
                echo "正在关闭Squid..."
                $0 start &>/dev/null
                echo "正在启动Squid..."
        ;;
        reload)
                $CMD -k reconfigure
        ;;
        check)
                $CMD -k parse
        ;;
        *)
                echo "用法:{start | stop | restart | reload | check | status}"
esac
[root@localhost squid-3.5.27]# chmod +x /etc/init.d/squid  //赋予执行权限
[root@localhost squid-3.5.27]# chkconfig --add squid       //加入系统服务
[root@localhost squid-3.5.27]# chkconfig squid on          //指定squid在各等级为on
[root@localhost squid-3.5.27]# netstat -antp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      19127/(squid-1)  

1.搭建传统代理

1.修改squid服务器

1.修改配置文件

[root@squid squid-3.5.27]# vim /etc/squid.conf
//添加以下内容

在这里插入图片描述

2.修改防火墙规则

[root@localhost squid-3.5.27]# iptables -F   //清空规则
[root@localhost squid-3.5.27]# systemctl restart firewalld.service  //重启防火墙
[root@localhost squid-3.5.27]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT  //允许来自tcp3128的流量进入

2.配置web服务器

安装httpd

[root@web2 ~]# yum -y install httpd
[root@web2 ~]# systemctl start httpd

3.win测试

修改网卡
在这里插入图片描述

设置代理
在这里插入图片描述
访问web2.并查看日志
在这里插入图片描述

在这里插入图片描述
访问Web2服务器IP地址,刷新网页并实时查看访问日志,观察来访IP地址为squid的IP地址

2.搭载透明代理

设备准备
基于上面的传统代理设置,Squid服务器增加一个网卡(VMnet1仅主机,ens36:192.168.108.133,不用设置网关,DNS)
Win10的IP地址设置为192.168.105.200,网关为Squid的ens37网卡地址

在这里插入图片描述

1.修改Squid配置文件

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

在这里插入图片描述

2.添加防火墙规则

[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.108.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.108.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# systemctl restart squid	//重启squid
[root@squid ~]# netstat -antp | grep squid
tcp        0      0 192.168.108.133:3128    0.0.0.0:*               LISTEN      23845/(squid-1)  

3.在web服务器添加静态路由

[root@web1 ~]# route add -net 192.168.108.0/24 gw 192.168.233.103

4.访问web1

Win10上先关闭代理设置,再清除浏览器缓存,访问Web1IP地址会发现依然能访问,证明透明代理不需要指定Squid服务端

win10网卡配置
在这里插入图片描述

访问网页web1:192.168.233.104
在这里插入图片描述

在这里插入图片描述

3.ACL控制访问

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

  • ① 使用acl 配置项定义需要控制的条件;

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

  • 格式:
    acl 列表名称 列表类型 列表内容
    列表名称:名称自定义,相当于给acl起个名字(也会被http_access 调用)
    列表类型:必须使用squid预定义的值,对应不同类别的控制条件
    列表内容:是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格为分隔,为“或”的关系)

1.修改配置文件

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

在这里插入图片描述

在这里插入图片描述

2.重启squid

[root@squid ~]# systemctl restart squid

3.访问web1

在这里插入图片描述

4.Squid日志分析

Squid日志分析我们可以安装sarg日志分析工具,它采用HTML格式,详细列出每一位用户访问Internet的站点信息、时间占用信息、排名、连接次数、访问量等

1.安装图像处理软件

1.安装依赖包
[root@squid opt]# yum install -y gd gd-devel pcre-devel
2.解压安装包
[root@squid opt]# tar xzf sarg-2.3.7.tar.gz
3.编译安装
[root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \
> --sysconfdir=/etc/sarg \				#设置配置文件目录,
> --enable-extraprotection				#额外安全防护

[root@squid sarg-2.3.7]# make && make install
4.修改sarg配置文件
[root@squid sarg-2.3.7]# vim /etc/sarg/sarg.conf 

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

5.启动sarg
[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/
[root@squid sarg-2.3.7]# sarg
SARG: 纪录在文件: 169, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/sarg/2021Aug07-2021Aug07
6.安装httpd
[root@squid sarg-2.3.7]# yum -y install httpd
[root@squid sarg-2.3.7]# systemctl start httpd
7.测试

在这里插入图片描述

添加计划任务
[root@squid sarg-2.3.7]# vim /usr/local/sarg/report.sh
#!/bin/bash
#Get current date								#获取准确时间
TODAY=$(date +%d/%m/%Y)
#Get one yesterday ago today					#获取前一天
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
exit 0
[root@squid sarg-2.3.7]# chmod +x /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -e
0 0 * * * /usr/local/sarg/report.sh
[root@squid sarg-2.3.7]# crontab -l
0 0 * * * /usr/local/sarg/report.sh

5.搭建反向代理

工作机制

  • 缓存网页对象,减少重复请求
  • 将互联网请求轮询或按权重分配到内网web服务器
  • 代理用户请求,避免用户直接访问Web服务器,提高安全
关闭防火墙
[root@squid sarg-2.3.7]# systemctl stop firewalld

1.更新配置文件

[root@squid sarg-2.3.7]# vim /etc/squid.conf
 60 #http_port 192.168.108.133:3128 transparent
 61 http_port 192.168.233.103:80 accel vhost vport
 62 cache_peer 192.168.233.104 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web    1
 63 cache_peer 192.168.233.105 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web    2
 64 cache_peer_domain web1 web2 www.xzw.com
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 :设置别名

2.配置web服务器

[root@web1 ~]# echo 'hello' > /var/www/html/index.html
[root@web2 ~]# echo 'world' > /var/www/html/index.html

3.配置客户端

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

在这里插入图片描述
访问网页
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值