Squid緩存代理部署——傳統+透明(超詳細)

內容要點:

一、Squid介紹

二、緩存代理

三、手工編譯安裝、優化 Squid

四、搭建傳統代理

五、設置透明代理


一、Squid介紹

(1)Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher、HTTPS和HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。


(2)Squid運行在什麼系統上?


Squid可運行在大多數Unix和OS/2版本的系統之上,已知的可工作的有:Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris


(3)Squid的下載和獲取:


squid在諸多unix like系統上都有軟件庫的提供,比如在ubuntu可以使用apt install squid進行安裝,也可以到squid的官網直接下載二進制的編譯好的軟件包。


二、緩存代理

web 代理的工作機制:緩存網頁對象,減少重複請求。

image.png

1、當我們客戶機通過squid代理去訪問web頁面時,指定的代理服務器會先檢查自己的緩存,若是緩存中有我們客戶機需要的頁面,那麼squid服務器將直接把緩存中的頁面內容返回給客戶機,如果緩存中沒有客戶端請求的頁面,那麼squid代理服務器就會向internet發送訪問請求,獲得返回的web頁面後,將網頁的數據保存到緩存中併發送給客戶機。


2、由於客戶機的web訪問請求實際上是squid代理服務器來代替完成的,所以隱藏了用戶的真實IP地址,從而起到一定的保護作用。

另一方面,squid也可以針對要訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。


(1)代理的基本類型:


1、傳統代理:也就是普通的代理服務,需要我們客戶端在瀏覽器、聊天工具等一些程序中設置代理服務器的地址和端口,然後才能使用代理來訪問網絡,這種方式相比較而言比較麻煩,因爲客戶機還需手動指定代理服務器,所以一般用於Internet環境。


2、透明代理:與傳統代理實現的功能是一樣的,區別在於客戶機不需要手動指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將web訪問重定向,實際上仍然交給代理服務器來處理,重定向的過程完全是由squid服務器進行的,所以對於客戶機來說,甚至不知道自己使用了squid代理服務,因此呢,我們稱之爲透明模式。

透明代理多用於局域網環境,如在Linux網關中啓用透明代理後,局域網主機無須進行額外設置就能享受更好的上網速度。


(2)使用代理的好處:


1、提高web訪問速度;

2、隱藏客戶機的真實 IP地址


三、手工編譯安裝、優化 Squid

(1)解壓縮包:

tar zxvf squid-3.4.6.tar.gz -C /opt/


(2)安裝編譯工具:

yum install gcc gcc-c++ make -y


(3)編譯:


./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


(4)安裝

install && make install


(5)方便管理,可以創建軟連接

ln -s /usr/local/squid/sbin/* /usr/local/sbin/


(6)創建用戶 squid,配置權限

useradd -M -s /sbin/nologin squid


chown -R squid.squid /usr/local/squid/var/
//授權


(7)修改配置文件


vim /etc/squid.conf
添加以下代碼:
http_access allow all
cache_effective_user squid       //添加 指定程序用戶
cache_effective_group squid      //添加 指定賬戶基本組

image.png

(8)檢查


squid -k parse    //檢查配置文件語法
squid -z          //初始化緩存目錄
squid             //啓動服務


檢查端口查看服務是否正常開啓:

在這裏插入圖片描述

(9)編寫啓動腳本:


1、編寫腳本 目錄:/etc/init.d/


vim squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
      netstat -natp | grep squid &> /dev/null
      if [ $? -eq 0 ]
        then
        echo "squid is running"
        else
        echo "正在啓動 squid...."
        $CMD
        fi
        ;;
stop)
        $CMD -k kill &> /dev/null
        rm -rf $PID &> /dev/null
        ;;
status)
         [ -f $PID ] &> /dev/null
           if [ $? -eq 0 ]
             then
              netstat -natp | 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 "用法:$0{start|stop|status|reload|check|restart}"
        ;;
esac


2、添加執行權限


chmod +x squid    //添加執行權限

chkconfig --add squid     //便於service識別

chkconfig --level 35 squid on   //設置開機自啓動


3、關閉、開啓服務


service squid stop 
service squid start


四、搭建傳統代理

角色IP地址
Web服務器192.168.220.136
代理服務器192.168.220.131
客戶機192.168.220.129


第一步:編輯配置文件 /etc/squid.conf

cache_mem 64 MB       //指定緩存功能所使用的內存空間大小

reply_body_max_size 10 MB    //允許用戶下載的最大文件大小

maximum_object_size 4096 KB    //允許保存到緩存空間的最大對象大小

第二步:制定防火牆規則

iptables -F    //清除所有規則來暫時停止防火牆
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT    //允許目標端口3128做轉發


第三步:客戶機瀏覽器設置代理服務

(1)打開瀏覽器 → 工具 → Internet 選項 → 連接 → 局域網設置

image.png


(2)瀏覽器訪問 web服務器的IP地址,多刷新幾次,由於我們設置了代理服務,其實訪問網站這個請求,是代理服務器幫我們完成的,爲了驗證,可以查看 web服務器的日誌文件,就能知道訪問的 ip地址是客戶機還是代理服務器的。

查看 /etc/httpd/logs 中的日誌文件,access_log ,以下是部分截圖:

image.png

可以看出都是由 代理服務器過來訪問網頁的,而非客戶機,這也起到了隱藏客戶機真實 IP地址的目的。


五、設置透明代理


角色 IP地址
squid 代理服務器內網:192.168.100.1;外網:12.0.0.1
web服務器12.0.0.12
客戶機192.168.100.50


第一步:用戶機瀏覽器取消局域網設置

第二步:配置代理服務器 squid

(1)開啓路由轉發功能:

 echo "1" > /proc/sys/net/ipv4/ip_forward


(2)編輯配置文件 /etc/squid.conf


修改監聽地址:

http_port 192.168.100.1:3128 transparent




(3)添加防火牆策略:


iptables -F
iptables -t nat -F    //重新設置防火牆
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
//端口重定向到3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT   //開發3128端口

(4)重啓服務:

service squid restart


第三步:驗證

1、在客戶機瀏覽器上訪問 web 服務器網站

image.png

2、在 web 服務器的日誌文件,查看是哪個IP地址來訪的:

vim /etc/httpd/logs/access_log

image.png

可以看出是 squid代理服務器的外網卡的ip地址。


透明代理設置成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章