1,工作原理及作用:
Squid 是 Linux 系統中最為流行的一款高性能代理服務軟體,通常用作 Web 網站的前置緩存服務,能夠代替使用者向網站伺服器請求頁面資料并進行緩存。
簡單來說,Squid 服務程式會按照收到的使用者請求向網站源伺服器請求頁面、圖檔等所需的資料,并将伺服器傳回的資料存儲在運作 Squid 服務程式的伺服器上。
當有使用者再請求相同的資料時,則可以直接将存儲伺服器本地的資料傳遞給使用者,這樣不僅減少了使用者的等待時間,還緩解了網站伺服器的負載壓力。
Squid 服務程式具有配置簡單、效率高、功能豐富等特點,它能支援 HTTP、FTP、SSL等多種協定的資料緩存,
可以基于通路控制清單(ACL)和通路權限清單(ARL)執行内容過濾與權限管理功能,還可以基于多種條件禁止使用者通路存在威脅或不适宜的網站資源,
是以可以保護企業内網的安全,提升使用者的網絡體驗,幫助節省網絡帶寬.
由于緩存代理服務不但會消耗伺服器較多的 CPU 計算性能、記憶體以及硬碟等硬體資源,同時還需要較大的網絡帶寬來保障資料的傳輸效率,由此會造成較大的網絡帶寬開銷。
是以國内很多 IDC 或 CDN 服務提供商會将緩存代理節點伺服器放置在二三線城市以降低營運成本.
工作模式:
Squid 服務程式為使用者提供緩存代理服務時,具有正向代理模式和反向代理模式之分。
正向代理模式,是指使用者通過Squid 服務程式擷取網站頁面等資源,以及基于通路控制清單(ACL)功能對使用者通路網站行為進行限制;在具體的服務方式上又分為标準代理模式和透明代理模式.
标準正向代理模式是把網站資料緩存到伺服器本地,提高資料資源再次通路時的效率,但是使用者在上網時必須在浏覽器等軟體中填寫代理伺服器的IP位址與端口号等資訊,否則預設不使用代理伺服器;
透明正向代理模式的作用和标準正向代理模式基本相同,差別是使用者不需要手動代理服務的IP位址和端口号,是以這種代理服務對于使用者是相對透明的.
反向代理模式是指讓多台節點主機反向緩存網站資料,進而加快使用者通路速度。因為一般來講,網站中會普遍加載大量的文字、圖檔等靜态資源,
而且它們相對來說都是比較穩定的資料資訊,當使用者發起網站頁面中這些靜态資源的通路請求時,我們可以使用 Squid 服務程式提供的反向代理模式來進行響應。
而且,如果反向代理伺服器中恰巧已經有了使用者要通路的靜态資源,則直接将緩存的這些靜态資源發送給使用者,這不僅可以加快使用者的網站通路速度,還在一定程度上降低了網站伺服器的負載壓力.
總結來說,正向代理模式一般用于企業區域網路之中,讓企業使用者統一地通過 Squid 服務通路網際網路資源,這樣不僅可以在一定程度上減少公網帶寬的開銷,而且還能對使用者通路的網站内容進行監管限制,一旦内網使用者通路的網站内容與禁止規則相比對,就會自動屏蔽網站。
反向代理模式一般是為大中型網站提供緩存服務的,它把網站中的靜态資源儲存在國内多個節點機房中,當有使用者發起靜态資源的通路請求時,可以就近為使用者配置設定節點并傳輸資源,是以在大中型網站中得到了普遍應用。
2,配置Squid服務程式
2-1,準備兩台虛拟機,一台作為Squid伺服器,另一台作用Squid用戶端(windows和linux都可用),兩台虛拟機的網絡必須設定成僅主機模式(Hostonly),然後關閉Squid伺服器,添加新網卡設定成橋接模式,用于通路外網.
如果沒有實體網絡則使用NAT模式,共享主機上的WiFi,在本地WLAN中打開屬性,連接配接旁邊有個共享,勾選Internet連接配接共享,單擊家庭網絡連接配接,選擇你想通過那個虛拟網卡上網,點選即可.
我們需要把Squid 服務程式部署在這台虛拟機上,然後讓另外一台原本隻能通路内網的虛拟機(即Squid 用戶端)通過 Squid 伺服器進行代理上網,進而使得 Squid 用戶端也能通路外部網站。
2-2,網絡模式配置好後,檢測是否可以通路外網
ping www.baidu.com ping 百度的IP位址,出現回報包即網絡暢通
2-3,yum -y install squid 安裝Squid服務程式包
出現Complete! 字樣安裝成功.
systemctl restart squid 重新開機服務
systemctl enable squid 設定為開機啟動
2-4,Squid服務程式的配置檔案也是放在/etc目錄下一個以服務名稱命名的目錄中.
常用的 Squid 服務程式配置參數以及作用
http_port 3128 監聽的端口号
cache_mem 64MB 記憶體緩沖區的大小
cache_dir ufs /var/spool/squid 2000 16 256 硬碟緩沖區的大小
cache_effective_user squid 設定緩存的有效使用者
cache_effective_group squid 設定緩存的有效使用者組
dns_nameservers [IP 位址] 一般不設定,而是用伺服器預設的DNS 位址
cache_access_log /var/log/squid/access.log 通路日志檔案的儲存路徑
cache_log /var/log/squid/cache.log 緩存日志檔案的儲存路徑
visible_hostname RHEL7 設定 Squid 伺服器的名稱
3,正向代理
3-1,标準正向代理
Squid 服務程式軟體包在正确安裝并啟動後,預設就已經可以為使用者提供标準正向代理模式服務了,不需要單獨修改配置檔案或者進行其他操作。
打開Windows10上的任意浏覽器,找到工具,然後單擊"Internet 選項",找到"連接配接"頁籤,單擊"區域網路設定",勾選自動減則配置,填寫代理服務起的IP位址和端口号.
設定完成後單擊确認,重新打開新網頁,成功通路www.baidu.com.
如果通路失敗,檢視syslinux本機安全性授權,是否有監聽的端口号.
semanage port -l | grep squid_port_t 檢視squid程式的端口号
3-2,ACL通路控制
Squid 服務程式的 ACL 是由多個政策規則組成的,它可以根據指定的政策規則來允許或限制通路請求,而且政策規則的比對順序與防火牆政策規則一樣都是由上至下;在一旦形成比對之後,則立即執行相應操作并結束比對過程。
為了避免 ACL 将所有流量全部禁止或全部放行,起不到預期的通路控制效果,運維人員通常會在 ACL 的最下面寫上 deny all 或者 allow all 語句,以避免安全隐患.
實驗1,隻允許192.168.13.129的用戶端使用伺服器上的Squid代理服務程式提供的代理服務,禁止其餘所有的主機代理請求.
下面修改其主配置檔案
vim /etc/squid/squid.conf
acl client src 192.168.13.129 在25行左右新起一行添加内容
http_access allow client 隻允許client通路
http_access deny all 禁止所有
修改用戶端的IP為192.168.13.130(隻要不是129即可,我們需要作出錯誤的提示,即為實驗成功),可以看到網頁通路失敗即為成功.
實驗2,禁止所有用戶端通路網址中包含linux關鍵字的網站
acl deny_keyword url_regex -i linux 在30行左右添加内容
http_access deny deny_keyword 拒絕通路含有關鍵字
通路www.linuxprobe.com 類似帶有linux的網站,含有關鍵字被拒絕通路
實驗3,禁止所有用戶端通路某個特定的網站
acl deny_url url_regex http://www.linuxcool.com 在33行左右添加内容
http_access deny deny_url 拒絕網站
通路http://www.linuxcool.com 檢視是否可以出現内容,報錯即為成功.
實驗4,禁止員工在企業網内下載下傳帶有特定字尾的檔案.
acl badfile urlpath_regex -i .rar$ .avi$ 在35行添加内容
http_access deny badfile 拒絕通路
随機找一個位址下載下傳一個帶有rar字尾的檔案,看是否可以下載下傳,無法下載下傳即為成功.
4,透明正向代理
透明代理模式中,使用者無須在浏覽器或其他軟體中配置代理伺服器位址、端口号等資訊,而是由 DHCP 伺服器将網絡配置資訊配置設定給用戶端主機,這樣隻要使用者打開浏覽器便會自動使用代理服務了.
“透明”二字指的是讓使用者在沒有感覺的情況下使用代理服務,這樣的好處是一方面不需要使用者手動配置代理伺服器的資訊,進而降低了代理服務的使用門檻;另一方面也可以更隐秘地監督員工的上網行為。
既然要讓使用者在無需過多配置系統的情況下就能使用代理服務,作為運維人員就必須提前将網絡配置資訊與資料轉發功能配置好。
前面已經配置好的網絡參數,使用SNAT 技術完成資料的轉發,讓用戶端主機将資料交給 Squid 代理伺服器,再由後者轉發到外網中。
簡單來說,就是讓 Squid 伺服器作為一個中間人,實作内網用戶端主機與外部網絡之間的資料傳輸。
目前主機沒有配置SNAT功能,不能通路外網.
要想讓内網中的用戶端主機能夠通路外網,用戶端主機首先要能擷取到 DNS 位址解析服務的資料,這樣才能在網際網路中找到對應網站的 IP 位址。
下面通過 iptables 指令實作 DNS 位址解析服務 53 端口的資料轉發功能,并且允許 Squid 伺服器轉發 IPv4 資料包。
sysctl -p 指令的作用是讓轉發參數立即生效:
iptables -F 清空目前防火牆政策表
iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554952 -j MASQUERADE
vim /usr/lib/sysctl.d/00-system.conf 修改端口轉發配置檔案
net.ipv4.ip_forward = 1 另起一行添加内容
sysctl -p 使配置檔案生效
現在回到用戶端主機,再次 ping 某個外網位址。此時可以發現,雖然不能連通網站,但是此時已經能夠擷取到外網 DNS 服務的域名解析資料。
與配置 DNS 和 SNAT 技術轉發相比,Squid 服務程式透明代理模式的配置過程就十分簡單了,隻需要在主配置檔案中伺服器端口号後面追加上 transparent 單詞(意思為“透明的”)
然後把第 62 行的井号(#)注釋符删除,設定緩存的儲存路徑就可以了。儲存主配置檔案并退出後再使用 squid -k parse 指令檢查主配置檔案是否有錯誤
以及使用 squid -z 指令對 Squid服務程式的透明代理技術進行初始化
httpport 3128 transparent
cache dir ufs /var/spool/squid 100 16 256
squid -k parse 檢查主配置檔案是否有錯誤
squid -z 初始化透明代理技術
下面就可以完成 SNAT資料轉發功能了。原理很簡單,使用 iptables 防火牆管理指令把所有用戶端主機對網站 80 端口的請求轉發至 Squid 伺服器本地的 3128 端口上。
SNAT 資料轉發功能的具體配置參數如下。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3218
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 –o eno33554952 -j SNAT --to 您的橋接網卡 IP 位址
service iptables save 儲存防火牆政策
使用用戶端重新整理浏覽器,就可以通路了
5,反向代理
網站頁面是由靜态資源和動态資源一起組成的,其中靜态資源包括網站架構 CSS 檔案、大量的圖檔、視訊等資料,這些資料相對于動态資源來說更加穩定,一般不會經常發生改變。
但是,随着建站技術的更新換代,外加人們不斷提升的審美能力,這些靜态資源占據的網站空間越來越多。
如果能夠把這些靜态資源從網站頁面中抽離出去,然後在全國各地部署靜态資源的緩存節點,這樣不僅可以提升使用者通路網站的速度,而且網站源伺服器也會因為這些緩存節點的存在而降低負載。
反向代理是 Squid 服務程式的一種重要模式,其原理是把一部分原本向網站源伺服器發起的使用者請求交給 Squid 伺服器緩存節點來處理。
但是這種技術的弊端也很明顯,如果有心懷不軌之徒将自己的域名和伺服器反向代理到某個知名的網站上面,從理論上來講,當使用者通路到這個域名時,也會看到與那個知名網站一樣的内容(有些詐騙網站就是這樣騙取使用者信任的)。
是以,目前許多網站都預設禁止了反向代理功能。開啟了 CDN(内容分發網絡)服務的網站也可以避免這種竊取行為。
如果開啟了防護功能的網站,就會出現網頁報錯(Internal Server Error).
使用 Squid 服務程式來配置反向代理服務非常簡單。首先找到一個網站源伺服器的 IP 位址,然後編輯 Squid 服務程式的主配置檔案,把端口号 3128 修改為網站源伺服器的位址和端口号,此時正向解析服務會被暫停(它不能與反向代理服務同時使用)。
然後按照下面的參數形式寫入需要反向代理的網站源伺服器的 IP 位址資訊,儲存退出後重新開機 Squid 服務程式。
vim/etc/squid/squid.conf
http port 你的橋接網卡IP位址:80 vhost
cache _peer 你的橋接網卡IP位址 IP parent 80 0 originserver
systemctl restart squid
systemctl enable squid
通路網頁成功.