天天看點

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

目錄:

1· Squid代理的概述原理

2· 代理的基本類型

3· Squid 服務腳本

4· 建構代理伺服器(傳統代理、透明代理)

5· 總結

Squid代理的概述原理

1)代理的工作機制

1.什麼是 Squid ?

Squid是一個高性能的代理緩存伺服器,Squid支援FTP、gopher、HTTPS和HTTP協定。和一般的代理緩存軟體不同,Squid用一個單獨的、非子產品化的、I/O驅動的程序來處理所有的用戶端請求。

2·緩存的工作原理

squid 是工作在應用層的代理服務軟體,squid 主要提供緩存加速和應用層過濾控制的功能。在這裡舉個列子:當客戶機通過代理來請求 web 頁面時,那麼代理伺服器會檢查自己有沒有你請求的頁面,有的話就直接發送給用戶端,沒有的話,代理伺服器就會向web發送請求,當獲得了web頁面後,就會把資料儲存到緩存中,并發給用戶端。

下圖是代理服務的緩存機制過程:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

2)·HTTP 代理的緩存說明:

HTTP代理的緩存加速對象主要針對文字、圖像等靜态 Web 元素。使用緩存機制後,用戶端在通路 同一 Web 元素,就可以直接從代理伺服器的緩存中得到你想要的。這樣做的好處就減少 對 Web 請求的過程,提高了用戶端的通路速度
還有就是客戶機通路的 Web 通路請求實際上是由代理伺服器帶完成的,這樣就可以隐藏使用者的真實 IP,有一定的保護作用,代理伺服器還有機會對通路的目标、客戶機的位址、通路的時間段進行過濾控制。

代理的基本類型與應用方向:

1)傳統代理:

也就是普通的代理服務,比如我們用的浏覽器、QQ聊天工具等需要手動設定代理伺服器的位址和端口,才能使用代理服務的。
下圖是浏覽器設定代理伺服器位址圖:
【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
對以上圖說明:每個軟體或者是浏覽器設定代理伺服器的位子是不一樣的,隻要找到選項,幾乎就在裡面,設好代理伺服器的位址與端口即可。

2)應用方向

傳統代理:多用于 Internet 環境,QQ 程式、下載下傳工具等,可以規避伺服器的并發連接配接。
透明代理:多用于區域網路環境,比如在 Linux 網關中啟用代理,區域網路主機就不用再進行額外的設定就能更快的通路。

傳統代理伺服器部署

部署前說明:

1·部署環境是:CenOS 7.4
2·部署方式:手工編譯, 版本為 Squid 3.4.6
3·提供源碼包下載下傳位址:Squid 緩存源碼包,需要請點選 密碼:63xn

傳統代理伺服器拓撲圖如下:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

開始部署:1)編譯安裝 Squid,現在是手工編譯的,在這之前我們需要把源碼包下載下傳,進行解壓,安裝編譯環境、指定安裝路徑與功能子產品等

[[email protected] ~]# tar zxvf squid-3.4.6.tar.gz -C /opt/ ----(解壓到 /opt 目錄下)
[[email protected] ~]# yum install gcc gcc-c++ make -y ----(安裝編譯環境)

[[email protected] ~]# cd /opt/squid-3.4.6/

[[email protected] squid-3.4.6]# ./configure --prefix=/usr/local/squid \

--sysconfdir=/etc \

--enable-arp-acl \

--enable-linux-netfilter \

--enable-linux-tpoxy \

--enable-async-io=100 \

--enable-err-language="Simplify_Chinese" \

--enable-underscore \

--enable-poll \

--enable-gnuregex

2)對以上子產品解釋:

1·指定安裝路徑

2·單獨将配置檔案放在 /etc

3·可以在規則中設定為直接通過用戶端MAC進行管理,防止用戶端使用IP欺騙

4·使用核心過濾

5·支援透明模式

