Linux就該這麼學 | 第16章 部署代理緩存服務

第16章:使用 Squid 部署代理緩存服務

本章學習內容有:介紹代理服務的原理及其作用;介紹 Squid 服務程序的正向解析和反向解析;進一步理解代理服務,提升代理服務的控制能力。

一、認識 代理緩存服務

1、什麼是 Squid 代理緩存服務?有什麼用?

Squid 是 Linux 系統中最爲流行的一款高性能代理服務軟件,通常用作 Web 網站的前置緩存服務,能夠代替用戶向網站服務器請求頁面數據並進行緩存。

簡單來說,Squid 服務程序會按照收到的用戶請求向網站源服務器請求頁面、圖片等所需的數據,並將服務器返回的數據存儲在運行 Squid 服務程序的服務器上。當有用戶再請求相同的數據時,則可以直接將存儲服務器本地的數據交付給用戶,這樣不僅減少了用戶的等待時間,還緩解了網站服務器的負載壓力。

Squid 支持 HTTP、FTP、SSL等多種協議的數據緩存,可以基於訪問控制列表(ACL)和訪問權限列表(ARL)執行內容過濾與權限管理功能,還可以基於多種條件禁止用戶訪問存在威脅或不適宜的網站資源,因此可以保護企業內網的安全,提升用戶的網絡體驗,幫助節省網絡帶寬。

Squid 服務程序爲用戶提供緩存代理服務時,具有正向代理模式和反向代理模式之分。

2、關於代理緩存服務的運營成本

由於緩存代理服務不但會消耗服務器較多的 CPU 計算性能、內存以及硬盤等硬件資源,同時還需要較大的網絡帶寬來保障數據的傳輸效率,由此會造成較大的網絡帶寬開銷。因此國內很多 IDC 或 CDN 服務提供商會將緩存代理節點服務器放置在二三線城市以降低運營成本。

3、什麼是正向代理模式?

正向代理模式,是指讓用戶通過 Squid 服務程序獲取網站頁面等資源,以及基於訪問控制列表(ACL)功能對用戶訪問網站行爲進行限制,在具體的服務方式上又分爲標準代理模式與透明代理模式。

1)標準正向代理模式是把網站數據緩存到服務器本地,提高數據資源被再次訪問時的效率,但是用戶在上網時必須在瀏覽器等軟件中填寫代理服務器的 IP 地址與端口號信息,否則默認不使用代理服務。

2)透明正向代理模式的作用與標準正向代理模式基本相同,區別是用戶不需要手動指定代理服務器的 IP 地址與端口號,所以這種代理服務對於用戶來講是相對透明的。

3)Squid 服務程序提供正向代理服務的拓撲圖,如下:

圖解1:局域網內的主機如果想要訪問外網,則必須要通過 Squid 服務器提供的代理才行,這樣當 Squid 服務器接收到用戶的指令後會向外部發出請求,然後將接收到的數據交還給發出指令的那個用戶,從而實現了用戶的代理上網需求。

圖解2:從拓撲圖中不難看出,企業中的主機要想上網,就必須要經過公司的網關服務器,既然這是一條流量的必經之路,因此企業一般還會把 Squid 服務程序部署到網關服務器處,並通過稍後講到的 ACL(訪問控制列表)功能對企業內員工進行上網審計及限制。

4、什麼是反向代理模式?

反向代理模式是指讓多臺節點主機反向緩存網站數據,從而加快用戶訪問速度。因爲一般來講,網站中會普遍加載大量的文字、圖片等靜態資源,而且它們相對來說都是比較穩定的數據信息,當用戶發起網站頁面中這些靜態資源的訪問請求時,我們可以使用 Squid 服務程序提供的反向代理模式來進行響應。而且,如果反向代理服務器中恰巧已經有了用戶要訪問的靜態資源,則直接將緩存的這些靜態資源發送給用戶,這不僅可以加快用戶的網站訪問速度,還在一定程度上降低了網站服務器的負載壓力。

Squid 服務程序提供反向代理服務的拓撲圖,如下:

圖解:當外網用戶嘗試訪問某個網站時,實際請求是被 Squid 服務器所處理的。反向代理服務器會將緩存好的靜態資源更快地交付給外網用戶,從而加快了網站頁面被用戶訪問的速度。並且由於網站頁面數據中的靜態資源請求已被 Squid 服務器處理,因此網站服務器負責動態數據查詢就可以了,也進而降低了服務器機房中網站服務器的負載壓力。

5、正向代理模式 與 反向代理模式 對比

總結來說,正向代理模式一般用於企業局域網之中,讓企業用戶統一地通過 Squid 服務訪問互聯網資源,這樣不僅可以在一定程度上減少公網帶寬的開銷,而且還能對用戶訪問的網站內容進行監管限制,一旦內網用戶訪問的網站內容與禁止規則相匹配,就會自動屏蔽網站。

反向代理模式一般是爲大中型網站提供緩存服務的,它把網站中的靜態資源保存在國內多個節點機房中,當有用戶發起靜態資源的訪問請求時,可以就近爲用戶分配節點並傳輸資源,因此在大中型網站中得到了普遍應用。

