Squid 是一個(gè)功能齊全的緩存代理,支持流行的網(wǎng)絡(luò)協(xié)議,如 HTTP , HTTPS , FTP 等。 Squid 主要用于通過(guò)緩存重復(fù)請(qǐng)求,過(guò)濾 Web 流量和訪問(wèn)地理限制內(nèi)容來(lái)提高 Web 服務(wù)器的性能。
本教程將引導(dǎo)您完成在 Ubuntu 18.04 上設(shè)置 Squid 代理并配置 Firefox 和 Google Chrome Web 瀏覽器以使用它的過(guò)程。
在 Ubuntu 上安裝 Squid
Squid 包包含在默認(rèn)的 Ubuntu 18.04 存儲(chǔ)庫(kù)中。要安裝它,請(qǐng)使用 sudo 用戶運(yùn)行以下命令:
sudo apt update sudo apt install squid
安裝完成后, Squid 服務(wù)將自動(dòng)啟動(dòng)。
要驗(yàn)證安裝是否成功并且 Squid 服務(wù)是否正在運(yùn)行,請(qǐng)鍵入以下命令以打印服務(wù)狀態(tài):
sudo systemctl status squid
● squid.service - LSB: Squid HTTP Proxy version 3.x Loaded: loaded (/etc/init.d/squid; generated) Active: active (running) since Thu 2019-06-27 11:45:17 UTC ...
配置 Squid
可以通過(guò)編輯 /etc/squid/squid.conf 文件來(lái)配置 Squid 。您還可以使用帶有配置選項(xiàng)的分隔文件,可以使用 “include” 指令包含這些選項(xiàng)。
配置文件包含描述每個(gè)配置選項(xiàng)的注釋。
在進(jìn)行任何更改之前,最好備份原始配置文件:
sudo cp /etc/squid/squid.conf{,.orginal}
要編輯文件,請(qǐng)?jiān)谖谋揪庉嬈髦袑⑵浯蜷_(kāi):
sudo nano /etc/squid/squid.conf
默認(rèn)情況下, Squid 配置為偵聽(tīng)服務(wù)器上所有網(wǎng)絡(luò)接口上的 3128 端口。
如果要更改端口并設(shè)置偵聽(tīng)接口,請(qǐng)找到以 http_port 開(kāi)頭的行,并指定接口 IP 地址和新端口。如果沒(méi)有指定網(wǎng)絡(luò)接口, Squid 將監(jiān)聽(tīng)所有網(wǎng)絡(luò)接口。
/etc/squid/squid.conf 中
# Squid normally listens to port 3128 http_port IP_ADDR:PORT
在所有接口和默認(rèn)端口上運(yùn)行 Squid 應(yīng)該適合大多數(shù)用戶。
另一個(gè)有趣的選擇是 forwarded_for 。默認(rèn)情況下,將其設(shè)置為 on 表示 out-box Squid 的行為類(lèi)似于 RFC 兼容代理,并在 X-Forwarded-For 標(biāo)頭中添加客戶端的 IP 地址。如果要設(shè)置透明代理,請(qǐng)取消注釋該指令并將其更改為 transparent 。
將指令設(shè)置為 off 將告訴 Squid 不要在 HTTP 請(qǐng)求中轉(zhuǎn)發(fā)附加客戶端的 IP 地址。
/etc/squid/squid.conf 中
#Default: # forwarded_for on
在 Squid 中,您可以使用訪問(wèn)控制列表 (ACL) 控制客戶端如何訪問(wèn) Web 資源。
默認(rèn)情況下, Squid 只允許從 localhost 訪問(wèn)。
如果將使用代理的所有客戶端都具有靜態(tài) IP 地址,則可以創(chuàng)建包含允許的 IP 的 ACL 。
我們將創(chuàng)建一個(gè)新的專(zhuān)用文件來(lái)保存 IP ,而不是在主配置文件中添加 IP 地址:
/etc/squid/allowed_ips.txt
192.168.33.1 # All other allowed IPs
完成后,打開(kāi)主配置文件并創(chuàng)建一個(gè)名為 allowed_ips (第一個(gè)突出顯示的行) 的新 ACL ,并允許使用該 http_access 指令(第二個(gè)突出顯示的行)訪問(wèn)該 ACL :
/etc/squid/squid.conf 中
# ... acl allowed_ips src "/etc/squid/allowed_ips.txt" # ... #http_access allow localnet http_access allow localhost http_access allow allowed_ips # And finally deny all other access to this proxy http_access deny all
http_access 規(guī)則的順序很重要。請(qǐng)務(wù)必先添加該行 http_access deny all 。
該 http_access 指令的工作方式與防火墻規(guī)則類(lèi)似。 Squid 從上到下讀取規(guī)則,當(dāng)規(guī)則匹配時(shí),不處理下面的規(guī)則。
每當(dāng)您更改配置文件時(shí),都需要重新啟動(dòng) Squid 服務(wù)才能使更改生效:
sudo systemctl restart squid
Squid身份驗(yàn)證
Squid 可以對(duì)經(jīng)過(guò)身份驗(yàn)證的用戶使用不同的后端,包括 Samba , LDAP 和 HTTP 基本身份驗(yàn)證。
在本教程中,我們將配置 Squid 以使用基本身份驗(yàn)證。它是 HTTP 協(xié)議中內(nèi)置的簡(jiǎn)單身份驗(yàn)證方法。
我們將使用 openssl 生成密碼并使用 tee 命令將該 username:password 對(duì)附加到 /etc/squid/htpasswd 文件,如下所示:
printf "USERNAME:$(openssl passwd -crypt PASSWORD)n" | sudo tee -a /etc/squid/htpasswd
讓我們創(chuàng)建一個(gè)名為 “john” 的用戶,密碼為 Sz$Zdg69:
printf "josh:$(openssl passwd -crypt 'Sz$Zdg69')n" | sudo tee -a /etc/squid/htpasswd
josh:RrvgO7NxY86VM
現(xiàn)在創(chuàng)建了用戶,下一步是配置 Squid 以啟用 HTTP 基本身份驗(yàn)證并使用該文件。
打開(kāi)主配置并添加以下內(nèi)容:
/etc/squid/squid.conf 中
# ... auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/htpasswd auth_param basic realm proxy acl authenticated proxy_auth REQUIRED # ... #http_access allow localnet http_access allow localhost http_access allow authenticated # And finally deny all other access to this proxy http_access deny all
前三個(gè)突出顯示的行正在創(chuàng)建一個(gè)名為 authenticated 的新 ACL ,倒數(shù)第三行行允許訪問(wèn)經(jīng)過(guò)身份驗(yàn)證的用戶。
重啟 Squid 服務(wù):
sudo systemctl restart squid
配置防火墻
假設(shè)您正在使用 UFW 管理防火墻,則需要打開(kāi) Squid 端口。為此啟用 “Squid” 配置文件,其中包含默認(rèn) Squid 端口的規(guī)則。
sudo ufw allow 'Squid'
要驗(yàn)證狀態(tài)類(lèi)型:
sudo ufw status
輸出將如下所示:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere Squid ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) Squid (v6) ALLOW Anywhere (v6)
例如,如果 Squid 在另一個(gè)非默認(rèn)端口 8888 上運(yùn)行,則可以使用后面的命令允許該端口上的流量: sudo ufw allow 8888/tcp 。
配置瀏覽器以使用代理
現(xiàn)在您已經(jīng)設(shè)置了 Squid ,最后一步是配置您首選的瀏覽器以使用它。
火狐
對(duì)于 Windows , macOS 和 Linux ,以下步驟相同。
- 在右上角,點(diǎn)擊漢堡包圖標(biāo)?打開(kāi) Firefox 的菜單:
- 單擊⚙ 首選項(xiàng) 鏈接。
- 向下滾動(dòng)到該 網(wǎng)絡(luò)設(shè)置 部分,然后單擊 設(shè)置… 按鈕。
-
將打開(kāi)一個(gè)新窗口。
- 選擇 手動(dòng)代理配置 單選按鈕。
- 在 HTTP 代理 字段輸入您的 Squid 服務(wù)器的 IP 地址, 在 端口 字段輸入 3128。
- 選中 為所有協(xié)議使用相同代理服務(wù)器 復(fù)選框。
- 單擊 確定 按鈕以保存設(shè)置。
此時(shí),您的 Firefox 已配置,您可以通過(guò) Squid 代理瀏覽 Internet 。要驗(yàn)證它,打開(kāi) google.com ,鍵入“我的 IP 是什么”,你應(yīng)該看到你的 Squid 服務(wù)器 IP 地址。
要恢復(fù)默認(rèn)設(shè)置,請(qǐng)轉(zhuǎn)到 Network Settings ,選擇 Use system proxy settings 單選按鈕并保存設(shè)置。
還有幾個(gè)插件可以幫助您配置 Firefox 的代理設(shè)置,如 FoxyProxy 。
谷歌 Chrome 瀏覽器
Google Chrome 使用默認(rèn)的系統(tǒng)代理設(shè)置。您可以使用插件(如 SwitchyOmega) 或從命令行啟動(dòng) Chrome 網(wǎng)絡(luò)瀏覽器,而不是更改操作系統(tǒng)代理設(shè)置。
要使用新配置文件啟動(dòng) Chrome 并連接到 Squid 服務(wù)器,請(qǐng)使用以下命令:
Linux:
/usr/bin/google-chrome --user-data-dir="$HOME/proxy-profile" --proxy-server="http://SQUID_IP:3128"
蘋(píng)果系統(tǒng) :
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --user-data-dir="$HOME/proxy-profile" --proxy-server="http://SQUID_IP:3128"
Windows:
"C:Program Files (x86)GoogleChromeApplicationchrome.exe" ^ --user-data-dir="%USERPROFILE%proxy-profile" ^ --proxy-server="http://SQUID_IP:3128"
如果配置文件不存在,將自動(dòng)創(chuàng)建配置文件。這樣,您可以同時(shí)運(yùn)行多個(gè) Chrome 實(shí)例。
要確認(rèn)代理服務(wù)器是否正常工作,請(qǐng)打開(kāi) google.com ,然后鍵入 “what is my ip” 。瀏覽器中顯示的 IP 應(yīng)該是服務(wù)器的 IP 地址。
結(jié)論
您已經(jīng)學(xué)習(xí)了如何在 Ubuntu 18.04 上安裝 squid 并配置瀏覽器以使用它。
Squid 是最受歡迎的代理緩存服務(wù)器之一。它可以提高 Web 服務(wù)器的速度,并可以幫助您限制用戶訪問(wèn) Internet 。