6·異步 I/O,提升存儲性能

7·錯誤資訊的顯示語言

8·允許 URL 中有下劃線

9·使用POLL()模式,提升性能

10·使用GNU 正規表達式

[[email protected] squid-3.4.6]# make && make install ----(制作、編譯安裝,這裡等待的時間需要稍長一點,請耐心等待)

3)安裝完畢,現在需要對 Squid 進行一些優化,使以後我們用起來更加符合日常日操作習慣

[[email protected] squid-3.4.6]# ln -s /usr/local/squid/sbin/ /usr/local/sbin ——(建立軟連接配接)
[[email protected] squid-3.4.6]# useradd -M -s /sbin/nologin squid ---(建立管理使用者)
[[email protected] squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/

4)修改主配置檔案,有圖有文字說明:

[[email protected] squid-3.4.6]# vim /etc/squid.conf ----(在編譯的時候就指定了主配置檔案放在 /etc 下)

修改如下内容:

http_access allow all -----(需要添加,意思是運作所有人通路http,這裡相當于是一個ACL通路控制清單)

cache_effective_user squid ------(添加指定的程式使用者)

cache_effective_group squid ------(添加 指定的賬号基本組)

下圖是配置檔案添加内容:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

檢查配置檔案文法,看看是否有報錯:

[[email protected] squid-3.4.6]# squid -k parse ---(檢查文法,有報錯問題幾乎是配置檔案的問題)

編寫 Squid 啟動腳本

[[email protected] squid-3.4.6]# vim /etc/init.d/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 -antp | grep squid &> /dev/null

if [ $? -eq 0 ]

then

echo "squid is running"

else

echo "正在啟動 squid...."

$CMD

fi

;;

stop)

$CMD -k kill &> /dev/nulll

rm -rf $PID &> /dev/null

;;

status)

[ -f $PID ] &> /dev/null

if [ $? -eq 0 ]

then

netstat -antp | 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

優化 squid 與 啟動腳本

[[email protected] squid-3.4.6]# chmod +x /etc/init.d/squid ---(給腳本執行權限)

[[email protected] squid-3.4.6]# chkconfig --add squid ----(加入系統服務)

[[email protected] squid-3.4.6]# chkconfig --level 35 squid on ----(設定開機自啟)

到此 Squid 服務基本配置完成。接下來我們需要先來做傳統代理模式

[[email protected] squid-3.4.6]# vim /etc/squid.conf ---(修改配置檔案)

添加内容如下:

cache_mem 64 MB ---(#指定緩存功能使用的記憶體空間大小,以便于保持通路較頻繁的web對象,容量最好為4的倍數,機關為MB,建議設為實體記憶體的1/4)

reply_body_max_size 10 MB ----(允許使用者下載下傳的最大檔案大小,以位元組為機關,預設0,表示不限制

)

maximum_object_size 4096 KB ---(允許儲存到緩存空間的最大對象大小,以KB為機關,超過大小限制的檔案将不被緩存,而是直接轉發給使用者)

下圖是修改後的配置檔案:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
啟動前準備:
[[email protected] squid-3.4.6]# squid -k parse ---(再次檢查配置檔案文法)
[[email protected] squid-3.4.6]# squid -z ---(初始化緩存目錄)

[[email protected] squid-3.4.6]# iptables -F ----(清空防火牆規則,便于之後我們自己填寫政策)

[[email protected] squid-3.4.6]# iptables -t nat -F

[[email protected] squid-3.4.6]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ---(添加防火牆政策:允許 tcp 協定 3128端口通過)‘

[[email protected] squid-3.4.6]# setenforce 0 ---(關閉增強功能)

[[email protected] squid-3.4.6]# service squid start ----(啟動服務)

正在啟動 squid...

[[email protected] squid-3.4.6]# netstat -antp | grep 3128 ----(檢視啟動端口)

tcp6 0 0 :::3128 :::* LISTEN 36813/(squid-1)

驗證傳統代理伺服器:

方法:搭建 Apache 網站伺服器,用 windows 用戶端 IE 浏覽器設定代理伺服器,通路 Apache 網站伺服器,然後檢視Apache 日志檔案,檢視是誰通路的Apache。如果是代理伺服器說明我們部署成功。

1)在另外一台伺服器上搭建 Apache 伺服器:

