所有的 Squid 代理伺服器的設定值都是在 /etc/squid/squid.conf
檔案中設定。在第一次啟動 Squid 時,此檔案不需做任何變更,但是外部用戶端一開始為拒絕存取。代理可供 localhost
使用。預設的連接埠是 3128
。預先安裝的 /etc/squid/squid.conf
組態檔可提供關於選項及許多範例的詳細資訊。幾乎所有的項目都是以 #
(加備註的行) 開始,而且可以在行的結尾找到相關的規格。指定的值永遠都與預設值相關,因此在大部分情況下,如果移除備註符號而不變更任何參數,實際上沒有什麼效果。如果有可能,請保留原始的範例,並在行的下方插入選項以及修改過的參數。如此一來,就可以輕易復原預設值,並與變更做比較。
![]() | 在更新後調整組態檔案 |
---|---|
如果您是從較早的 Squid 版本更新,建議您編輯新的 |
這是 Squid 傾聽用戶端要求所用的連接埠。預設的連接埠是 3128
,但是 8080
也是常用的連接埠。如果有需要,請指定數個以空白分隔的埠號碼。
hostname
type
proxy-port
icp-port
在此可以輸入上層代理,例如如果您想要使用 ISP 的代理。針對 hostname
的部分,輸入要使用的代理 IP 位址,並針對 type
部分,輸入 parent
。至於 proxy-port
的部分,則輸入上層運算子也會指定的埠號碼,以便在瀏覽器中使用,通常是 8080
。如果上層的 ICP 埠是未知的,而且其用途與提供者無關,請將 icp-port
設為 7
或 0
。除此之外,還可在埠號碼後面指定 default
與 no-query
,禁止使用 ICP 通訊協定。就提供者代理而言,Squid 接著就會像一般的瀏覽器一樣地運作。
這個項目定義 Squid 可用於常見回覆的記憶體容量。預設值為 8 MB
。這不指定 Squid 的記憶體使用量,而且可以超過。
cache_dir 項目定義磁碟上儲存所有物件的目錄。在結尾處的數目代表可以使用的最大磁碟空間 (MB),以及在第一層與第二層的目錄數目。ufs
參數不可變更。在預設情況下,/var/cache/squid
目錄佔用 100 MB 磁碟空間,而且可以在其中建立 16 個子目錄,每個目錄還各包含 256 個子目錄。當指定要使用的磁碟空間時,請保留足夠的預留磁碟空間。在此指定可用磁碟空間的 50% (最小) 至 80% (最大) 的值最為合理。最後兩個目錄值應該謹慎地增加,因為太多的目錄也有可能導致效能降低。如果您有數個共享快取的磁碟,請輸入數行 cache_dir。
這三個項目指定 Squid 記錄其所有動作的路徑。一般而言,這裏不會有所變更。如果 Squid 負荷過重,則將快取與記錄檔分散到數個磁碟會是一個好辦法。
如果該項目設為 on,就會取得可以讀取的記錄檔。然而有些試用程式無法解譯此檔案。
使用這個項目時,可以遮罩記錄檔中用戶端的 IP 位址。如果您在這裏輸入 255.255.255.0
,IP 位址的最後一位數就會設為 0。您可以用這種方式保護用戶端的隱私。
使用這個項目可設定匿名 FTP 登入應該使用的 Squid 密碼。在此也可以指定有效的電子郵件地址,因為某些 FTP 伺服器會檢查這些地址的有效性。
如果 Squid 意外損毀,Squid 應傳送訊息給此電子郵件地址。預設值為網站管理員。
如果您執行 squid -k rotate
,則 Squid 會輪換安全的記錄檔。在此程序中會計算檔案的數目,而且在到達指定的值後,就會覆寫最舊的檔案。預設值為 0
,因為歸檔和刪除在 SUSE Linux Enterprise Server 中的記錄檔是由設定在 /etc/logrotate/squid
組態檔中的 cron 工作所執行。
使用 append_domain,可在沒有給定網域時,指定要自動附加的網域。通常,可在此處輸入您自己的網域,因此在瀏覽器中輸入 www 就可以存取您自己的網頁伺服器。
如果您將項目設為 off,則 Squid 會從 HTTP 要求移除 IP 位址以及用戶端系統名稱。否則,它會在標頭中新增類似下一行
X-Forwarded-For: 192.168.0.1
一般而言,您不需要變更這些值。不過,就算您有撥號連線,網際網路有時也可能無法使用。雖然已重新建立網際網路連線,Squid 仍然會記錄失敗的要求,並拒絕發出新的要求。像這個例子中,將「分鐘」變更為「秒」,然後在瀏覽器中按一下「重新載入」後,幾秒鐘之後就會進行撥號程序。
acl_name
為了防止 Squid 直接從網際網路接受要求,請使用上述指令以強制連接另一個代理。此指令應該在之前已於 cache_peer 中輸入。如果 all
是指定為 acl_name
,請強制將所有的要求直接轉遞至 parent。例如,如果您所使用的提供者,嚴格地規定其代理的使用方式或拒絕其防火牆直接存取網際網路,就可能需要執行此動作。
Squid 會提供一個詳細系統來控制代理存取。透過執行 ACL,可以輕鬆並完整地設定該系統。這牽涉到列出依序處理之規則的清單。在使用 ACL 前必須先進行定義。某些預設的 ACL,例如 all 與 localhost 已經存在。然而,僅定義 ACL 並不代表實際上會套用。這只會發生在連接 http_access 規則使用時。
至少需要三種規格才能定義 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 定義哪些人可使用代理,以及哪些人可存取網際網路的哪些內容。因此,必須指定 ACL。已在上文定義的 localhost 與 all,可透過 deny 或 allow 拒絕或允許存取。您可以建立包含任何數目之 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
使用此選項,可以指定如 squidGuard 之類的重新導向器,來封鎖不需要的 URL。使用代理驗證以及適當的 ACL,就可以為不同的使用者群組個別地控制網際網路的存取。squidGuard 是可以安裝和設定的獨立套件。
如果在代理上必須對使用者進行驗證,請設定對應的程式,例如 pam_auth。第一次存取 pam_auth 時,使用者會看到一個登入視窗,請在此輸入使用者名稱與密碼。除此之外,仍然需要 ACL,因此只有擁有有效登入的用戶端可以使用網際網路:
acl password proxy_auth REQUIRED http_access allow password http_access deny all
在 proxy_auth 之後的 REQUIRED 可以使用允許的使用者名稱清單或是到達這類清單的路徑來取代。
使用這個項目,就會為所有 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 查詢。