需要一個(gè)個(gè)人防火墻、一個(gè)企業(yè)internet網(wǎng)關(guān)還是這兩者之間的什么東西嗎?iptables可以完全滿足你的需要!
在任何通用的Linux操作系統(tǒng)中,內(nèi)核包括了一些非常強(qiáng)大且非常靈活的防火墻代碼,這個(gè)代碼叫做Netfilter,不過我們大都通過用戶空間命令iptables來引用它,Netfilter/iptables允許你的Linux內(nèi)核檢查所有通過你系統(tǒng)的網(wǎng)絡(luò)通訊,基于一套非常豐富的標(biāo)準(zhǔn)來判定通訊是做什么的。
用iptables建立Linux防火墻是一個(gè)大的話題—已經(jīng)有完整的書籍介紹它(Suehring, S., and Ziegler, R. Linux Firewalls, 3rd edition. Upper Saddle River, NJ: Novell Press, 2005),事實(shí)上,防火墻工程師本身是一個(gè)職業(yè)(實(shí)際上,我就是干這行的),因此,沒有人能在一篇雜志文章中告訴你你需要知道的用iptables建立防火墻的每件事情。
但是我能提供iptables能做什么事情的一個(gè)概述,一些用于Linux防火墻設(shè)計(jì)的合理原則,建立不同類型防火墻的方便工具的描述,以及更多關(guān)于Linux防火墻的詳細(xì)信息。
Linux防火墻的類型
防火墻,或更精確地說數(shù)據(jù)包過濾器,可以用于許多方面,它可以用于本地單獨(dú)的服務(wù)器和桌面系統(tǒng)提供主機(jī)級(jí)別的保護(hù),阻止基于網(wǎng)絡(luò)的攻擊,用于網(wǎng)絡(luò)結(jié)構(gòu)層保護(hù)整個(gè)網(wǎng)絡(luò),阻止來自其他網(wǎng)絡(luò)的攻擊,以及重定向甚至改變網(wǎng)絡(luò)數(shù)據(jù)包。
Linux防火墻可以做成基于Linux的專用硬件設(shè)備,如一臺(tái)有多個(gè)網(wǎng)絡(luò)接口的PC或一臺(tái)普通的、單個(gè)接口的工作站或服務(wù)器。許多商業(yè)防火墻設(shè)備也是基于Linux/iptables的,與你想象的相反,如果部署在強(qiáng)大的硬件上,基于PC的Linux防火墻也能表現(xiàn)得相當(dāng)好。
那些組成Linux防火墻的元素,它們?yōu)閮蓚€(gè)不同的角色服務(wù),防火墻裝置和基于PC的多接口防火墻被我叫做網(wǎng)絡(luò)防火墻使用,它們作為專用的網(wǎng)絡(luò)設(shè)備,邏輯上與IP路由器相當(dāng),路由器管理不同網(wǎng)絡(luò)之間的通訊。(技術(shù)上,防火墻是路由器,它們僅挑剔路過它們的內(nèi)容),網(wǎng)絡(luò)防火墻也常常完成網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)功能,典型地,它們?cè)试S沒有internet ip地址的主機(jī)能夠訪問互聯(lián)網(wǎng)。
然后,介紹下被我稱為本地防火墻—工作站或服務(wù)器的主要功能根本不是防火墻,但是它們需要保護(hù)它們自己,據(jù)我看來,任何連接到互聯(lián)網(wǎng)的計(jì)算機(jī),無論是服務(wù)器還是工作站,都應(yīng)該運(yùn)行一個(gè)本地防火墻策略,至于Linux系統(tǒng),我們還沒有借口不使用Linux內(nèi)置的Netfilter/iptables功能,而且,這是最容易創(chuàng)建的防火墻腳本類型,本文稍后會(huì)進(jìn)行展示。
防火墻設(shè)計(jì)原則
在我們開始討論Linux防火墻工具前,我們應(yīng)該先了解一下一些常見的防火墻設(shè)計(jì)原則,無論你用iptables保護(hù)一個(gè)獨(dú)立的主機(jī)還是整個(gè)網(wǎng)絡(luò)這些原則都是(或應(yīng)該是)同等有效的。
首先,這里有一些術(shù)語:
◆數(shù)據(jù)包過濾器:檢查單個(gè)網(wǎng)絡(luò)數(shù)據(jù)包,與一套規(guī)則進(jìn)行對(duì)比,并按照規(guī)則進(jìn)行處理。
◆防火墻策略:一套具體的iptables命令或一套iptables命令執(zhí)行的高級(jí)設(shè)計(jì)目標(biāo)。
◆防火墻規(guī)則或數(shù)據(jù)包過濾規(guī)則:防火墻策略的獨(dú)立組件—獨(dú)立的iptables命令重復(fù)。
建立包過濾規(guī)則的第一步是精確地判斷你希望你的防火墻做什么—也就是用公式表達(dá)你的高標(biāo)準(zhǔn)的防火墻策略,例如:如果我為工作站創(chuàng)建一個(gè)本地防火墻腳本,我的邏輯策略看起來象下面這樣:
1、允許出站DNS查詢,通過HTTP和HTTPS進(jìn)行網(wǎng)上沖浪,通過IMAP檢索E-mail,從本地系統(tǒng)到整個(gè)外部網(wǎng)絡(luò)的出站SSH和出站FTP傳輸。
2、允許從我地下室的其他工作站到本系統(tǒng)的入站SSH連接。
3、阻止任何其它的出入站內(nèi)容。
跳過這一定義你高標(biāo)準(zhǔn)策略的重要一步就如編寫軟件前沒有先定義需求一樣。
我建議無論你對(duì)策略做出什么決定,你都應(yīng)該將其象限制一樣要是可行的,許多年以前Marcus Ranum就非常簡明地指出了設(shè)計(jì)防火墻的指導(dǎo)原則:“不能清楚地允許就是禁止”,這個(gè)道理相當(dāng)簡單,因?yàn)槟阏J(rèn)為只要不是必須的網(wǎng)絡(luò)傳輸,是不允許被濫用的,盡管如此并不意味著某些攻擊者就不能濫用它了。
因此,每個(gè)防火墻策略都必須使用一個(gè)阻止規(guī)則結(jié)束,阻止所有未在前面策略語句特殊指出的通訊。
這不僅在網(wǎng)絡(luò)/企業(yè)防火墻策略上是真理,在個(gè)人/本地防火墻上也一樣,在個(gè)人防火墻上一個(gè)常犯的錯(cuò)誤是允許所有的出站傳輸,假設(shè)所有本地的進(jìn)程都是受信任的,如果你的系統(tǒng)被一個(gè)蠕蟲、木馬或病毒感染,這個(gè)假設(shè)將被擊穿。
在一個(gè)如被感染的事件中,你或許不想惡意軟件能使用你的系統(tǒng)發(fā)送垃圾郵件,特別是分布式拒絕服務(wù)攻擊等等,因此,優(yōu)先限制的不僅只有入站(來自外部)網(wǎng)絡(luò)傳輸,而且還有出站(來自內(nèi)部/本地)傳輸,即使是在桌面或服務(wù)器系統(tǒng)的本地防火墻策略也應(yīng)該如此。
另外一個(gè)重要的防火墻設(shè)計(jì)原則是無論什么時(shí)候都將類似的危險(xiǎn)組織在一起,換句話說,系統(tǒng)和網(wǎng)絡(luò)有不同的信任等級(jí)和不同的暴露危險(xiǎn)的等級(jí),它們都應(yīng)該用網(wǎng)絡(luò)防火墻進(jìn)行互相隔離。
共3頁: 1 [2] [3] 下一頁 | |||||
|