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

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

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

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

29.4.1. 一般組態選項 (選擇)

http_port 3128

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

cache_peer hostname type proxy-port icp-port

在此可以輸入上層 Proxy,例如如果您想要使用 ISP 的 Proxy。針對 hostname 的部份,輸入要使用的 Proxy IP 位址,並針對 type 部份,輸入 parent。至於 proxy-port 的部份,則輸入上層運算子也會指定的埠號碼,以利在瀏覽器中使用,通常是 8080。如果上層的 ICP 埠是未知的,而且其用途與提供者無關,請將 icp-port 設為 70。除此之外,在埠號碼禁止使用 ICP 通訊協定後,可指定 defaultno-query。就提供者 Proxy 而言,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 中,記錄檔的歸檔和刪除是由在 /etc/logrotate/squid 組態檔中設定的 cron 工作負責執行。

append_domain <domain>

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

forwarded_for on

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

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

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

never_direct allow acl_name

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

29.4.2. 存取控制的選項

Squid 提供控制 Proxy 存取的詳細系統。透過執行 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 定義哪些人可使用 Proxy,以及哪些人可存取網際網路的哪些內容。因此,必須指定 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。使用 Proxy 驗證以及適當的 ACL,就可以為不同的使用者群組個別地控制網際網路的存取。squidGuard 是可以安裝和設定的獨立套件。

auth_param basic program /usr/sbin/pam_auth

如果在 Proxy 上必須驗證使用者,請設定對應的程式,例如 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 查詢。