架設 Squid Proxy 伺服器

來源:互聯網
上載者:User
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

 

配置用戶端

由於用戶端的請求是送到Proxy 伺服器的特定連接埠的,因此,用戶端也要做相應配置。在繼續下一步之前,請
確認要訪問Proxy 伺服器的用戶端已經串連在區域網路中並已指派了有效 IP 位址,請確認它們都能 ping 通
運行了 Squid 的 Linux 伺服器。
在 Internet Explorer 下的配置:

  1. 點擊菜單上的 工具 -> Internet 選項
  2. 選擇 串連 並單擊 區域網路設定
  3. 選中 使用Proxy 伺服器 輸入上述Proxy 伺服器的 IP 位址和連接埠。

在 Netscape Navigator 下的配置:

  1. 點擊菜單上的編輯(Edit)->喜好設定(Preference)->進階(Advanced)->Proxy 伺服器(Proxies)。
  2. 選中手動設定Proxy 伺服器(Manual Proxy Configuration)。
  3. 點擊查看(View) 並
  4. 輸入上述Proxy 伺服器的 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 規則將在串連數大於設定值時被匹配。
    這是 ACL 不與 http_access 允許規則連用的主要原因。

  6. 快取資料
    對於靜態頁面,緩衝的資料能夠立刻回送到發出請求的用戶端。沒有必要去緩衝 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

  7. 自定錯誤反饋資訊
    可以用拒絕規則的 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
能用到的驗證程式:

  1. LDAP : 使用 Linux Lightweight 目錄訪問協議(Linux Lightweight Directory Access Protocol)
  2. NCSA : 使用 NCSA 風格的使用者名稱和密碼檔
  3. SMB : 使用 SMB 協議的服務,如 SAMBA 或 Windows NT
  4. MSNT : 使用 Windows NT 的域驗證
  5. PAM : 使用 Linux 的可裝載驗證模組
  6. 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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.