作者:D.S. Oberoi Squid 已經安裝了嗎? 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 注: 1. acl_element_name 可以是任一個在 ACL 中定義的名稱。 2. 任何兩個 ACL 元素不能用相同的名字。 3. 每個 ACL 由列表值組成。當進行匹配檢測的時候,多個值由邏輯或運算連接;換言之,即任一 ACL 元素的值被匹配,則這個 ACL 元素即被匹配。 4. 並不是所有的 ACL 元素都能使用訪問列表中的全部類型。 5. 不同的 ACL 元素寫在不同行中,Squid 將把它們組合在一個列表中。 我們可以使用許多不同的訪問條目。下面列出我們將要用到的幾個: * http_Access: 允許 HTTP 訪問。這個是主要的訪問控制條目。 * no_cache: 定義對緩存請求的響應。 訪問列表的規則由一些類似 'allow' 或 'deny' 的關鍵字構成,用以允許或拒絕向特定或一組 ACL 元素提供服務。 注: 1. 這些規則按照它們的排列順序進行匹配檢測,一旦檢測到匹配的規則,匹配檢測就立即結束。 2. 一個訪問列表可以又多條規則組成。 3. 如果沒有任何規則與訪問請求匹配,默認動作將與列表中最後一條規則對應。 4. 一個訪問條目中的所有元素將用邏輯與運算連接: http_access Action 聲明1 AND 聲明2 AND 聲明 OR. http_access Action 聲明3 多個 http_access 聲明間用或運算連接,但每個訪問條目的元素間用與運算連接。 5. 請記住列表中的規則總是遵循由上而下的順序。 回到配置 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 進程必須重新啟動。可以用下面的命令來完成: 1. service squid restart 或 2. /etc/rc.d/init.d/squid restart 配置客戶端 由於客戶端的請求是送到代理服務器的特定端口的,因此,客戶端也要做相應配置。在繼續下一步之前,請 確認要訪問代理服務器的客戶端已經連接在局域網中並已分配了有效的 IP 地址,請確認它們都能 ping 通 運行了 Squid 的 Linux 服務器。 在 Internet EXPlorer 下的配置: 1. 點擊菜單上的 工具 -> Internet 選項 2. 選擇 連接 並單擊 局域網設置 3. 選中 使用代理服務器 輸入上述代理服務器的 IP 地址和端口。 在 Netscape Navigator 下的配置: 1. 點擊菜單上的編輯(Edit)->首選項(Preference)->高級(Advanced)->代理服務器(Proxies)。 2. 選中手動配置代理服務器(Manual Proxy Configuration)。 3. 點擊查看(View) 並 4. 輸入上述代理服務器的 IP 地址和端口。 使用訪問控制 多個訪問控制及其規則為客戶端訪問控制提供了一種靈活的機制。下面給出通常所用到的例子: 1. 允許列表中的機器訪問 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 地址的機器則都被拒絕訪問。 2. 限制訪問時段。 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。 3. 為不同的客戶機分配不同的訪問時段。 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),從而這個條目將不會引發任何動作。 4. 站點屏蔽 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 5. 優化 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 規則將在連接數大於設定值