close
火牆


我們已經知道如果保護自己的密碼﹐還有如何使用資料加密的手段來保護資料。但是如果您的電腦遭到入侵﹐密碼檔案和私有鍵值都被盜竊了﹐我們所作的努 力不就白費了嗎﹖系統遭到入侵,在今天的網路環境來說已是施空見慣的了... ^_^ 只要您的機器有連上網路,那就有被入侵的可能。因此,所有的網路安全專家所給的意見都是一樣的:最安全的設定就是拔掉網路線!

那麼,我們如何做到安全的網路連線呢?除了小心還是小心!不過,我們還可以用技術手段來對網路線線加以控制,以便將一些不"必要的"連線排除在外。這樣的技術設備,就是所謂的“防火牆(Fire Wall)”了。

何謂防火牆﹖

Firewall 一詞,原本是建築物上用來阻隔火災的結構,也有說是位於引擎室與駕駛艙之間的汽車部件。網路的火牆就是這麼用途的啦﹕將危險的、不安全的連線阻隔在您的網路之外。而我們通常說的火牆有兩種﹕過濾性火牆(filter) 和 代理性火牆(proxy)。若沒特別說明,我們一般所說的火牆是指過濾性火牆。

然而﹐從安全覺度來看,proxy 比起 filter 來說,將更加可靠:因為它將內部與外部網路完全區隔開來了,除非它幫您做連線代理,否則別想建立連線。而且,內部網路對外部網路而言,是完全"隱形"的! 除此之外,proxy 也有其非常好用的地方﹐比方說我們可以利用單一的連線﹐如使用 modem/adsl﹐然後讓整個內部網路連接外部資源﹐不僅節省硬體成本﹐而也無需支付多個 ISP 帳號與電話線路。Proxy 的功能就是“代理”﹐可以分為“程式代理”和“socks 代理”,如無特指,一般是指程式代理。

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

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

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

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

防火牆的運作原理

如果您對 TCP 與 IP 協定已經相當了解的話﹐尤其是 IP 封包和 TCP 封包格式﹐那麼,您將會更容易了解(過濾性)防火牆的運作﹕火牆會對所有經過的封包進行檢查﹐按照一系列規則(rule)﹐來決定封包的處理方式。火牆一 般都會根據封包的來源和目的位址﹑協定﹑port﹑界面等因素進行判斷﹐決定是否讓封包通過。提醒一下:firewall 只管放行與否,至於要送到哪裡去,則是 routing 所負責的。

以 Linux 2.2.x 核心的 ipchains 為例,我們可以為火牆建立一些基本原則來定義好各種的鏈(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 接收後由內部伺服器提取進來。這樣﹐就算那裡的機器被攻破了﹐也不至於損失太多。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Bluelove1968 的頭像
    Bluelove1968

    藍色情懷

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()