/etc/squid/squid.conf 組態檔案

所有的 Squid 代理伺服器的設定值都是在 /etc/squid/squid.conf 檔案中設定。在第一次啟動 Squid 時,此檔案不需做任何變更,但是外部用戶端一開始為拒絕存取。代理可供 localhost 使用。預設的連接埠是 3128。預先安裝的 /etc/squid/squid.conf 組態檔可提供關於選項及許多範例的詳細資訊。幾乎所有的項目都是以 # (加備註的行) 開始,而且可以在行的結尾找到相關的規格。指定的值永遠都與預設值相關,因此在大部分情況下,如果移除備註符號而不變更任何參數,實際上沒有什麼效果。如果有可能,請保留原始的範例,並在行的下方插入選項以及修改過的參數。如此一來,就可以輕易復原預設值,並與變更做比較。

[Tip]在更新後調整組態檔案

如果您是從較早的 Squid 版本更新,建議您編輯新的 /etc/squid/squid.conf,並且只套用在舊檔案中所做的變更。如果您嘗試使用舊的 squid.conf,請注意該組態可能不再有效,因為選項有時會被修改並增加新的變更。

一般組態選項 (選擇)

http_port 3128

這是 Squid 傾聽用戶端要求所用的連接埠。預設的連接埠是 3128,但是 8080 也是常用的連接埠。如果有需要,請指定數個以空白分隔的埠號碼。

cache_peer hostname type proxy-port icp-port

在此可以輸入上層代理,例如如果您想要使用 ISP 的代理。針對 hostname 的部分,輸入要使用的代理 IP 位址,並針對 type 部分,輸入 parent。至於 proxy-port 的部分,則輸入上層運算子也會指定的埠號碼,以便在瀏覽器中使用,通常是 8080。如果上層的 ICP 埠是未知的,而且其用途與提供者無關,請將 icp-port 設為 70。除此之外,還可在埠號碼後面指定 defaultno-query,禁止使用 ICP 通訊協定。就提供者代理而言,Squid 接著就會像一般的瀏覽器一樣地運作。

cache_mem 8 MB

這個項目定義 Squid 可用於常見回覆的記憶體容量。預設值為 8 MB。這不指定 Squid 的記憶體使用量,而且可以超過。

cache_dir ufs /var/cache/squid/ 100 16 256

cache_dir 項目定義磁碟上儲存所有物件的目錄。在結尾處的數目代表可以使用的最大磁碟空間 (MB),以及在第一層與第二層的目錄數目。ufs 參數不可變更。在預設情況下,/var/cache/squid 目錄佔用 100 MB 磁碟空間,而且可以在其中建立 16 個子目錄,每個目錄還各包含 256 個子目錄。當指定要使用的磁碟空間時,請保留足夠的預留磁碟空間。在此指定可用磁碟空間的 50% (最小) 至 80% (最大) 的值最為合理。最後兩個目錄值應該謹慎地增加,因為太多的目錄也有可能導致效能降低。如果您有數個共享快取的磁碟,請輸入數行 cache_dir

cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log

這三個項目指定 Squid 記錄其所有動作的路徑。一般而言,這裏不會有所變更。如果 Squid 負荷過重,則將快取與記錄檔分散到數個磁碟會是一個好辦法。

emulate_httpd_log off

如果該項目設為 on,就會取得可以讀取的記錄檔。然而有些試用程式無法解譯此檔案。

client_netmask 255.255.255.255

使用這個項目時,可以遮罩記錄檔中用戶端的 IP 位址。如果您在這裏輸入 255.255.255.0,IP 位址的最後一位數就會設為 0。您可以用這種方式保護用戶端的隱私。

ftp_user Squid@

使用這個項目可設定匿名 FTP 登入應該使用的 Squid 密碼。在此也可以指定有效的電子郵件地址,因為某些 FTP 伺服器會檢查這些地址的有效性。

cache_mgr webmaster

如果 Squid 意外損毀,Squid 應傳送訊息給此電子郵件地址。預設值為網站管理員

logfile_rotate 0

如果您執行 squid -k rotate,則 Squid 會輪換安全的記錄檔。在此程序中會計算檔案的數目,而且在到達指定的值後,就會覆寫最舊的檔案。預設值為 0,因為歸檔和刪除在 SUSE Linux Enterprise Server 中的記錄檔是由設定在 /etc/logrotate/squid 組態檔中的 cron 工作所執行。

append_domain <domain>

使用 append_domain,可在沒有給定網域時,指定要自動附加的網域。通常,可在此處輸入您自己的網域,因此在瀏覽器中輸入 www 就可以存取您自己的網頁伺服器。