二、部署 Squid 代理緩存服務

1、實驗前的準備工作

準備兩臺虛擬機,一臺用作 Squid 服務器,另外一臺用作 Squid 客戶端(客戶端可以是Windows,也可以是Linux)。爲了使這兩臺機器能夠相互通信,需要將這兩臺虛擬機都設置爲僅主機模式(Hostonly)。

然後關閉其中一臺虛擬機的電源,爲其添加一塊新的網卡後再開啓電源(需要注意的是,這塊新添加的網卡設備必須選擇爲橋接模式,否則這兩臺虛擬機都將無法訪問外網)。

這兩臺虛擬機的配置參考下表:

經過上述配置,我們得到了一臺既能訪問內網、又能訪問外網的虛擬機了,這臺機器將被用作 Squid 服務器。可以使用 ping 命令來測試它是否已經具備了外網訪問能力。

另一臺機器只能訪問內網,將被我們用作 Squid 客戶端,通過 Squid 服務器進行代理,該客戶端也可擁有了訪問外網的能力。

2、安裝 Squid 服務程序

當配置好 Yum 軟件倉庫並掛載好設備鏡像後,就可以安裝 Squid 服務程序了。Squid 服務程序在Linux系統中的服務名稱爲 squid

yum  install  squid

3、查看 Squid 服務程序的配置文件

cat  /etc/squid/squid.conf

該配置文件中的常用字段及其含義如下圖示:

4、部署 Squid 標準正向代理

1)Squid 服務程序軟件包在正確安裝並啓動後,默認就已經可以爲用戶提供標準正向代理模式服務了,而不再需要單獨修改配置文件或者進行其他操作。

systemctl  restart  squid
systemctl  enable  squid

2)在Squid客戶端(以Windows爲例)測試Squid服務的標準正向代理。

打開任一瀏覽器,如IE瀏覽器,點擊“工具”->"Internet選項",並如下配置參數:

![測試Squid服務的標準正向代理

設置完成後,原本不能訪問外網的Squid客戶端,現在已經可以使用IE瀏覽器訪問外部網站了。

3)修改Squid服務的默認端口號

Squid 服務程序默認使用 3128、3401 與 4827 等端口號,因此可以把默認使用的端口號修改爲其他值,以便起到一定的保護作用。

vim  /etc/squid/squid.conf
systemctl  restart  squid

修改完成後,重啓squid服務,並在squid客戶端的瀏覽器中修改squid服務的連接參數,即可再次測試。測試後會發現,squid客戶端訪問外網資源時竟然被拒絕了,這是爲什麼呢?

這是因爲squid默認的端口號列表中,並不包含 10000,雖然它允許我們修改,但是 SELinux出於安全的策略保護,SELinux 限制了 squid 服務使用 10000 這個端口。因此我們還需要手動地把我們自定義的端口號 10000 添加到 SELinux 域的允許列表中去。

這樣再測試squid客戶端,就能正常地使用 10000 端口號訪問外部網站資源了。

5、使用 squid 服務的 ACL 訪問控制

1)什麼是 ACL 訪問控制?

在日常工作中,企業員工一般是通過公司內部的網關服務器來訪問互聯網,當將 Squid服務程序部署爲公司網絡的網關服務器後,Squid 服務程序的訪問控制列表(ACL)功能將發揮它的用武之地。ACL可以根據指定的策略條件來緩存數據或限制用戶的訪問

比如很多公司會分時段地禁止員工逛淘寶、打網頁遊戲,這些禁止行爲都可以通過 Squid 服務程序的 ACL 功能來實現。

2)關於 ACL 的策略規則

Squid 服務程序的 ACL 是由多個策略規則組成的,它可以根據指定的策略規則來允許或限制訪問請求,而且策略規則的匹配順序與防火牆策略規則一樣都是由上至下;在一旦形成匹配之後,則立即執行相應操作並結束匹配過程。

爲了避免 ACL 將所有流量全部禁止或全部放行,起不到預期的訪問控制效果,運維人員通常會在 ACL 的最下面寫上 deny all 或者 allow all 語句,以避免安全隱患。

3)實驗1:只允許 IP 地址爲 192.0168.10.20 的客戶端使用服務器上 squid 服務所提供的代理服務,禁止其它所有主機的代理請求。

vim  /etc/squid/squid.conf
systemctl  restart  squid

修改完成後,重啓squid服務,即可在 squid 客戶端進行測試了,如果客戶端的 IP 不是 192.168.10.20 將被拒絕使用 squid 代理服務。

4)實驗2:禁止所有客戶端訪問 url 中包含 linux 關鍵詞的網站。

vim  /etc/squid/squid.conf
systemctl  restart  squid

配置完成後,重啓 squid 服務。在使用了 squid 代理服務的客戶端中訪問 https://www.linux.com/ 將被拒絕。

5)實驗3:禁止所有客戶端訪問某個特定的網站。

