Squid 的 rpm 檔案已經和 RedHat 7.1 捆綁發行了,在安裝系統的時候,如果在 Networks 選項中選中的
話,它會自動安裝在系統上。您可以用下面的命令檢查您的系統中是否已經安裝了 Squid:
rpm -q squid
Squid 的最新版本可以在 Squid 首頁 或它的鏡像網站得到。 Squid 可以用下述命令安裝在系統上:
rpm -ivh squid-2.3.STABLE4-10.i386.rpm
配置 Squid
Squid 的定製是通過編輯它的設定檔 squid.conf 來實現的,squid.conf 檔案通常在 /etc/squid 目錄
下。這個設定檔內容很多,但好在它的每個選項都有詳盡的說明。
首先要修改的是 http_port,這個選項指定了 Squid 監聽客戶請求的連接埠,預設值是 3128。要使用代理
功能,這個連接埠值要和運行 Squid 的機器的 IP 位址一起使用,可以修改成下面這樣:
http_port 192.168.0.1:8080
上述聲明表示 Squid 綁定在 IP 位址 192.168.0.1 上,連接埠為 8080。連接埠可以設定為任意值,但要確認
沒有其他程式會使用同樣的連接埠。其他的服務要求的連接埠設定也可以設為類似的配置。
存取控制
使用存取控制特性,可以控制在訪問時根據特定的時間間隔進行緩衝、訪問特定網站或一組網站等等。 Squid 存取控制有兩個要素:ACL 元素和 訪問列表。訪問列表可以允許或拒絕某些使用者對此服務的訪問。
下面列出一些重要的 ACL 元素類型
- src : 源地址 (即客戶機IP地址)
- dst : 目標地址 (即伺服器IP地址)
- srcdomain : 源名稱 (即客戶機名稱)
- dstdomain : 目標名稱 (即伺服器名稱)
- time : 一天中的時刻和一周內的一天
- url_regex : URL 規則運算式匹配
- urlpath_regex: URL-path 規則運算式匹配,略去協議和主機名稱
- proxy_auth : 通過外部程式進行使用者驗證
- maxconn : 單一 IP 的最大串連數
為了使用控制功能,必須先設定 ACL 規則並應用。ACL 聲明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
註:
- acl_element_name 可以是任一個在 ACL 中定義的名稱。
- 任何兩個 ACL 元素不能用相同的名字。
- 每個 ACL 由列表值組成。當進行匹配檢測的時候,多個值由邏輯或運算串連;換言之,即任一 ACL
元素的值被匹配,則這個 ACL 元素即被匹配。
- 並不是所有的 ACL 元素都能使用訪問列表中的全部類型。
- 不同的 ACL 元素寫在不同行中,Squid 將把它們組合在一個列表中。
我們可以使用許多不同的訪問條目。下面列出我們將要用到的幾個:
- http_access: 允許 HTTP 訪問。這個是主要的存取控制條目。
- no_cache: 定義對緩衝請求的響應。
訪問列表的規則由一些類似 'allow' 或 'deny' 的關鍵字構成,用以允許或拒絕向特定或一組 ACL 元素提供服務。
註:
- 這些規則按照它們的排列順序進行匹配檢測,一旦檢測到匹配的規則,匹配檢測就立即結束。
- 一個訪問列表可以又多條規則群組成。
- 如果沒有任何規則與訪問請求匹配,預設動作將與列表中最後一條規則對應。
- 一個訪問條目中的所有元素將用邏輯與運算串連:
http_access Action 聲明1 AND 聲明2 AND 聲明 OR.
http_access Action 聲明3
多個 http_access 聲明間用或運算串連,但每個訪問條目的元素間用與運算串連。
- 請記住列表中的規則總是遵循由上而下的順序。
回到配置 Squid
Squid 預設不做任何使用者存取控制。若要允許某個訪問,必須進行定製規則。在 squid.conf 中 http_access deny 行前輸入下述文字:
acl mynetwork 192.168.0.1/255.255.255.0
http_access allow mynetwork
mynetwork 是 acl 名稱,下一行則是適用於特定 acl (即 mynetwork ) 的規則。192.168.0.1 指明是網路中掩碼為 255.255.255.0 的子網。mynetwork 主要是為了給出網路上一組機器,下一條規則則允許這些
機器訪問 http 服務。上述修改配合 http_port 就可以讓 Squid 很好的工作起來了。 修改完成後,Squid
可以用下述命令啟動:
service squid start
註:
Squid 也可以在系統啟動的時候自動運行,方法是在 ntsysv 或 setup(系統服務菜單)中開啟 Squid。在
對設定檔做了任何更改之後,當前正啟動並執行 Squid 進程必須重新啟動。可以用下面的命令來完成:
- service squid restart 或
- /etc/rc.d/init.d/squid restart
配置用戶端
由於用戶端的請求是送到Proxy 伺服器的特定連接埠的,因此,用戶端也要做相應配置。在繼續下一步之前,請
確認要訪問Proxy 伺服器的用戶端已經串連在區域網路中並已指派了有效 IP 位址,請確認它們都能 ping 通
運行了 Squid 的 Linux 伺服器。
在 Internet Explorer 下的配置:
- 點擊菜單上的 工具 -> Internet 選項
- 選擇 串連 並單擊 區域網路設定
- 選中 使用Proxy 伺服器 輸入上述Proxy 伺服器的 IP 位址和連接埠。
在 Netscape Navigator 下的配置:
- 點擊菜單上的編輯(Edit)->喜好設定(Preference)->進階(Advanced)->Proxy 伺服器(Proxies)。
- 選中手動設定Proxy 伺服器(Manual Proxy Configuration)。
- 點擊查看(View) 並
- 輸入上述Proxy 伺服器的 IP 位址和連接埠。
使用存取控制
多個存取控制及其規則為用戶端存取控制提供了一種靈活的機制。下面給出通常所用到的例子:
- 允許清單中的機器訪問 Internet。
acl allowed_clients src 192.168.0.10 192.168.0.20 192.168.0.30
http_access allow allowed_clients
http_access deny !allowed_clients
這個規則只允許 IP 位址為 192.168.0.10、192.168.0.20 及 192.168.0.30 的機器
訪問 Internet,其他 IP 位址的機器則都被拒絕訪問。
- 限制訪問時段。
acl allowed_clients src 192.168.0.1/255.255.255.0
acl regular_days time MTWHF 10:00-16:00
http_access allow allowed_clients regular_days
http_access deny !allowed_clients
這個規則允許子網192.168.0.1中的所有客戶機在周一到周五的上午10:00到下午4:00
訪問 Internet。
- 為不同的客戶機分配不同的訪問時段。
acl hosts1 src192.168.0.10
acl hosts2 src 192.168.0.20
acl hosts3 src 192.168.0.30
acl morning time 10:00-13:00
acl lunch time 13:30-14:30
acl evening time 15:00-18:00
http_access allow host1 morning
http_access allow host1 evening
http_access allow host2 lunch
http_access allow host3 evening
http_access deny all
在這個規則中,主機 host1 可以在 morning 和 evening 時段訪問 Internet,主機
host2 和 host3 分別只能在 lunch 和 evening 時段訪問 Internet。
註:
一個訪問條目中所有的元素之間用與運算按下述方式串連 :
http_access Action statement1 AND staement2 AND statement OR.
多個 http_access 聲明之間用或運算串連而每個訪問條目中的元素用與運算串連,見
下:
http_access allow host1 morning evening
無法在時段 morning 和時段 evening 同時進行(morning AND evening ),這個表達
式將不會返回真值(TRUE),從而這個條目將不會引發任何動作。
- 網站屏蔽
Squid 可以屏蔽某些特定網站或含有某些特定字詞的網站。可以用下面的規則實現:acl allowed_clients src 192.168.0.1/255.255.255.0
acl banned_sites url_regex abc.com *()(*.com
http_access deny banned_sites
http_access allow allowed_clients
也可以用以屏蔽含有某些特定字詞(比如說 dummy、fake)的網站
acl allowed_clients src 192.168.0.1/255.255.255.0
acl banned_sites url_regex dummy fake
http_access deny banned_sites
http_access allow allowed_machibes
在實際應用中,不需要把需屏蔽的所有網站或字詞都列在上面,可以先儲存在一個檔案
中(請查看 /etc 目錄中的 banned.list檔案)ACL 將從這個檔案中讀出所需資訊用以
屏蔽被禁止的網站。
acl allowed_clients src 192.168.0.1/255.255.255.0
acl banned_sites url_regex "/etc/banned.list"
http_access deny banned_sites
http_access allow allowed_clients
- 最佳化
Squid 可以通過使用 maxconn 元素來限制用戶端串連的數目。 要使用這個選項,必須
先允許 client_db。acl mynetwork 192.168.0.1/255.255.255.0
acl numconn maxconn 5
http_access deny mynetwork numconn
註:
maxconn ACL 使用小於(less-than)對比。此 ACL 規則將在串連數大於設定值時被匹配。
這是 ACL 不與 http_access 允許規則連用的主要原因。
- 快取資料
對於靜態頁面,緩衝的資料能夠立刻回送到發出請求的用戶端。沒有必要去緩衝 cgi-bin
或 Servlet,這些可以用 ACL 元素 no_cache 來禁止。acl cache_prevent1 url_regex cgi-bin /?
acl cache_prevent2 url_regex Servlet
no_cache deny cache_prevent1
no_cache deny cache_prevent2
- 自定錯誤反饋資訊
可以用拒絕規則的 deny_info 選項來自定錯誤反饋資訊。Squid 預設的錯誤資訊放在
/etc/squid/errors 目錄中。這個目錄可以用 error_directory 選項指定。您也可以
定製現存的錯誤反饋資訊。acl allowed_clients src 192.168.0.1/255.255.255.0
acl banned_sites url_regex abc.com *()(*.com
http_access deny banned_sites
deny_info ERR_BANNED_SITE banned_sites
http_access allow allowed_clients
在上面的例子中,當使用者試圖訪問被禁止的網站時,將會顯示一條定製的資訊。
ERR_BANNED_SITE 選項中的檔案名稱必須在上述的錯誤資訊的目錄中。錯誤資訊必須是 HTML 格
式的。上面列出了 ACL 的一些選項,您可以參看 Squid 首頁上的 FAQ 文檔 以獲得使用 ACL
更多的資訊。
日誌
Squid 的所有記錄檔都存放在 /var/log/squid 目錄中,有緩衝日誌、訪問日誌和 store.log檔案。文
件 access.log 記錄了有關客戶機的請求、串連活動、每個 HTTP & ICP 詢問、客戶機 IP 位址、請求方
式、請求的 URL 等等資訊。這些資料可以用來對訪問進行分析。許多程式如 sarg、 calamaris, Squid-Log-Analyzer 都可以用來分析這些資料併產生 HTML 格式的分析報告。 這些報告可以在一組使用者、一組
IP 位址或一組訪問過的網站等等記錄中產生。
這些記錄檔案也可以成為下面這樣:
cache_access_log For access.logcache_log For cache.logcache_store_log For store.log (Store manager)pid_filename Squid process ID file name
驗證方式
Squid 的預設配置允許任何使用者不經過驗證過程就可以進行訪問。Squid 通過一個外部程式提供使用者驗證
功能(比如說只允許有效使用者訪問 Internet),這就需要一個有效使用者名稱和密碼。可以用 proxy_auth
ACL 和 authenticate_program 來實現,在允許訪問前強制進行使用者名稱和密碼的核查。下面列出一些 Squid
能用到的驗證程式:
- LDAP : 使用 Linux Lightweight 目錄訪問協議(Linux Lightweight Directory Access Protocol)
- NCSA : 使用 NCSA 風格的使用者名稱和密碼檔
- SMB : 使用 SMB 協議的服務,如 SAMBA 或 Windows NT
- MSNT : 使用 Windows NT 的域驗證
- PAM : 使用 Linux 的可裝載驗證模組
- getpwam : 使用 Linux 密碼檔
必須指定使用的驗證程式,可以用 authenticate_program 選項完成。請確認選定的驗證程式已安裝並能很
好的工作。
修改 squid.conf 檔案選定驗證程式
authenticate_program /usr/local/bin/pam_auth
acl pass proxy_auth REQUIRED
acl mynetwork src 192.168.0.1/255.255.255.0
http_access deny !mynetwork
http_access allow pass
http_access deny all
這個規則表示,使用 PAM 驗證程式,所有使用者在獲得訪問許可前必須進行驗證。
還有些選項比如 authenticate_ttl 和 authenticate_ip_ttl,可以用來改變驗證程式的動作,比如說使某個使用者名稱及密碼重新生效。
參考資料
本文僅僅初窺了 Squid 的冰山一角,更多的參考資料可以在下面的網站找到:
- Squid Home, www.squid-cache.org
- Squid Documentation Project, squid-docs.sourceforge.net
- visolve.com
- For Proxy Authentication, home.iae.nl/users/devet/squid/proxy_auth
(轉貼自:www.linuxfocus.org,作者:D.S. Oberoi 翻譯:Free Neil)