Squid 是一款很受歡迎的開源代理伺服器,可以提升網路效能、安全性與隱私性。它可以用來快取常被存取的內容、過濾不需要的流量,並讓用戶端連線匿名化。

在開始之前,需要有 Linux 9 系統的 root 權限,以及穩定的網路連線,並具備基本的 Linux 終端機指令和網路協定知識。

1. 安裝 Squid

使用套件管理器安裝 Squid:

sudo dnf install squid

這會下載並安裝 Squid 套件及其相依套件。如果安裝成功,就可以進行下一步。

2. 在伺服器上設定 Squid

Squid 預設的設定檔位於 /etc/squid/squid.conf。要編輯這個檔案,可以用 root 權限開啟 Nano 或 Vim 等文字編輯器:

sudo vim /etc/squid/squid.conf

可以依照需求自訂設定檔中的各項設定。以下是一個允許任何用戶端存取代理伺服器的設定範例:

http_port 3128
cache_dir ufs /var/spool/squid 100 16 256
acl all src all
http_access allow all
  • http_port 指定 Squid 監聽傳入請求所使用的 TCP 埠號。
  • cache_dir 指定 Squid 儲存快取檔案的目錄。
  • acl all src all 定義了一個允許任何用戶端存取代理伺服器的存取控制清單。
  • http_access allow all 授予 ACL 中的用戶端使用代理伺服器的權限。

用以下指令啟動並啟用 Squid 服務:

sudo systemctl enable --now squid

檢查狀態以確認 Squid 正在執行:

sudo systemctl status squid

應該會看到顯示服務處於啟用中且正在執行的訊息。

3. 保護 Squid

Squid 預設沒有任何安全機制,因此需要採取一些步驟來保護 Squid 的安裝。可以設定存取控制來限制誰能存取代理伺服器、監控 Squid 日誌以留意可疑活動,並讓 Squid 保持在最新的安全修補狀態。

使用存取控制清單(ACL)來限制對代理伺服器的存取。例如,可以建立一個只允許特定 IP 位址或網段發出請求的 ACL。

監控 Squid 日誌,留意異常活動,例如來自未知用戶端的請求,或單一 IP 位址產生的大量流量。可以使用 Logwatch 或 Splunk 之類的工具來解析和分析 Squid 日誌。

要使用 https_proxy,需要一張憑證:

sudo openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.crt 

4. Squid 疑難排解

如果遇到 Squid 的問題,可以用各種疑難排解技巧來診斷和解決。以下是一些起步的建議:

檢查 Squid 日誌中的錯誤訊息或警告。預設的日誌檔案位於 /var/log/squid/access.log/var/log/squid/cache.log

使用 squidclient 指令測試 Squid 的連線和效能。例如,可以執行 squidclient -h localhost -p 3128 http://www.google.com 來測試 Squid 是否能夠取得網頁。

利用線上資源和社群論壇,向其他 Squid 使用者尋求協助。Squid 官方網站、郵件論壇和 IRC 頻道都是不錯的起點。

透過以下指令安裝驗證工具:

sudo dnf install httpd-tools -y

並新增帳號:

sudo htpasswd -c /etc/squid/passwords your_accout_name

編輯設定檔 vim /etc/squid/squid.conf,加入以下幾行:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic children 5
auth_param basic realm "Squid proxy-caching web server"
auth_param basic credentialsttl 5 hours

acl auth_users proxy_auth REQUIRED
http_access allow auth_users

5. 在用戶端設定

在 Linux 伺服器上設定好 Squid 之後,可能會想要設定用戶端裝置,讓它們透過 Squid 代理伺服器連上網際網路。其中一種方式是在機器上設定 http_proxyhttps_proxy 這兩個環境變數。

export http_proxy=http://<squid_server_ip>:3128
export https_proxy=http://<squid_server_ip>:3128

squid_server_ip 換成 Squid 伺服器的 IP 位址。如果已經把 Squid 設定成監聽其他埠號,也要把 3128 換成對應的埠號。

如果有加上密碼,代理位址中也需要加上驗證資訊:

export http_proxy=your_account_name:your_password@<squid_server_ip>:3128
export https_proxy=your_account_name:your_password@<squid_server_ip>:3128

要讓這些環境變數在不同終端機工作階段之間持續生效,可以把上面兩行指令加進 shell 的啟動檔案(bash 用 ~/.bashrc,zsh 用 ~/.zshrc 等等)。

現在就可以透過 Squid 代理伺服器連上網際網路了。請注意,並非所有應用程式都會遵循這些環境變數,因此有些應用程式可能需要另外個別設定代理伺服器。

6. 小結

本教學示範了如何在 Linux 上部署 Squid,並依照需求進行相關設定。