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頁面
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章