[[email protected] ~]# yum install httpd -y ---(注意這裡是在其他伺服器上安裝Apache)

[[email protected] ~]# systemctl stop firewalld.service

[[email protected] ~]# setenforce 0

[[email protected] ~]# systemctl start httpd.service

2)在客戶機上給 IE 浏覽器設定 Squid 代理伺服器的位址與端口

這裡用圖表示:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

開始通路 apache 網站伺服器:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
以上圖說明:通路成功,但是我們需要知道是誰去通路的,是以現在需要看看 apache 的日志檔案。

下圖是 Apache 的日志檔案:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
上圖說明:傳統代理伺服器部署成功!

透明代理部署:

透明代理提供的服務功能與傳統代理是一緻的,但是其 ” 透明 “ 的實作依賴預設路由和防火牆的重定向政策。

在Linux 網關上,構架squid 為客戶機通路 Internet 提供代理服務

在所有的區域網路客戶機上,隻需要争取設定IP位址、預設網關,而不需要手動指定代理伺服器的位址、端口等資訊。

根據以上的理論,是以我們應該把 Squid 代理伺服器 再添加一塊新的網卡,透明代理的拓撲圖如下:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理

開始部署:

[[email protected] ~]# vim /etc/squid.conf ---(修改配置檔案)

修改内容如下:

http_port 192.168.100.1:3128 transparent ----(修改監聽位址,因為是内網需要通路外網,是以監聽的是内網 transparent:意思就是透明模式)

配置檔案修改得不多,接下來就是需要設定 iptables 的重定向政策:

[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[[email protected] ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

開啟路由轉發功能:

[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

重新開機 squid 代理伺服器

[[email protected] ~]# service squid restart

正在關閉 squid...

正在啟動 squid...

透明模式驗證:

說明:透明模式 是不需要手動設定代理服器的,通路如下圖:

【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
下圖是apache 日志分析,看看是那一台主機通路的web
【實戰】Squid 緩存伺服器 之 傳統代理 + 透明代理
結論:如上圖,是不需要手動設定代理伺服器,通路web伺服器是由代理伺服器去通路!
如果要再Linux客戶機的指令行界面中使用代理伺服器(比如:elinks 網頁浏覽器、wget 下載下傳工具),必須通過環境變量來指定代理伺服器的位址、端口等資訊。
[[email protected] ~]# vim /etc/profile ---(添加如下内容到環境變量中)

添加如下内容:

HTTP_PROXY=http:192.168.100.50:3128 ---(為使用HTTP協定指定代理)

HTTPS_PROXY=http:192.168.100.50:3128 ---(為使用HTTPS協定指定代理)

FTP_PROXY=http:192.168.100.50:3128 ----(為使用FTP協定指定代理)

NO_RPOXY=192.168.20.,192.168.30. ---(對兩個區域網路段不使用代理)

export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY**

[[email protected] ~]# source /etc/profile

總結:

1·要知道,我們通路的是web伺服器,如果 Squid緩存代理伺服器有通路的資料,代理伺服器就會直接給予回饋,如果沒有,squid 就會去找web伺服器要資料,再傳回給用戶端。

2·代理的基本類型有:傳統代理、透明代理。之間最大的差別是:需要手動設定代理伺服器的位址和端口。

3·排錯可能性:·通路的時候,web伺服器的防火牆沒有關閉;防火牆政策寫入有誤、修改配置檔案後是否重新開機服務,檢視端口服務是否啟動。
上一篇: IOS 建立