---- IP緊缺是高速發展的網絡面臨的現實問題,我們該如何解決這 一問題?將只有內部IP的計算機通過一台具有標准IP作為代理服務器 的計算機連接到Internet上是解決此問題的一種絕妙手段。代理服務 器是數據的中轉站,它可以將經過代理服務器的數據記錄下來,為後 繼的數據分析和計費提供服務與幫助。另外,借助代理服務器軟件 (比如Squid)可以建立訪問站點的緩存,從而讓再次訪問的用戶能 夠直接從緩存中調用數據,加快訪問速度,減少重復的網絡數據流 量。 ---- 由於Squid具有權限管理靈活、性能高和效率快等特點,應用較 為廣泛,因此,我們將就代理服務器軟件Squid在Linux、FreeBSD和 Unix應用中的認證問題進行討論,同時還將介紹關於利用Squid輔助 軟件實現代理上網與計費的具體方法。
一、 獲取Squid及相關的軟件 ---- 從http://squid-cache.org/上獲取Squid軟件,從http:// web.onda.com.br/orso/上獲取htpasswd_plus和SQMGRLOG,並將它們 保存在/tmp目錄下。
二、在Linux下編譯並安裝Squid ---- 我們假設軟件環境為Redhat Linux 7.x,編譯和安裝Squid的操 作步驟如下。 ---- 1.下載最新版本的源文件Squid-2.3.STABLE4.src.tar.gz,並 將它放置在/tmp目錄下。 ---- 2.以root身份創建用戶squidadmin#adduser squidadmin ---- 在缺省的情況下,同名組squidadmin已經被建立。Squid因為考 慮到安全問題,不能以root身份運行,所以從一開始就使用新建的用 戶進行安裝管理。 ---- 3.以squidadmin登錄,對Squid源文件解包和安裝。 $cd /tmp $tar -zxvf squid* $cd squid* $./configure --prefix=/usr/local/squid 進入Squid目錄進行編譯,考慮的選項是安裝路徑 --prefix=/usr/local/squid。 $make $make install ---- 4.進入/usr/local/squid/bin目錄,執行$./squid -z,創建 cache交換目錄。至此,Squid已經安裝在用戶的系統上了。然而,要 讓Squid正常運轉,用戶還需要做一些基本設置。Squid的運轉只與/ usr/local/squid/etc/squid.conf有關,所有設置均在此文件中完成。
三、Squid基本設置 #Defaults: acl all src 0.0.0.0/0.0.0.0 設置的規則在此處加入。 http_Access deny all ---- 在缺省的情況下,有以上2條規則。當有請求未能匹配任何一條 用戶定義的規則時,http_access deny all規則將被應用,這 樣,http請求將被拒絕。 ---- 那麼如何在Linux中設置Squid的用戶認證存取控制呢?Squid用 access control list(縮寫為acl)來管理規則。例如: acl aclname acltype string1 ... acl aclname acltype "file" ---- aclname為用戶定義規則的名字,acltype是可被Squid識別的類 別(主要有src、dst、proxy_auth、port和time...),string為用 戶的設置,可以用"file"從外部文件調入設置。 ---- 1.如果用戶喜歡彈出輸入用戶名及密碼的方式,首先需要安裝 認證程序。Squid的源文件包自帶了幾種認證程序,都在/tmp/squid- 2.3.STABLE4/auth_modules目錄下。 (1)$ cd /tmp/squid-2.3.STABLE4/auth_modules/NCSA $ make ncsa_auth (2)將生成的執行文件ncsa_auth拷貝到squid執行文件目錄中。 $ cp ncsa_auth /usr/local/squid/bin (3)用htpasswd_plus生成供Squid利用的用戶名和密碼認證數據文 件。 $htpasswd_plus -c /usr/local/squid/etc/passwd passwd的格式如下。 username1:SilykvIBT46C.:977867617:* username2:tV.8XcR8tgIqw:*:192.168.1.0 username3:密碼:失效時間:可以登錄的IP 若為*,則說明任何項都能與其匹配。另外還可以增加其他更多的用 戶。 $ htpasswd_plus /usr/local/squid/etc/passwd newusername (4)修改squid.conf設置 authenticate program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd指定認證身份的內部程序。添加規則 如下。 acl alloweduer proxy_auth username1 username2或者 acl alloweduser proxy_auth REQUIRED http access allow alloweduser ---- 關鍵字REQUIRED意味著任何合法的用戶都可以認證身份,在其 他的acltype中也起同樣的作用。 ---- 2.用IP限制Squid proxy的使用,設置內容如下。 acl manager proto HTTP FTP … acl safeports port 80 21 443 563 70 210 1025-65535 … acl connect method CONNECT acl allowedIP src 202.120.x.x/255.255.255.224 acl denyIP src 202.96.x.x/255.255.255.224 acl allowedusers proxy_auth REQUIRED http_access deny !safeports #禁止來自!safeports的HTTP請求。 http_access deny denyIP http_access allow allowedIP http_access allow allowedusers ---- 這樣,除了拒絕及允許的IP,其他的請求都將通過輸入用戶名 及密碼來認證。 如果用戶不希望內部計算機訪問某些網站(比如暴力 或色情網站),可以通過如下設置屏蔽這些站點。 ---- acl badip dst "/usr/local/squid/etc/somebadip" ---- http_access deny badip ---- 此處被拒絕的不是來源src的IP地址,而是目的dst的IP地址。 在文件somebadip中存儲如下格式的一批IP地址: ---- 24.244.192.0/255.255.240.0 ---- 61.128.0.0/255.252.0.0 ---- 請大家特別注意http語句的順序,正是通過不同的次序,使得 我們可以進行靈活的配置,得到相應的服務。 ---- 3.其他的一些設置如下所示,其中的大多數可以不做修改,只 使用缺省值即可。 http port 3128 #HTTP協議的默認代理端口。 cache mem 42MB #用一塊內存作為緩沖。 cache dir ufs /home/squid/cache 1024 16 256 ---- #硬盤緩沖區的大小,大小為1GB,一級目錄16個,二級目錄256 個。 ---- cache access log /var/log/squid/access.log ---- #該log文件是用來描述每次客戶請求HTTP內容時高速緩存命中 或未命中的項目,同時還描述提出請求的主機身份及它們所需要的內 容,它是用SQMGRLOG等軟件分析記費的基礎。 ---- cache log /var/log/squid/cache.log ---- #用於描述當Squid守護進程啟動時可以看到的內存容量、交換 空間的大小、高速緩存目錄的位置、所接受的連接類型以及接受連接 的端口。 ---- cache_store_log /var/log/squid/store.log ---- #用於描述頁面從高速緩存中被調入調出的情況。 pid filename /var/run/squid.pid #Squid進程的進程號。 dns nameservers 192.x.x.1 #定義域名解析服務器的地址。 cache_mgr
[email protected] #cache管理員的郵件箱地址。 reference age 1 week #設置緩沖區的更新周期。 maximum object size 4096 KB #設置允許被緩存的一次性最大請求。 cache_effective_user squidadmin squidadmin #以用戶squidadmin的身份運行。
四、用SQMGRLOG實現計費 $cd /tmp $tar -zxvf sqmlog* $cd sqm* $./configure --enable-config=/usr/local/squid/ 的選項主要有以下2項。 ---- 1. 語言 ---- 該語言不包含中文。事實上,它的語言部分是由English.h控制 的,可以漢化後對其進行編譯和安裝。 ---- --enable-language=English, Bulgarian_windows1251, Czech, Dutch, French, German, Hungarian, Indonesian, talian, apanese, Portuguese, Russian_Koi8, Russian_windows1251, Serbian, Spanish, Turkish default: English ---- 2.安裝目錄 ---- --enable-config=/usr/local/squid/etc ---- #筆者將SQMGRLOG的配置文件sqmgrlog.conf 放在與Squid的配 置文件相同的目錄下。 --enable-prefix=/usr/local/squid/bin #最終編譯生成的運行文件sqmgrlog的放置目錄。 $make $make install 最後,我們還要配置sqmgrlog.conf。 access log /usr/local/squid/logs/access.log #設置Squid的使用記錄文件access.log的所在地。 output dir /home/squidadmin/public_Html/squid-reports #生成report的輸出目錄。 passWord /usr/local/squid/etc/passwd #只生成此passwd文件中指明的用戶report。 $./sqmgrlog