forwarded_for on

如果您將項目設為 off,則 Squid 會從 HTTP 要求移除 IP 位址以及用戶端系統名稱。否則,它會在標頭中新增類似下一行

X-Forwarded-For: 192.168.0.1
negative_ttl 5 minutes; negative_dns_ttl 5 minutes

一般而言,您不需要變更這些值。不過,就算您有撥號連線,網際網路有時也可能無法使用。雖然已重新建立網際網路連線,Squid 仍然會記錄失敗的要求,並拒絕發出新的要求。像這個例子中,將「分鐘」變更為「秒」,然後在瀏覽器中按一下「重新載入」後,幾秒鐘之後就會進行撥號程序。

never_direct allow acl_name

為了防止 Squid 直接從網際網路接受要求,請使用上述指令以強制連接另一個代理。此指令應該在之前已於 cache_peer 中輸入。如果 all 是指定為 acl_name,請強制將所有的要求直接轉遞至 parent。例如,如果您所使用的提供者,嚴格地規定其代理的使用方式或拒絕其防火牆直接存取網際網路,就可能需要執行此動作。

存取控制的選項

Squid 會提供一個詳細系統來控制代理存取。透過執行 ACL,可以輕鬆並完整地設定該系統。這牽涉到列出依序處理之規則的清單。在使用 ACL 前必須先進行定義。某些預設的 ACL,例如 alllocalhost 已經存在。然而,僅定義 ACL 並不代表實際上會套用。這只會發生在連接 http_access 規則使用時。

acl <acl_name> <type> <data>

至少需要三種規格才能定義 ACL。可以任意選擇 <acl_name> 的名稱。至於 <type> 的部分,可從各種不同的選項中選取 (選項位於 /etc/squid/squid.conf 檔案中的 ACCESS CONTROLS 小節)。<data> 的規格取決於個別的 ACL 類型,而且也可以從檔案讀取,例如,透過主機名稱、IP 位址或 URL。下列是一些簡單的範例:

acl mysurfers srcdomain .my-domain.com
acl teachers src 192.168.1.0/255.255.255.0
acl students src 192.168.7.0-192.168.9.0/255.255.255.0
acl lunch time MTWHF 12:00-15:00
http_access allow <acl_name>

http_access 定義哪些人可使用代理,以及哪些人可存取網際網路的哪些內容。因此,必須指定 ACL。已在上文定義的 localhostall,可透過 denyallow 拒絕或允許存取。您可以建立包含任何數目之 http_access 項目的清單,系統會從上至下處理這些項目,並按照前面優先的原則允許或拒絕存取個別 URL。最後一個項目應該永遠為 http_access deny all。在下列範例中,localhost 對於每個項目都擁有完整的存取權,而所有其他的主機則完全無法存取。

http_access allow localhost
http_access deny all

在另一個使用這些規則的範例中,teachers 群組永遠具有網際網路的存取權。students 群組只能取得在星期一到星期五午休時間的存取權。

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

基於可讀性的理由,http_access 項目清單,只能在 /etc/squid/squid.conf 檔案中的指定位置中輸入。也就是,在文字之間

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR
# CLIENTS

以及最後

http_access deny all
redirect_program /usr/bin/squidGuard

使用此選項,可以指定如 squidGuard 之類的重新導向器,來封鎖不需要的 URL。使用代理驗證以及適當的 ACL,就可以為不同的使用者群組個別地控制網際網路的存取。squidGuard 是可以安裝和設定的獨立套件。

auth_param basic program /usr/sbin/pam_auth

如果在代理上必須對使用者進行驗證,請設定對應的程式,例如 pam_auth。第一次存取 pam_auth 時,使用者會看到一個登入視窗,請在此輸入使用者名稱與密碼。除此之外,仍然需要 ACL,因此只有擁有有效登入的用戶端可以使用網際網路:

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

proxy_auth 之後的 REQUIRED 可以使用允許的使用者名稱清單或是到達這類清單的路徑來取代。

ident_lookup_access allow <acl_name>

使用這個項目,就會為所有 ACL 定義的用戶端執行 ident 要求以尋找每個使用者的身份。如果您將 all 套用至 <acl_name>,會對所有用戶端生效。另外,ident 精靈必須在所有的用戶端上執行。在 Linux 上,請為此用途安裝 pidentd 套件。在 Microsoft Windows 上,可以從網際網路下載可用的免費軟體。若要確保只允許 ident 查詢為成功的用戶端,請在此定義對應的 ACL:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

同樣地,請使用允許的使用者名稱清單來取代 REQUIRED。使用 ident 會大幅增加存取時間,因為每個要求都會重複 ident 查詢。