目錄
摘要
Squid 是 Linux 與 UNIX 平台普遍使用的代理快取。這表示它會將要求的網際網路物件 (例如網頁伺服器或 FTP 伺服器上的資料),儲存在比伺服器更接近要求工作站的機器上。您可設定多階層,以確保即使在終端使用者無法察覺的模式中,也能達到最佳的反應時間及較低的頻寬使用率。您可使用其他軟體如 squidGuard,以過濾網路內容。
Squid 可做為代理快取記憶體。它會將物件要求從用戶端 (在此例中是從網頁瀏覽器) 重新導向至伺服器。當從伺服器而來的要求物件到達時,它會將物件傳送到用戶端,並在硬碟快取記憶體中保留物件的副本。快取的其中一個優點為,當有數個用戶端要求相同的物件時,可從硬碟快取記憶體來提供。這可讓用戶端比從網際網路更快地擷取資料。這個程序也可以減少網路流量。
除了實際快取之外,Squid 還提供眾多功能,例如將負載分散到互相通訊的代理伺服器階層、為所有存取代理的用戶端定義嚴格的存取控制清單、允許或拒絕使用其他應用程式來存取特定網頁,以及產生經常瀏覽之網頁的統計資料,以評估使用者的瀏覽習慣。Squid 不是一般的代理。一般而言,它只會代理 HTTP 連接。此外,也支援 FTP、Gopher、SSL 以及 WAIS 等通訊協定,但不支援其他網際網路通訊協定,例如 Real Audio、新聞或視訊會議。因為 Squid 只支援 UDP 通訊協定提供不同快取之間的通訊,許多其他的多媒體程式並不支援。
當 Squid 做為代理快取記憶體時,使用方法有多種。若與防火牆合併,它有助於提高安全性。多個代理可一起使用。它也可以判斷應該快取物件類型和持續的時間長短。
Squid 可與防火牆配合使用,以便使用代理快取記憶體來保護內部網路不受外部的存取。防火牆將會拒絕所有的用戶端存取 Squid 以外的外部服務。所有的網路連接都必須由代理來建立。藉由這種組態方式,Squid 可完全控制網頁存取。
如果防火牆組態包含 DMZ,則代理應在此區域中操作。第 33.5 節「設定操作順暢的代理」 將描述如何執行「透明」代理。這簡化了用戶端的組態,因為在此情況下,它們不需要有關代理的任何資訊。
經過設定之後,可在多個 Squid 例項之間交換物件。這樣可以減少系統的總負載,並可增加在本地網路中找到現有物件的機會。您也可以設定快取階層,使快取可以將物件要求轉送至同層級的快取或上層快取──這將使其從區域網路的另一個快取或直接從來源取得物件。
為快取記憶體階層選擇適當的拓樸是非常重要的,因為這樣它就不會增加網路的整體流量。就大型的網路而言,就非常合適為每個子網路設定代理伺服器,並將它們連接至上層的代理,這樣就可以連接至 ISP 的代理快取。
這些通訊都是由在 UDP 通訊協定最上層執行的 ICP (網際網路快取通訊協定) 所處理。在快取之間的資料傳輸是使用以 TCP 為基礎的 HTTP (超文字傳輸通訊協定,Hypertext Transmission Protocol) 來處理。
為了能找到最適合的伺服器來取得物件,某個快取記憶體會將 ICP 要求傳送到所有同層級的代理。如果有偵測到物件,這些代理就會透過具有 HIT 代碼的 ICP 回應來回覆這些要求;如果沒有偵測到物件,則會透過具有 MISS 代碼的 ICP 回應來回覆這些要求。如果找到多個 HIT 回應,代理伺服器會根據某些因素 (例如哪個快取記憶體傳送回覆的速度最快,哪個伺服器距離最近) 來決定要從哪部伺服器下載。如果沒有收到符合的回應,則會將要求傳送到上層快取。
![]() | |
為了避免網路上不同的快取記憶體中出現物件重複,系統會使用其他 ICP 通訊協定。例如 CARP (快取陣列路由通訊協定) 或 HTCP (超文字快取通訊協定)。在網路中維護愈多的物件,則找到所需物件的機率也就愈大。 | |
網路中所有可用的物件並不全是靜態。其中有許多動態產生的 CGI 頁面、訪客計數器以及加密的 SSL 內容文件。諸如此類的物件是不會被快取的,因為每次存取它們時,它們都會改變。
還有一個問題就是,所有儲存在快取記憶體中的其他物件,應該在那里保留多長時間。為了決定停留時間,系統會指派各種可能的狀態給快取記憶體中的所有物件。網頁以及代理伺服器會藉由新增標頭至這些物件來找出物件的狀態,例如「上一次修改」或「到期」以及對應的日期。也會使用不應該快取指定該物件的其他標題。
由於缺少可用的硬碟空間,系統一般會使用 LRU (最近使用) 等演算法來取代快取記憶體中的物件。基本上這表示代理會清空那些最久沒有被要求的物件。
最重要的事情是要決定系統必須承受的最大網路負載。因此需要特別注意負載峰值,峰值有可能超出日均值的四倍。當存在疑問時,最好高估系統的需求,因為如果讓 Squid 在接近其容量的限制下工作,有可能會造成服務品質的嚴重損失。接下來的小節將依重要順序指出系統因素。
速度在快取處理過程中扮演很重要的角色,因此應該特別注意這個因素。對硬碟而言,此參數可稱為「隨機搜尋時間」,以毫秒為單位。因為 Squid 所讀取或寫入硬碟的資料區塊通常都相當的小,所以硬碟的搜尋時間比其資料輸送量還要重要。如果要使用代理,最好選擇具有高旋轉速的硬碟,因為這種硬碟可以較快的速度將讀寫頭放置在所需的位置。有一個方法可能可以增加系統的速度,就是同時使用多個磁碟或是運用分段 RAID 陣列。
在小的快取記憶體中,HIT (發現要求的物件已在該處) 的機率比較小,因為快取記憶體很容易就會填滿,且新的物件會取代不太被要求的物件。例如,如果快取有 1 GB 可用,而且使用者一天只瀏覽 10 MB,則需要一百天以上才能將快取填滿。
決定所需快取記憶體大小的最簡易方法為,考量連接的最大傳輸速率。連接速率為 1 Mbit/s 時,其最大的傳輸速率為 125 125 KB/s。如果所有這些流量最後都保留在快取記憶體中,則 1 個小時內就會增至 450 MB,假設所有的流量都只在 8 個工作小時中產生,則一天就可達到 3.6 GB。由於連接一般都不會用到其容量上限,因此可以假設快取記憶體所處理的總資料容量大約為 2 GB。這就是為什麼範例中 Squid 需要 2 GB 的磁碟空間,以快取一天中已瀏覽的資料量。
Squid 所需的記憶體容量 (RAM) 與快取記憶體中的物件數量直接相關。Squid 也會將快取記憶體物件的參照以及常要求的物件儲存在主記憶體中以加速此資料的擷取速度。隨機存取記憶體比硬碟的速度快很多。
除此之外,Squid 需要在記憶體中保留其他的資料,例如所有已處理 IP 位址的表格、精確的網域名稱快取、最常要求的物件、存取控制清單、緩衝區等等。
為 Squid 處理程序保留足夠的記憶體是非常重要的,因為若使用磁碟進行交換,系統效能就會大幅地降低。cachemgr.cgi 工具可用於快取記憶體管理。此工具會在第 33.6 節「cachemgr.cgi」 中加以介紹。
Squid 不是一個需要密集使用 CPU 的程式。只有在載入或檢查快取記憶體的內容時,才會增加處理器的負載。使用多處理器的機器並不能提升系統的效能。若要提升效率,最好買更快的磁碟或新增更多的記憶體。
如果尚未安裝 squid 套件,請加以安裝。squid 不屬於 SUSE Linux Enterprise Server 預設安裝範圍。
Squid 在 SUSE® Linux Enterprise Server 中已經過預先設定,所以可在安裝後立即啟動。為了確保啟動更平順,應該將網路設定為至少使用一部名稱伺服器,而且可連接網際網路。如果撥號連接是使用動態 DNS 組態,就有可能產生問題。在此範例中,至少應該輸入名稱伺服器,因為如果 Squid 在 /etc/resolv.conf 中偵測不到 DNS 伺服器,它就不會啟動 。
若要啟動 Squid,請以 root 的身分在指令行中輸入 rcsquid start。第一次啟動時,必須先在 /var/cache/squid 中定義快取記憶體的目錄結構。目錄的定義可由 /etc/init.d/squid 啟動程序檔自動完成,這可能需要花費數秒鐘,甚至幾分鐘。如果 done 以綠色出現在右邊,則表示已成功載入 Squid。若要在本地系統上測試 Squid 的功能,請在瀏覽器中輸入 localhost 做為代理,並輸入 3128 做為埠。
若要允許本地系統和其他系統的使用者存取 Squid 和網際網路,請將 /etc/squid/squid.conf 組態檔中的 http_access deny all 項目變更為 http_access allow all。然而,當您這麼做時,請考量到此動作將使 Squid 可供任何人完全存取。因此,請定義控制代理存取權限的 ACL。如需關於此的詳細資訊,請參閱 第 33.4.2 節「存取控制的選項」。
在修改 /etc/squid/squid.conf 組態檔後,Squid 必須重新載入組態檔。請使用 rcsquid reload 完成此動作。或者也可以使用 rcsquid restart 徹底重新啟動 Squid。
rcsquid status 指令可用來檢查代理是否正在執行。rcsquid stop 指令可關閉 Squid。這可能需要花一段時間,因為 Squid 會在中斷與用戶端的連接並將其資料寫入磁碟前,先等待半分鐘 (在 /etc/squid/squid.conf 中的 shutdown_lifetime 選項)。
如果 Squid 在成功啟動後,仍然於一小段時間後即停止運作,請檢查是否有錯誤的名稱伺服器項目,或者是否缺少 /etc/resolv.conf 檔案。Squid 會在 /var/log/squid/cache.log 檔案中記錄啟動失敗的原因。如果在系統開機時,應該自動載入 Squid,請使用 YaST runlevel 編輯器,將 Squid 以所要的 runlevel 啟動。請參閱第 10.2.3 節「使用 YaST 設定系統服務 (Runlevel)」。
解除安裝 Squid 時不會移除快取記憶體階層或記錄檔。若要移除這些階層,請手動刪除 /var/cache/squid 目錄。
即使本地 DNS 伺服器不管理自己的網域,也可以設定本地 DNS 伺服器。它可以做為僅供快取的名稱伺服器,也可以透過根 名稱伺服器來解析 DNS 要求,而不需任何特殊的組態 (請參閱第 25.4 節「啟動 BIND 名稱伺服器」)。如何達成此目的,取決於您在設定網際網路連接的組態時是否選擇了動態 DNS。
一般而言,使用動態 DNS 時,會由提供者在建立網際網路連接期間設定 DNS 伺服器,且 /etc/resolv.conf 本地檔案會自動進行調整。此行為由 /etc/sysconfig/network/config 檔案透過 NETCONFIG_DNS_POLICY sysconfig 變數進行控制。使用 YaST sysconfig 編輯器將 NETCONFIG_DNS_POLICY 設定為 "" (請參閱第 10.3.1 節「使用 YaST Sysconfig 編輯器變更系統組態」)。然後在 /etc/resolv.conf 檔案中輸入本地 DNS 伺服器,以 127.0.0.1 做為 localhost 的 IP 位址。這樣一來在啟動時,Squid 就可以永遠找到本地名稱伺服器。
為了能夠存取提供者的名稱伺服器,必須在 forwarders 下的 /etc/named.conf 組態檔中輸入提供者的名稱及其 IP 位址。若使用動態 DNS,只要將 sysconfig 變數 NETCONFIG_DNS_POLICY 設為 auto,就可以在建立連接時自動完成此動作。
若使用靜態 DNS,建立連接時將不會執行任何自動的 DNS 調整,所以不必變更任何 sysconfig 變數。但是您必須依照上述方式在 /etc/resolv.conf 檔案中輸入本地的 DNS 伺服器。除此之外,還必須在 forwarders 下的 /etc/named.conf 檔案中手動輸入提供者的靜態名稱伺服器及其 IP 位址。
![]() | DNS 與防火牆 |
|---|---|
如果您有執行防火牆,請確定 DNS 要求可以通過防火牆。 | |
所有的 Squid 代理伺服器的設定值都是在 /etc/squid/squid.conf 檔案中設定。在第一次啟動 Squid 時,此檔案不需做任何變更,但是外部用戶端一開始為拒絕存取。代理可供 localhost 使用。預設的連接埠是 3128。預先安裝的 /etc/squid/squid.conf 組態檔案提供關於選項及許多範例的詳細資訊。幾乎所有的項目都是以 # (加備註的行) 開始,而且可以在行的結尾找到相關的規格。指定的值永遠都與預設值相關,因此在大部分情況下,如果移除備註符號而不變更任何參數,實際上沒有什麼效果。如果有可能,請保留原始的範例,並在行的下方插入選項以及修改過的參數。如此一來,就可以輕易復原預設值,並與變更做比較。
![]() | 在更新後調整組態檔案 |
|---|---|
如果您是從較早的 Squid 版本更新,建議您編輯新的 | |
這是 Squid 傾聽用戶端要求所用的連接埠。預設的連接埠是 3128,但是 8080 也是常用的連接埠。如果有需要,請指定數個以空白分隔的埠號碼。
hostnametypeproxy-porticp-port
在此可以輸入上層代理,例如如果您想要使用 ISP 的代理。針對主機名稱的部分,輸入要使用的代理的名稱或 IP 位址,針對類型的部分,輸入 parent。至於代理連接埠的部分,則輸入同樣由父代運算子指定的埠號,以便在瀏覽器中使用 (通常是 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 仍然會記錄失敗的要求,並拒絕發出新的要求。在類似這種情況下,可以將 minutes 變更為 seconds,然後在瀏覽器中按一下「重新載入」,則幾秒鐘之後就會重新進行撥號程序。
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 查詢。
使用代理伺服器的一般方法如下︰網頁瀏覽器將要求傳送至代理伺服器的某個連接埠,然後代理伺服器會提供這些所需物件 (無論它們是否在快取記憶體中)。使用網路工作時,可能會發生數種狀況:
基於安全理由,建議所有的用戶端都使用代理瀏覽網際網路。
所有的用戶端都必須使用代理,不論它們是否注意到它。
網路上的代理發生變動,但現有的用戶端需要保留其原有的組態。
在所有上述情況下,都可使用透明代理。原則很簡單︰代理會攔截和回應網頁瀏覽器的要求,因此網頁瀏覽器不必知道頁面的來源,即可收到要求的頁面。如名稱所示,整個程序會流暢地執行。
若要通知 squid 它將會做為透明代理,請在主要組態檔案 /etc/squid/squid.conf 中的 http_port 標記處使用 transparent 選項。重新啟動 squid 後,唯一要執行的任務就是重新設定防火牆,以將 http 連接埠重新指向至 http_port 中指定的連接埠。在下面的 squid 組態行中,該指定的埠為埠 3128。
http_port 3128 transparent
現在,請使用連接埠轉遞規則,透過防火牆將所有的內送要求重新導向至 Squid 埠。若要這麼做,請使用Section “Configuring the Firewall with YaST” (Chapter 15, Masquerading and Firewalls, ↑Security Guide)中說明的隨附工具 SuSEfirewall2。其組態檔位於 /etc/sysconfig/SuSEfirewall2。組態檔由詳細記錄的項目所組成。若要設定操作順暢的代理,您必須設定數個防火牆選項:
指向網際網路的裝置︰FW_DEV_EXT="eth1"
指向網路的裝置︰FW_DEV_INT="eth0"
在防火牆上,定義供不受信任的 (外部) 網路 (如網際網路) 存取的連接埠與服務 (請參閱 /etc/services)。在此範例中,僅提供對外的 Web 服務:
FW_SERVICES_EXT_TCP="www"
在從安全 (內部) 網路存取的防火牆上,定義埠或服務 (請參閱 /etc/services),兩者都是透過 TCP 與 UDP 服務:
FW_SERVICES_INT_TCP="domain www 3128" FW_SERVICES_INT_UDP="domain"
如此可允許存取 Web 服務與 Squid (預設埠為 3128)。「domain」 服務代表 DNS (網域名稱服務)。這個服務使用非常普遍。否則,請直接將它從上述項目移除,並將下列選項設為 no:
FW_SERVICE_DNS="yes"
最重要的選項是選項數字 15:
範例 33.1. 防火牆組態︰選項 15¶
# 15.) # Which accesses to services should be redirected to a local port on # the firewall machine? # # This option can be used to force all internal users to surf via # your squid proxy, or transparently redirect incoming webtraffic to # a secure webserver. # # Format: # list of <source network>[,<destination network>,<protocol>[,dport[:lport]] # Where protocol is either tcp or udp. dport is the original # destination port and lport the port on the local machine to # redirect the traffic to # # An exclamation mark in front of source or destination network # means everything EXCEPT the specified network # # Example: "10.0.0.0/8,0/0,tcp,80,3128 0/0,172.20.1.1,tcp,80,8080"
上方的註解顯示要遵照的語法。首先,輸入存取代理防火牆之內部網路的 IP 位址與網路遮罩。其次,輸入這些用戶端的要求傳送到的 IP 位址與網路遮罩。如果是網頁瀏覽器,請將網路指定為 0/0,萬用字元表示「可到任何位置」。完成後,輸入這些要求傳送到的原始目的埠,最後,輸入重新導向所有這些要求的目的埠。由於 Squid 支援 HTTP 以外的通訊協定,請將要求從其他連接埠重新導向到代理,例如 FTP (埠 21)、HTTPS、或 SSL (埠 443)。在此範例中,Web 服務 (埠 80) 會重新導向至代理埠 (埠 3128)。如果需要新增更多的網路或服務,必須在各個項目中以空格隔開。
FW_REDIRECT="192.168.0.0/16,0/0,tcp,80,3128"
若要啟動防火牆並使用它所包含的新組態,請在 /etc/sysconfig/SuSEfirewall2 檔案中變更項目。START_FW 項目必須設為 "yes"。
啟動 Squid,如第 33.3 節「啟動 Squid」 所示。若要確認一切正常,請查看 /var/log/squid/access.log 中的 Squid 記錄。 若要確認是否已正確設定所有的埠,請從網路之外的任何電腦執行機器上的埠掃描。只應開啟 Web 服務 (埠 80)。若要以 nmap 掃描連接埠,指令語法為 nmap -O IP_address。
快取管理員 (cachemgr.cgi) 是一種 CGI 公用程式,用來顯示正在執行之 Squid 處理程序的記憶體使用率統計資料。它也是管理快取和檢視統計資料較方便的方式,因為不需要登入伺服器。
首先,需要在系統上執行網頁伺服器。依第 31 章「Apache HTTP 伺服器」 中所述方式設定 Apache。若要檢查 Apache 是否已在執行,請以 root 的身分輸入 rcapache status 指令。如果出現像這類的訊息:
Checking for service httpd: OK Server uptime: 1 day 18 hours 29 minutes 39 seconds
表示 Apache 正在機器上執行。否則,請輸入 rcapache start,以使用 SUSE Linux Enterprise Server 的預設設定啟動 Apache。設定 Apache 的最後一個步驟是將 cachemgr.cgi 檔案複製到 Apache 的 cgi-bin 目錄。對於 32 位元,方式如下:
cp /usr/lib/squid/cachemgr.cgi /srv/www/cgi-bin/
在 64 位元環境中,檔案 cachemgr.cgi 位於 /usr/lib64/squid/ 之下,若要將其複製到 Apache 目錄,請使用如下指令:
cp /usr/lib64/squid/cachemgr.cgi /srv/www/cgi-bin/
快取管理員需要原始檔案中某些預設的設定值。首先,定義兩個 ACL,然後 http_access 選項會使用這些 ACL 來授予 CGI 程序檔對 Squid 的存取權限。第一個 ACL 最重要,因為快取管理員會嘗試透過 cache_object 通訊協定與 Squid 通訊。
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255
下列規則會將 Squid 的存取權限授與 Apache:
http_access allow manager localhost http_access deny manager
這些規則是假設網頁伺服器與 Squid 在相同的機器上執行。如果快取管理員與 Squid 之間的通訊是源自於另一部電腦上的網頁伺服器,請依 範例 33.2 「存取規則」 所述包含一個額外的 ACL。
範例 33.2. 存取規則¶
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl webserver src 192.168.1.7/255.255.255.255 # webserver IP
然後新增 範例 33.3 「存取規則」 中的規則,以允許從網頁伺服器存取。
範例 33.3. 存取規則¶
http_access allow manager localhost http_access allow manager webserver http_access deny manager
設定管理員的密碼以存取更多的選項,如遠端關閉快取記憶體或是檢視快取記憶體的詳細資訊。為此,請以管理員的密碼以及要檢視的選項清單設定 cachemgr_passwd 項目。這個清單會顯示成 /etc/squid/squid.conf 中項目備註的一部份。
每次變更組態檔時,請重新啟動 Squid。使用 rcsquid reload 即可輕鬆執行重啟。
瀏覽對應的網站—http://webserver.example.org/cgi-bin/cachemgr.cgi。按,然後瀏覽不同的統計資料。
本節目的不是說明 squidGuard 的廣泛組態,而是簡單介紹並給予使用上的一些建議。如需更深入的組態問題,請參閱 squidGuard 網站,網址為 http://www.squidguard.org。
squidGuard 屬於自由軟體 (GPL),是一個靈活而快速的過濾器,也是重新導向器以及 Squid 的存取控制器外掛程式。它可讓您在 Squid 快取上,針對不同的使用者群組,使用不同的限制來定義多重存取規則。squidGuard 使用 Squid 的標準重新導向器介面。squidGuard 可以執行下列動作:
將某些使用者的 Web 存取權限制為一系列已接受或已知的 Web 伺服器或 URL。
針對某些使用者,封鎖某些列示或列為黑名單的網頁伺服器或 URL 的存取權。
針對某些使用者,封鎖符合一般運算式或文字清單的 URL。
將封鎖的 URL,重新導向至「智慧型」的 CGI 資訊頁面。
將未註冊的使用者重新導向至註冊表單。
將橫幅重新導向至空白的 GIF。
根據時間、星期、日期等,使用不同的存取規則。
針對不同的使用者群組,使用不同的規則。
squidGuard 與 Squid 無法用於:
編輯、過濾或審查文件內的文字。
編輯、過濾或審查 HTML 內嵌的程序檔語言,例如 JavaScript 或 VBscript。
使用前,請先安裝 squidGuard。以 /etc/squidguard.conf 提供最小的組態檔。組態範例請見 http://www.squidguard.org/Doc/examples.html。稍後請使用較複雜的組態設定值來測試。
接著,如果用戶端要求已列為黑名單的網站,請建立虛擬的「拒絕存取」頁面,或建立一個有點複雜的 CGI 頁面以重新導向 Squid。強烈建議使用 Apache。
現在,請將 Squid 設定為使用 squidGuard。在 /etc/squid/squid.conf 檔案中使用下列項目:
redirect_program /usr/bin/squidGuard
另一個稱為 redirect_children 的選項會設定在機器上執行之「重新導向」(在此範例中為 squidGuard) 程序的數量。您設定的程序越多,所需的 RAM 就越多。請先嘗試較小的數字 (例如 4)。
redirect_children 4
最後,執行 rcsquid reload,讓 Squid 載入新的組態。現在,請使用瀏覽器測試您的設定值。
Calamaris 是一種 Perl 程序檔,用來產生 ASCII 或 HTML 格式的快取記憶體活動報告。它使用原生的 Squid 存取記錄檔。Calamaris 的首頁網址為 http://Calamaris.Cord.de/。此工具不屬於 SUSE Linux Enterprise Server 預設安裝範圍,若想使用它,可以安裝 calamaris 套件。
以 root 身分登入,然後輸入 cat access.log | calamaris 選項 > reportfile。當要傳輸一個以上的記錄檔時,須依時間順序來排列記錄檔,較舊的檔案排在前面。以下是程式的某些選項:
![]() | 外圍程序與檔案順序 |
|---|---|
如果您有多個類似的檔案,如 | |
輸出所有可用的報告
以 HTML 報告輸出
在報告標題中包含訊息或標誌
在程式的手冊頁中,使用 man calamaris 可以找到各種選項的詳細資訊。
以下是典型的範例:
cat access.log.{10..1} access.log | calamaris -a -w \
> /usr/local/httpd/htdocs/Squid/squidreport.html
這會將報告放在網頁伺服器的目錄中。需要有 Apache 才能檢視報告。
請瀏覽 Squid 的首頁,網址為 http://www.squid-cache.org/。此處可以找到「Squid 使用者指南」(Squid User Guide) 以及有關 Squid 常見問題集 (FAQ) 的豐富資訊。
安裝後,可以在 howtoenh 中找到有關透明代理之簡要操作資訊,檔案名稱為 /usr/share/doc/howto/en/txt/TransparentProxy.gz。除此之外,還可以在 squid-users@squid-cache.org 中找到 Squid 的郵件清單。這個的歸檔是位於 http://www.squid-cache.org/mail-archive/squid-users/。