我們已經(jīng)知道如果保護(hù)自己的密碼﹐還有如何使用資料加密的手段來保護(hù)資料。但是如果您的電腦遭到﹐密碼檔案和私有鍵值都被盜竊了﹐我們所作的努力不就白費(fèi)了嗎﹖系統(tǒng)遭到入侵,在今天的網(wǎng)路環(huán)境來說已是施空見慣的了... ^_^ 只要您的機(jī)器有連上網(wǎng)路,那就有被入侵的可能。因此,所有的網(wǎng)路安全專家所給的意見都是一樣的:最安全的設(shè)定就是拔掉網(wǎng)路線!
那么,我們?nèi)绾巫龅桨踩木W(wǎng)路連線呢?除了小心還是小心!不過,我們還可以用技術(shù)手段來對(duì)網(wǎng)路線線加以控制,以便將一些不"必要的"連線排除在外。這樣的技術(shù)設(shè)備,就是所謂的“(Fire Wall)”了。
何謂防火墻﹖
Firewall 一詞,原本是建筑物上用來阻隔火災(zāi)的結(jié)構(gòu),也有說是位于引擎室與駕駛艙之間的汽車部件。網(wǎng)路的火墻就是這么用途的啦﹕將危險(xiǎn)的、不安全的連線阻隔在您的網(wǎng)路之外。而我們通常說的火墻有兩種﹕過濾性火墻(filter) 和 代理性火墻(proxy)。若沒特別說明,我們一般所說的火墻是指過濾性火墻。
然而﹐從安全覺度來看,proxy 比起 filter 來說,將更加可靠:因?yàn)樗鼘?nèi)部與外部網(wǎng)路完全區(qū)隔開來了,除非它幫您做連線代理,否則別想建立連線。而且,內(nèi)部網(wǎng)路對(duì)外部網(wǎng)路而言,是完全"隱形"的!除此之外,proxy 也有其非常好用的地方﹐比方說我們可以利用單一的連線﹐如使用 modem/adsl﹐然后讓整個(gè)內(nèi)部網(wǎng)路連接外部資源﹐不僅節(jié)省硬體成本﹐而也無需支付多個(gè) 帳號(hào)與電話線路。Proxy 的功能就是“代理”﹐可以分為“程式代理”和“socks 代理”,如無特指,一般是指程式代理。
前者可以說是為你代理所有應(yīng)用軟體的連線工作﹕當(dāng)您需要連接外部資源的時(shí)候﹐您的請(qǐng)求是直接送給 proxy ﹐然后﹐proxy 會(huì)幫您到真正的目的地去獲取﹐然后再轉(zhuǎn)送給您。而每一次的代理動(dòng)作﹐它都會(huì)將資料保留一個(gè)備份﹐存在它的快取區(qū)去﹐如果再接獲相同的請(qǐng)求(不管是原來的機(jī)器﹐還是另外別的機(jī)器發(fā)出的)﹐它就將存于快取里面的資料做為回復(fù)。有些聰明的 proxy 還能知道快取里面的資料是否和實(shí)際目的地的資料同步呢﹐如果發(fā)現(xiàn)實(shí)際目的地的資料經(jīng)過更新﹐它就會(huì)再次復(fù)制進(jìn)自己的快取去。
從上面的這個(gè)過程﹐我們可以看得出﹐proxy 還可以提高網(wǎng)路的存取速度哦﹐因?yàn)槿绻Y料已經(jīng)在快取里面了﹐其傳送都在 LAN 里面進(jìn)行﹐而無需經(jīng)過復(fù)雜的路由程序。同時(shí)﹐因?yàn)橘Y料無需從外面重復(fù)傳遞﹐實(shí)際上﹐也令到網(wǎng)路的流量減少許多。而且﹐通過 proxy ﹐我們也可以省下許多 IP 位址﹐因?yàn)槠渌麢C(jī)器盡可以使用私有 IP 就行了。目前正時(shí)興的網(wǎng)咖(Internet Cafe)﹐許多就是利用 proxy 來降低成本和提高 www 的瀏覽速度。另外﹐proxy 還可以再經(jīng)由上游 proxy(或proxy陣列) 連接 internet ﹐從而再可以提高效率和安全性。
而 socks 代理呢﹖就好象接線生那樣﹐僅是將您的 TCP 連接由里面的接口搭至外面的接口而且。還記得在“網(wǎng)路概念”里面提到的 API 嗎﹖socks 代理其實(shí)就是代理 API 請(qǐng)求而已﹐而真正處理工作的﹐還是發(fā)出請(qǐng)求的主機(jī)本身。
這里還要一提的是“NAT(Network Address Translation)”﹐它的工作原理也非常近似 socks proxy ﹐不過﹐它是利用轉(zhuǎn)換封包的位址來達(dá)到目的。如果本地網(wǎng)路主機(jī)要將一個(gè)封包送到外面網(wǎng)路﹐當(dāng)火墻收到這個(gè)封包的時(shí)候﹐就會(huì)啟動(dòng) IP 偽裝功能(maquerading)﹐將來源位址暫時(shí)轉(zhuǎn)換成其本身位址﹐然后等到接到回應(yīng)封包之后﹐再將位址進(jìn)行還原(demasquerading)。在里面的機(jī)器根本就無需知道這個(gè)動(dòng)作﹐一切都由火墻處理好了。這和 Proxy 一樣﹐也可以節(jié)省大量的 IP 位址﹐而讓使用私有 IP 位址的主機(jī)也能夠存取 internet 了。因此,有人也將 NAT 稱為 IP Proxy 。
防火墻的運(yùn)作原理
如果您對(duì) TCP 與 IP 協(xié)定已經(jīng)相當(dāng)了解的話﹐尤其是 IP 封包和 TCP 封包格式﹐那么,您將會(huì)更容易了解(過濾性)防火墻的運(yùn)作﹕火墻會(huì)對(duì)所有經(jīng)過的封包進(jìn)行檢查﹐按照一系列規(guī)則(rule)﹐來決定封包的處理方式?;饓σ话愣紩?huì)根據(jù)封包的來源和目的位址﹑協(xié)定﹑port﹑界面等因素進(jìn)行判斷﹐決定是否讓封包通過。提醒一下:firewall 只管放行與否,至于要送到哪里去,則是 routing 所負(fù)責(zé)的。
以 Linux 2.2.x 核心的 ipchains 為例,我們可以為火墻建立一些基本原則來定義好各種的鏈(chain)﹕傳入(input)﹑傳出(output)﹑轉(zhuǎn)遞(forward)﹑重導(dǎo)(redirect)﹑等﹐來決定封包的處理動(dòng)作﹕接受(accept)﹑拒絕(deny)﹑回絕(reject)﹑轉(zhuǎn)遞(forward)﹑偽裝(masquerade)﹑等。在此基礎(chǔ)上﹐然后再配合實(shí)際情形設(shè)定更多規(guī)則加以限制。
我們?cè)O(shè)定規(guī)則的時(shí)候是非常多樣性的﹐也可以由一個(gè) chain 導(dǎo)向另一個(gè) chian ﹐直到符合我們的要求為止。下面讓我們看一看一個(gè)非常陽(yáng)春的規(guī)則設(shè)定例子﹕
當(dāng)我們從一個(gè) chain 跳到另一個(gè)自定義的 chain 的時(shí)候﹐如果自定義的 chain 沒有將封包剔除的話﹐就會(huì)回到剛才的 chain 的下一個(gè)規(guī)則去﹐繼續(xù)其后的規(guī)則檢查。從上例中我們可以看到﹕只有從 192.168.1.1 傳給 192.168.1.2 的 TCP 封包才能過關(guān)﹐其它諸如 ICMP 和 UDP 封包﹐及其他位址的封包一律會(huì)被擋掉。只要我們精心設(shè)計(jì)﹐不難設(shè)定出一個(gè)適合自己情形的不太松也不太緊的火墻的。
防火墻的設(shè)定技巧
從上面的防火墻運(yùn)作來看﹐我們可以運(yùn)用設(shè)定規(guī)則﹐將一些重要的主機(jī)保護(hù)起來﹐讓其只允許特定的網(wǎng)路存取﹐也就可以將大部份的網(wǎng)路入侵者擯于門外。不過﹐對(duì)于那些絕頂駭客高手而言﹐還是會(huì)從您的設(shè)定漏洞攻破您的把守的﹐例如﹕他們通常會(huì)使用“取道”的方法﹐繞過那些被禁止的位址﹐以及通過不斷改變位址來逃避追蹤。有些較優(yōu)秀的火墻程式﹐可以自動(dòng)檢測(cè)一些駭客常用的攻擊方法﹐除了會(huì)對(duì)網(wǎng)路管理員發(fā)出預(yù)警之外﹐還可以即時(shí)切斷該等連線﹐和追查路徑等動(dòng)作。
同時(shí)﹐利用不同系統(tǒng)來設(shè)定多個(gè)火墻﹐也能提高防御能力﹕除非駭客對(duì)所有系統(tǒng)都熟悉﹐否則﹐過了一道火墻﹐還是過不了第二道火墻﹔而且由于第一道火墻的屏隔﹐要探測(cè)第二道火墻的難度也高許多。當(dāng)然﹐要設(shè)定的規(guī)則就更為復(fù)雜了﹐通常都會(huì)造成過于嚴(yán)厲而令到一些網(wǎng)路資源無法使用﹐或降低了網(wǎng)路的效能。
所以﹐設(shè)計(jì)一套完善的規(guī)則﹐其實(shí)是件極具挑戰(zhàn)性的事情﹐其后也需要不斷的測(cè)試以修補(bǔ)漏洞﹐這也是非常耗時(shí)的工作。如果對(duì)一個(gè)繁忙的網(wǎng)路來說﹐事先的測(cè)試工作就顯得非常重要了﹕您總不能在收到一大堆不能連線的投訴之后而關(guān)閉火墻作調(diào)試吧﹖
通常我們?cè)谠O(shè)定火墻的時(shí)候﹐劃分一個(gè)“非軍事區(qū)(DMZ - Demilitarized Zone)”是非常好用的﹕
我們可以設(shè)定火墻﹐允許外部直接傳入到 DMZ 上面的伺服器﹐但僅限制于某些特定的協(xié)定﹐如 DNS﹑WWW﹑﹑MAIL 等﹐同時(shí)也允許內(nèi)部網(wǎng)路使用這些服務(wù)。但外部網(wǎng)路是完全禁止進(jìn)入內(nèi)部網(wǎng)路的﹐而內(nèi)部網(wǎng)路則可以通過 Proxy 存取外部資源﹔我們也允許內(nèi)部伺服器使用 rsync 協(xié)定來和 DMZ 上面的機(jī)器進(jìn)行資料同步。一般我們不會(huì)將重要的資料存放在 DMZ 上面的機(jī)器﹐而且郵件也會(huì)在 DMZ 接收后由內(nèi)部伺服器提取進(jìn)來。這樣﹐就算那里的機(jī)器被攻破了﹐也不至于損失太多。
至于如何一一設(shè)定﹐恐怕不是這里能夠詳細(xì)論述的了。