vim  /etc/squid/squid.conf
systemctl  restart  squid

配置完成後,重啓 squid 服務。在使用了 squid 代理服務的客戶端中訪問百度,將被拒絕。

6)實驗4:禁止員工在企業內網中下載帶有某些後綴的文件。

vim  /etc/squid/squid.conf
systemctl  restart  squid

配置完成後,重啓 squid 服務。在使用了 squid 代理服務的客戶端中訪問 .rar 或 .avi 格式的文件並下載,將會被拒絕。

6、部署 Squid 透明正向代理

1)再次理解“透明正向代理”

正向代理服務一般是針對企業內部的所有員工設置的,鑑於每位員工所掌握的計算機知識不盡相同,如果您所在的公司不是 IT 行業的公司,想教會大家如何使用代理服務也不是一件容易的事情。再者,無論是什麼行業的公司,公司領導都希望能採取某些措施限制員工在公司內的上網行爲,這時就需要用到透明的正向代理模式了。

“透明”二字指的是讓用戶在沒有感知的情況下使用代理服務,這樣的好處是一方面不需要用戶手動配置代理服務器的信息,進而降低了代理服務的使用門檻;另一方面也可以更隱祕地監督員工的上網行爲。

在透明代理模式中,用戶無須在瀏覽器或其他軟件中配置代理服務器地址、端口號等信息,而是由 DHCP 服務器將網絡配置信息分配給客戶端主機。這樣只要用戶打開瀏覽器便會自動使用代理服務了。

2)配置 squid 服務

vim  /etc/squid/squid.conf
squid  -k  parse
squid  -z
systemctl  restart  squid

配置完成後,使用 squid -k parse 命令檢查 squid 主配置文件是否有錯誤,以及使用 squid -z 命令對 Squid服務程序的透明代理技術進行初始化。

3)手動爲客戶端配置網絡參數

既然要讓用戶在無需過多配置系統的情況下就能使用squid代理服務,作爲運維人員就必須提前把客戶端的網絡配置信息和SNAT數據轉發功能配置好。

客戶端的網絡參數配置如下圖示:

4)實現 SNAT 數據轉發功能

再使用 SNAT 技術完成數據轉發,讓客戶端主機把數據交給 Squid 代理服務器,再由squid服務將其轉發到外網中。

簡單來說,SNAT 技術的目的就是讓 Squid 服務器作爲一箇中間人,實現內網客戶端主機與外部網絡之間的數據傳輸

SNAT 的實現原理其實很簡單,就是使用 iptables 防火牆管理命令把所有客戶端主機對網站 80 端口的請求轉發至 Squid 服務器本地的 3128 端口上。SNAT 數據轉發功能的具體配置參數如下圖示:

上圖中的命令,不僅只是開啓了 SNAT 數據轉發功能,而是通過把客戶端主機訪問外網 80 端口的請求轉發到 Squid 服務器的 3128 端口號上,從而還是強制了客戶端主機必須通過 Squid 服務程序來上網。

5)現在去到已經配置過網絡參數的客戶機上,嘗試訪問外網,就可能正常訪問了,並且無須手動地在瀏覽器中配置 squid 服務的連接參數。

7、部署 Squid 反向代理

1)什麼是網站的靜態資源?

網站頁面是由靜態資源和動態資源一起組成的,其中靜態資源包括網站架構 CSS 文件、大量的圖片、視頻等數據,這些數據相對於動態資源來說更加穩定,一般不會經常發生改變。

但是,隨着建站技術的更新換代,外加人們不斷提升的審美能力,這些靜態資源佔據的網站空間越來越多。如果能夠把這些靜態資源從網站頁面中抽離出去,然後在全國各地部署靜態資源的緩存節點,這樣不僅可以提升用戶訪問網站的速度,而且網站源服務器也會因爲這些緩存節點的存在而降低負載。

2)再次理解“反向代理”

反向代理是 Squid 服務程序的一種重要模式,其原理是把一部分原本向網站源服務器發起的用戶請求交給 Squid 服務器緩存節點來處理。

但是這種技術的弊端也很明顯,如果有心懷不軌之徒將自己的域名和服務器反向代理到某個知名的網站上面,從理論上來講,當用戶訪問到這個域名時,也會看到與那個知名網站一樣的內容。因此,當前許多網站都默認禁止了反向代理功能。

除了禁用網站的反向代理功能,開啓了CDN(內容分發網絡)服務也可以避免上述這種竊取行爲。

3)配置 squid 服務

使用 Squid 服務程序來配置反向代理服務非常簡單。

首先找到一個網站源服務器的 IP 地址,然後編輯 Squid 服務程序的主配置文件,把端口號 3128 修改爲網站源服務器的地址和端口號,此時正向解析服務會被暫停(正向代理和反向代理服務不能同時存在)。

vim  /etc/squid/squid.conf
systemctl  restart  squid

經過上述配置,使用了 squid 服務的客戶端,就可以通過 squid 反向代理來訪問指定的源網站了。

本章複習題



本章 END 2019-01-14

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