Squid理论+实验(传统模式,透明模式和反向代理)

一、什么是squid

  • Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件
  • 可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大
  • squid的官方网站为http://www.squid-cache.org

二、缓存代理概述

1、 Web代理的工作机制,缓存网页对象,减少重复请求

  • Squid是一个缓存Internet数据的一个软件,它接收用户的下载申请, 并自动处理所下载的数据。
  • 也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份
  • 当别的用户申请同样的页面时,Squid把保存的备份立即0传给用户,减少了向Internet提交重复的Web请求的过程,提高了用户下载网页的速度,隐藏了客户机的真实IP

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

2、代理的基本类型

  • 传统代理:适用于Internet,需明确指定服务端
  • 透明代理: 客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理

3、使用代理的好处

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

三、squid传统代理搭建

环境介绍

squid服务器:192.168.100.10/24

web服务器:192.168.100.20/24

客户机:192.168.100.30/24

实验目的

  • 通过客户机访问web页面,不做代理时,web服务器的访问日志显示的是客户机IP,
  • 当做了传统代理后,web服务器的访问日志显示的是squid服务器IP。

squid服务器配置

  • 安装编译工具,解压squid软件包到opt
yum install gcc gcc-c++  -y
tar zxvf squid-3.5.27.tar -C /opt
  • 进入解压目录执行configure
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex 
  • 编译并安装
make && make install
  • 创建软连接,创建squid用户,更改squid属组
