我們已經知道如果保護自己的密碼﹐和如何使用資料加密的手段來保護資料。但是如果您的電腦遭到入侵﹐密碼檔案和私有鍵值都被盜竊了﹐我們所作的努力不就白費了嗎﹖所以﹐一般的網路系統﹐都會使用“火牆(Fire Wall)”來保護自己的網路不被入侵。

何為火牆﹖

哈~~~我挺喜歡這個詞呢﹗火牆﹖顧名思義就是用火做的牆(雖然這解析和真正的出處﹕汽車部件﹐有點望文生義了)﹐能通得過此牆的不是真金白銀就是火中之鳳﹐其它廢銅爛鐵或飛娥爬蟲﹐一早就給燒成灰燼了。網路的火牆就是這麼用途的啦﹕讓您想要的東西進入網路﹐而擯棄您不想要的東西在網路之外。而我們通常說的火牆有兩種﹕過濾性火牆和連接性火牆。嚴格來說﹐後者應該不能稱為火牆的﹐稱之為代理服務器(Proxy)更準確些﹐因為它只負責替您建立連接而已。而我們這裡要說的火牆是指過濾性火牆。

不過﹐proxy也有其非常好用的地方﹐我們可以利用單一的連線﹐如使用modem﹐允許整個網路獲取外部資源﹐不僅節省硬體成本﹐而也無需支付多個ISP戶口和電話線路。它的功能就是“代理”﹐proxy可以分為“程式代理”和“socks代理”。

前者可以說是為你代理所有工作﹕當您需要連接外部資源的時候﹐您的請求是直接送給proxy﹐然後﹐proxy會幫您到真正的目的地去獲取﹐然後再轉送給您。而每一次的代理動作﹐它都會將資料保留一個備份﹐存在它的快取區去﹐如果再接獲相同的請求(不管是原來的機器﹐還是另外別的機器發出的)﹐它就將存於快取裡面的資料做為回覆。有些聰明的proxy還能知道快取裡面的資料是否和實際目的地的資料同步呢﹐如果發現實際目的地的資料經過更新﹐它就會再次複製進自己的快取去。

從上面的這個過程﹐我們可以看得出﹐proxy還可以提高網路的存取速度哦﹐因為如果資料已經在快取裡面了﹐其傳送都在LAN裡面進行﹐而無需經過複雜的路由程序。同時﹐因為資料無需從外面重複傳遞﹐實際上﹐也令到網路的流量減少許多。而且﹐通過proxy﹐我們也可以省下許多IP地址﹐因為其他機器盡可以使用私有IP就行了。目前正時興的網吧(Internet Cafe)﹐許多就是利用proxy來降低成本和提高速度的了。另外﹐proxy還可以再經由上游proxy(或proxy陣列)連接internet﹐從而再可以提高效率和安全性。

而socks代理呢﹖就好像接線生那樣﹐僅是將您的TCP連接由裡面的接口搭至外面的接口而且。還記得在“網路概念”裡面提到的API嗎﹖socks代理其實就是代理API請求而已﹐而真正處理工作的﹐還是發出請求的主機本身。

這裡還要一提的是“IP偽裝(Masquerading)”﹐它的工作原理也非常近似socks proxy﹐不過﹐它是利用轉換封包的地址來達到目的。如果本地網路主機要將一個封包送到外面網路﹐當火牆收到這個封包的時候﹐就會啟動IP偽裝功能﹐將來源地址暫時轉換成其本身地址﹐然後等到接到回復封包之後﹐再將地址進行還原(demasquerading)。在裡面的機器根本就無需知道這個動作﹐一切都由火牆處理好了。這和Proxy一樣﹐也可以節省大量的IP地址﹐而讓使用私有IP位址的主機也能夠存取internet了。

火牆的運作

如果您對IP協定已經相當了解了﹐也明白到IP封包和TCP封包格式﹐您將會更容易了解火牆的運作﹕火牆會對所有經過的封包進行檢查﹐按照一系列原則(policy)和規則(rule)﹐來決定封包的處理方式。火牆一般都會根據封包的來源和目的地址、協定、port、界面等因素進行判斷﹐決定是否讓封包通過﹐和要傳去那裡。

我們可以為火牆建立一些基本原則來定義好各種的鏈(chain)﹕傳入(input)、傳出(output)、轉遞(forward)、重導(redirect)、等﹐來決定封包的處理動作﹕接受(accept)、拒絕(deny)、反彈(reject)、轉遞(forward)、偽裝(masquerade)、等。在此基礎上﹐然後再配合實際情形設定更多規則加以限制。

我們設定規則的時候是非常多樣性的﹐也可以由一個chain導向另一個chian﹐直到符合我們的要求為止。下面讓我們看一看一個非常陽春的規則設定例子﹕

當我們從一個chain跳到另一個自定義的chain的時候﹐如果自定義的chain沒有將封包剔除的話﹐就會回到剛才的chain的下一個規則去﹐繼續其後的規則檢查。從上例中我們可以看到﹕只有從192.168.1.1傳給192.168.1.2的TCP封包才能過關﹐其它諸如ICMP和UDP封包﹐和其他地址的封包一律會被擋掉。只要我們精心設計好﹐不難設定出一個適合自己情形的不太鬆也不太緊的火牆的。

設定火牆的技巧

從上面的火牆運作來看﹐我們可以通過設定規則﹐將一些重要的主機保護起來﹐讓其只允許特定的網路存取﹐也就可以將大部份的網路入侵者擯於門外。不過﹐對於那些絕頂駭客高手而言﹐還是會從您的設定漏洞攻破您的把守的﹐例如﹕他們通常會使用“取道”的方法﹐繞過那些被禁止的地址﹐以及通過不斷改變位址來逃避追蹤。有些較優秀的火牆程式﹐可以自動檢測一些駭客常用的攻擊方法﹐除了會對網路管理員發出預警之外﹐還可以即時切斷該等連線﹐和追查路徑等動作。

同時﹐利用不同系統來設定多個火牆﹐也能提高防禦能力﹕除非駭客對所有系統都熟悉﹐否則﹐過了一道火牆﹐還是過不了第二道火牆﹔而且由於第一道火牆的屏隔﹐要探測第二道火牆的難度也高許多。當然﹐要設定的規則就更為複雜了﹐通常都會造成過於嚴厲而令到一些網路資源無法使用﹐或降低了網路的效能。

所以﹐設計一套完善的規則﹐其實是件極具挑戰性的事情﹐其後也需要不斷的測試以修補漏洞﹐這也是非常耗時的工作。如果對一個繁忙的網路來說﹐事先的測試工作就顯得非常重要了﹕您總不能在收到一大堆不能連線的投訴之後而關閉火牆作調試吧﹖

通常我們在設定火牆的時候﹐劃分一個“邊際網路(DMZ - Demilitarized Zone)”是非常好用的﹕

我們可以設定火牆﹐允許外部直接傳入到DMZ上面的伺服器﹐但僅限制於某些特定的協定﹐如DNS、WWW、FTP、MAIL等﹐同時也允許內部網路使用這些服務。但外部網路是完全禁止進入內部網路的﹐而內部網路則可以通過Proxy存取外部資源﹔我們也允許內部伺服器使用rsync協定來和DMZ上面的機器進行資料同步。一般我們不會將重要的資料存放在DMZ上面的機器﹐而且郵件也會在DMZ接收後由內部伺服器提取進來。這樣﹐就算那裡的機器被攻破了﹐也不至於損失太多。

至於如何一一設定﹐恐怕不是這裡能夠詳細論述的了。

 

 

 

 


© 2000 Netman 網中人
Last Updated: March 28, 2000