用Linux實作共享ADSL方案
技術範圍
接入
技術關鍵詞ADSL Linux
Squid
案例描述某一小企業團體,區域網路規模很小,隻有20幾台終端客戶機,沒有伺服器,需要共享上網。還需要一定的網際網路通路權限的設定,為了廢物利用,要求利用現存的一台2000年購買的賽揚電腦進行改造成網際網路代理伺服器或者防火牆。
解決思路2001年購買的電腦,硬體性能普遍沒有時下主流配置強勁,是以如果用Windows
Server來做平台是不可能的了,原因有很多,撇開硬體因素不談──想想吧,賽揚 466CPU、128MB 記憶體跑Windows
Server 2003和ISA Server是什麼感覺啊,老牛拉破車!該團體沒有專職的網管員,不可能時刻去照顧伺服器,但是Windows是衆所周知的出了名的脆弱,如果對他放任不管,不去更新更新檔,不去仔細設定,沒幾天就會被黑客給攻陷了。另外該團隊的老闆對使用破解的軟體心存顧慮。經綜合權衡,決定采用Linux+Squid+ Iptables來實作目标。這些都是開源軟體,不存在破解帶來的安全隐患。且Linux對硬體配置要求極低,像2000年買來的那樣配置的硬體, Linux可以為50個用戶端提供服務,速度絲毫不受影響,而且Linux由于沒有Windows普及面廣,針對它的病毒和黑客活動與Windows平台相比,可以說是微不足道。
故本方案決定采用Debian
Linux作為伺服器平台,使用Squid為用戶端提供HTTP代理服務。
關鍵技術Debian,是一種自由作業系統,全稱Debian GNU/Linux,采用Linux作為核心,由Debian計劃(Debian Project)組織維護。Debian是一個純粹由自由軟體所組合而成的操作環境,而其背後並沒有任何的營利組織支援,它的開發團隊全部都是來自世界各地的志願者,官方開發者的總數就将近1000名,而非官方的開發者亦為數衆多。
Debian以其堅守Unix和自由軟體的精神,以及其給予使用者的眾多選擇(現時Debian包括了超過15,000個元件並支援11個計算機系統結構)而聞名。是以,其它衆多Linux發行版,例如Ubuntu、Knoppix和Linspire也建基于Debian。
Debian以穩定性聞名,是以很多伺服器都使用Debian作為其作業系統具備以下幾個特點:
Debian是極為精簡的Linux發行版,有著幹淨的操作環境。
安裝步驟簡易,大部分情況下隻要<Enter>、<Enter>一直按下去便可以順利安裝。
擁有友善的元件管理程式,可以讓使用者容易的尋找、安裝、删除、更新程式,或系統昇級。
健全的軟體管理制度,包括了臭蟲回報、元件維護人等制度,讓Debian所收集的軟體品質在其的Linux發行元件之上。
擁有龐大的元件庫,令使用者隻需通過其自身所帶的軟體管理系統便可下載下傳並安裝元件,不必再在網絡上尋找。
元件庫分類清楚,使用者可以明确地選擇安裝自由軟體、半自由軟體或閉源軟體。
Squid cache(簡稱為Squid)是一個流行的自由軟體(GNU通用公共許可證)的代理伺服器和Web緩存伺服器。Squid有廣泛的用途,從作為網頁伺服器的字首cache伺服器緩存相關請求來提高Web伺服器的速度,到為一組人共享網絡資源而緩存網際網路,域名系統和其它網絡搜尋,到通過過濾流量幫助網絡安全,到區域網路通過代理上網。Squid主要設計用于在Unix一類系統運作。
Squid的發展曆史相當悠久,功能也相當完善。除了HTTP外,對於FTP與HTTPS的支援也相當好,在3.0 測試版中也支援了IPv6。
配置過程首先登入Debian官方站點下載下傳Debian安裝鏡像,最新版本是etch 4.0r0,将ISO鏡像下載下傳回來刻成CD光牒來安裝最為妥當。
Debian安裝比較簡單,若有問題可以參閱Debian參考手冊([url]http://qref.sourceforge.net/[/url]),這本Debian參考手冊很好,提供了大量的執行個體,涵蓋了系統管理的方方面面。
安裝時要注意網絡的設定,第一塊網卡,即接ADSL Modem的網卡;第二塊網卡即接入區域網路;系統表現為eth0和eth1,但實際上eth0和eth1未必對應與相應的網卡,故當網絡不通的時候應考慮交換一下網線,筆者就曾經犯過這樣的低級錯誤。
接内網的網卡的網絡設定要和區域網路的網絡在同一網段,如有錯誤可以修改該網絡的設定:
#ifdown eth0
#nano
/etc/network/interfaces #根據你的實際需求做出調整
#ifup eth0
編輯/etc/network/interfaces檔案,使其包含類似下面這段的内容:
iface eth0
inte static
address
10.152.16.3
netmask
255.255.255.0
不要使用DHCP,否則其他用戶端會找不到這台伺服器。該檔案避免出現:
inet dhcp
快速設定ADSL撥号上網的方法是使用pppoeconf,在終端中輸入:
#pppoeconf
即可進行設定ADSL撥号。
pppoeconf是使用菜單界面詢問一些問題,設定後,系統每次啟動都會自動撥号ADSL。
伺服器設定最關鍵是在squid的設定。
squid的安裝有兩種途徑,一是從Debian的源中來安裝;二是源碼編譯安裝。
第一個方法很簡單,
apt-get
install squid
就可以完成安裝,但是Squid很多特性都不會實作,我通常更傾向于源碼編譯安裝。
到下面的官方網站下載下傳最新的版本進行編譯安裝:
[url]http://www.squid-cache.org/[/url]
其中STABLE穩定版、DEVEL版通常是提供給開發人員測試程式的,假定下載下傳了最新 的穩定版squid-2.*.STABLE.tar.gz,用以下指令解開壓縮包:
tar xvfz
squid-2.*.STABLE.tar.gz
用bz2方式壓縮的包可能體積更小,相應的指令是:
tar xvfj
squid-2.*.STABLE.tar.bz2
然後,進入相應目錄對源代碼進行配置和編譯,指令如下:
cd
squid-2.*.STABLE2
配置指令configure有很多選項,如果不清楚可先用“-help”檢視。通常情況下,用到的選項有以下幾個:
--prefix=/web/squid
指定Squid的安裝位置,如果隻指定這一選項,那麼該目錄下會有bin、sbin、man、conf等目錄,而主要的配置檔案此時在conf子目錄中。為便于管理,最好用參數--sysconfdir=/etc把這個檔案位置配置為/etc。
--enable-storeio=ufs,null
使用的檔案系統通常是預設的ufs,不過如果想要做一個不緩存任何檔案的代理伺服器,就需要加上null檔案系統。
--enable-arp-acl
這樣可以在規則設定中直接通過用戶端的MAC位址進行管理,防止客戶使用IP欺騙。
--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"
上面兩個選項告訴Squid編入并使用簡體中文錯誤資訊。
--enable-linux-netfilter
允許使用Linux的透明代理功能。
--enable-underscore
允許解析的URL中出現下劃線,因為預設情況下Squid會認為帶下劃線的URL是非法的,并拒絕通路該位址。整個配置編譯過程如下:
./configure
--prefix=/var/squid
--sysconfdir=/etc
--enable-pthreads
--enable-err-language="Simplify_Chinese"
--enable-default-err-language="Simplify_Chinese"
--enable-auth="basic"
--enable-baisc-auth-helpers="NCSA"
其中一些選項有特殊作用。最後執行下面兩條指令,将源代碼編譯為可執行檔案,并拷貝到指定位置。
make
make install
配置squid是通過編輯/etc/squid/squid.conf檔案來完成的。所有項目都在squid.conf中完成。Squid自帶的squid.conf包括非常詳盡的說明,相當于一篇使用者手冊,對配置有任何疑問都可以參照解決。
本案例是要求分advance組、normal組;advance組可以不受任何限制地通路Internet,而normal組則隻能在工作時間上網,而且不能下載下傳多媒體檔案,不能通路某些特定的站點,而且發送請求不能超過3個。 則squid.conf檔案内容如下:
http_port
10.152.16.3:8080
cache_mgr
[email][email protected][/email]
cache_dir
null /tmp
cache_access_log
/var/squid/access.log
cache_log
/var/squid/cache.log
cache_store_log
/var/squid/store.log
visible_hostname
No1.proxy
client_mask
255.255.255.255
httpd_accel_host
virtual
httpd_accel_port
80
httpd_accel_with_proxy
on
httpd_accel_user_host_header
acl advance
arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b
...
acl normal
proxy_auth REQUIED
acl all src 0.0.0.0
acl mmxfile
urlpath_regex \.mp3$ \.avi$ \.exe$
acl
conncount maxconn 3
acl worktime
time MTWHF 8:30-12:00 14:00-18:00
acl sinapage
dstdomain ok.sina.com.cn
acl qq
dstdomain .tcccent.com.cn
http_access
allow advance
deny conncount normal
deny !worktime
deny mmxfile
deny sinapage
deny qq
allow normal
Squid的能力遠不止此,可以建立強大的代理伺服器陣列,可以幫助本地的Web伺服器提高性能,可以提高本地網絡的安全性等。要想發揮它的功效,還需要進一步控制。 而這些就不是本案例所讨論的範疇了。
對于普通的機關上網使用者,Squid可充當代理伺服器,而對于大型網站又可以充當web加速器,在這兩個領域中Squid都表現異常優秀。