ln -s /usr/local/squid/sbin/*  /usr/local/sbin
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/
  • 修改squid配置文件,
vi /etc/squid.conf
###在第56行添加参数
     56 #http_access deny all
     57 http_access allow all
     58 http_port 3128                             ###在下面新增
     59 visible_hostname 192.168.100.10
     60 cache_mem 64 MB
     61 cache_swap_low 80
     62 cache_swap_high 97
     63 cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
     64 cache_effective_user squid        ##缓存用户squid
     65 cache_effective_group squid     ##缓存组squid

  • 检查squid相关配置,并初始化
squid -k parse                   ##检查配置文件
squid –k rec                       ##重新加载配置文件
squid -zX                            ##初始化缓存目录
  • 编写squid服务脚本,直接放到service中管理
vi /etc/init.d/squid  
#!/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
        ;;
        *)
esac
  • 赋予脚本相关权限
chmod +x /etc/init.d/squid
chkconfig --add squid      ##加入service列表
chkconfig squid on
  • 启动squid服务
service squid restart  
正在启动Squid...
netstat -anpt | grep squid            ##确认squid服务处于正常监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      6699/(squid-1)    

  • 编辑防火墙规则
iptables -F 
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许3128端口
service iptables save     ##保存规则
  • 重载配置文件
service squid reload  

web服务器配置

  • 关闭防火墙
systemctl stop firewalld.service   ##关闭防火墙
setenforce 0  ##增强型安全功能
  • 安装httpd服务,并启动(作为web页面)

yum install httpd -y  ##安装web服务

systemctl start httpd.service

客户端配置
在这里插入图片描述
验证传统squid模式

  • 当客户端不配置代理时,访问web界面

在这里插入图片描述

  • 进入web服务器,查看web服务器访问日志,可以看见访问源地址为客户机地址
 cat /var/log/httpd/access_log 

在这里插入图片描述

  • 当客服端配置代理后,再次访问web界面
  • 并查看web服务器访问日志,可以看见访问源地址为squid服务器
    在这里插入图片描述
 cat /var/log/httpd/access_log 

在这里插入图片描述

四、squid透明代理搭建

  • 简介:需要在squid上配置双网卡,内网卡ens33作为客户机的网关

在这里插入图片描述
环境介绍

squid服务器:双网卡。ens33为192.168.100.1/24,
ens36为192.168.5.100/24

web服务器:192.168.5.200/24

客户机:192.168.100.30/24

实验目的

  • 客户机访问web服务器时显示的访问地址为squid服务器地址

squid服务器配置

  • 添加一块网卡,输入nmcli con查看网卡连接情况
nmcli con

NAME        UUID                                  TYPE            DEVICE 
ens33       71ca8422-bf5e-4d2c-a919-e0cd02bbd979  802-3-ethernet  ens33  
有线连接 1  d20a6283-76b7-3da1-a3ca-ac91adf7a653  802-3-ethernet  ens36  
  • 配置ens36网卡
cd /etc/sysconfig/network-scripts
cp -p ifcfg-ens33 ifcfg-ens36
vi /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36             ###改网卡名字
UUID=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens36        ###改网卡名字
ONBOOT=yes
IPADDR=192.168.5.100
NETMASK=255.255.255.0
GATEWAY=192.168.5.2
  • 配置ens33网卡
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0                   
  • 添加路由转发
vim /etc/sysctl.conf
##末尾加入
net.ipv4.ip_forward=1
sysctl -p              ##重新加载
net.ipv4.ip_forward = 1
  • 修改squid配置文件
vim /etc/squid.conf
##将刚才的传统模式的58行监听端口改为监听192.168.100.1:3128
58 http_port 192.168.100.1:3128 transparent ###支持透明模式
  • 重新加载配置文件
service squid reload   
netstat -anpt | grep squid            ##确认squid服务处于正常监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      6699/(squid-1)    
  • 编辑防火墙规则,增加nat转换规则

iptables -F   

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
###客户机请求http80端口时重定向到3128端口

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
###请求https443端口时重定向到3128端口

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT 
##允许3128端口进行转发
 
service iptables save     ##保存规则

web服务器配置

修改web服务器IP地址为192.168.5.200
在这里插入图片描述

  • 添加一条静态路由到客户机192.168.100.0/24网段
route add -net 192.168.100.0/24 gw 192.168.5.100

客户机配置

  • IP地址不变,关掉代理

在这里插入图片描述
验证

  • 客户机访问web服务器,然后进入web服务器看访问日志
    在这里插入图片描述
  • 查看web服务器访问日志,可以看见源地址为squid的ens36地址
cat /var/log/httpd/access_log 

在这里插入图片描述

五、squid反向代理搭建

  • 当squid做反向代理时就不是缓存服务器了 , 变为web 服务器

实验环境介绍

squid服务器:192.168.100.100/24

web1:192.168.100.110/24

web2:192.168.100.120/24

客户机:192.168.30/24

实验目的

  • squid服务器配置反向代理,客户机添加squid代理,然后访问squid服务器域名时跳转到web服务器页面。
  • 以轮询的方式依次显示web1、web2

squid服务器配置

  • 修改IP地址为192.168.100.100/24
    在这里插入图片描述
  • 跟传统模式一样安装squid软件,修改配置文件
vim /etc/squid.conf
###在第56行添加参数
     56 #http_access deny all
     57 http_access allow all
     58 http_port 192.168.100.100:80 accel vhost vport  
     ##将squid服务器变为web server,并监听80端口
     59 visible_hostname 192.168.100.100
     60 #cache_mem 64 MB
     61 #cache_swap_low 80
     62 #cache_swap_high 97
     63 #cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
     64 cache_effective_user squid        ##缓存用户squid
     65 cache_effective_group squid     ##缓存组squid
     66 cache_peer 192.168.100.110 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
          ##节点服务器1最大访问30,权重1,别名web1
     67 cache_peer 192.168.100.120 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
     68 cache_peer_domain web1 wb2 www.yun.com  ##访问yun.com匹配web1,
  • 检查squid相关配置,并初始化
squid -k parse                   ##检查配置文件
squid –k rec                       ##重新加载配置文件
squid -zX                            ##初始化缓存目录
  • 修改防火墙规则
iptables -F 
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允许3128端口
service iptables save     ##保存规则
  • 重启服务
service squid restart
netstat -anpt | grep squid            ##确认squid服务处于正常监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      6699/(squid-1)    

web1服务器配置

  • 修改IP地址为192.168.100.110/24

在这里插入图片描述

  • 在web页面插入相关内容
 echo "this is test1 web" >> /var/www/html/index.html 
  • 重启httpd服务
systemctl restart httpd

web2配置

  • 修改IP地址为192.168.100.120/24
    在这里插入图片描述
  • 在web页面插入相关内容
 echo "this is test2 web" >> /var/www/html/index.html 
  • 重启httpd服务
systemctl restart httpd

客户机配置

  • 配置IP地址,启动代理

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

  • 进入c盘Windows/System32/drivers/etc目录

在这里插入图片描述

  • 修改客户机host文件(需要切换到管理员)

在这里插入图片描述
验证

  • 通过客户机访问www.yun.com,发现以轮询的方式显示web界面。
    在这里插入图片描述
  • 点击刷新变为test2页面
    在这里插入图片描述
发布了59 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42953006/article/details/104931234