讓關(guān)閉的Linux操作系統(tǒng)實(shí)現(xiàn)防火墻功能
看到這兒,我有些坐不住了,我決定在內(nèi)核為2.2.x的機(jī)器上也實(shí)現(xiàn)類似的功能,并且我希望不在內(nèi)核中增加任何補(bǔ)丁。事實(shí)證明,我做到了。
安全的防火墻
我認(rèn)為安全意味著這樣一種可能性,也就是假設(shè)防火墻已經(jīng)被完全關(guān)閉,并且已經(jīng)清除了所有進(jìn)程空間和文件系統(tǒng),這樣就不會(huì)有任何黑客可以對(duì)該系統(tǒng)進(jìn)行訪問。因?yàn)樵摍C(jī)器上已經(jīng)完全沒有了進(jìn)程空間,也沒有掛載驅(qū)動(dòng)器。因此,黑客就無法在系統(tǒng)外使代碼運(yùn)行在內(nèi)核空間中。因?yàn)檫@需要寫解釋代碼來產(chǎn)生所需要的結(jié)果,而這是一項(xiàng)非常艱苦的工作。
不過需要提請(qǐng)注意的是,該防火墻并不能避免“拒絕服務(wù)式”的攻擊。事實(shí)上,對(duì)于“拒絕服務(wù)式”攻擊以及其它的專門耗盡資源的攻擊,該防火墻并不比任何其它的防火墻有效。當(dāng)然,現(xiàn)實(shí)中,一般來說系統(tǒng)并不容易受到這種攻擊。
因?yàn)檫@種方法可以確保沒有一個(gè)用戶可以控制該機(jī)器,因此可以使安全性大大的提高。這正好應(yīng)了IT業(yè)安全領(lǐng)域常說的一句話,要想讓一臺(tái)機(jī)器絕對(duì)安全,就應(yīng)該把它關(guān)機(jī),然后將其鎖在一間屋子里。
開始實(shí)施
我用于測(cè)試的是一臺(tái)基于x86的Red Hat 6.2機(jī)器,它安裝有兩個(gè)網(wǎng)卡。整個(gè)過程無需特殊的系統(tǒng)或者對(duì)內(nèi)核進(jìn)行增改。開始,我嘗試著在控制運(yùn)行的腳本中搜索,希望能找到一點(diǎn)相關(guān)的線索。最后,我把焦點(diǎn)定格在rc0(該腳本在機(jī)器關(guān)閉時(shí)運(yùn)行)腳本上。事實(shí)證明,這正是我要找的地方。于是我開始從中刪除一些腳本,并且進(jìn)行了一系列測(cè)試。
經(jīng)過一段相對(duì)較短的時(shí)間,我得出結(jié)論,對(duì)于Red Hat Linux 6.2,刪除以下腳本就可以實(shí)現(xiàn)上述的功能:
/etc/rc.d/rc0.d/S00killall
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc0.d/K92ipchains
刪除這三個(gè)腳本以后,我們就可以使網(wǎng)絡(luò)仍然可以工作,并且使ipchains仍然運(yùn)行。切記,一定要把killall腳本刪除,因?yàn)樗娜蝿?wù)是尋找/etc/rc.d/rc0.d/中所有的目錄,并且運(yùn)行所有以K為開頭的腳本。也就是說該腳本會(huì)運(yùn)行K90網(wǎng)絡(luò)和K92ipchains腳本,而這兩個(gè)腳本會(huì)刪除網(wǎng)絡(luò)和ipchains。
一些解釋
實(shí)際上,我們是把Linux設(shè)置成了一個(gè)內(nèi)核子集。當(dāng)機(jī)器暫停時(shí),甚至是機(jī)器運(yùn)行了Shutdown以后,這一部分內(nèi)核仍駐留在內(nèi)存中。這種方法可以避免在關(guān)機(jī)的過程中,機(jī)器會(huì)中止所有的進(jìn)程,關(guān)閉所有網(wǎng)卡以及卸載所有的文件系統(tǒng)。此外,這種方法使得機(jī)器在關(guān)閉以后,不能再執(zhí)行任何內(nèi)部的任務(wù)。然而,內(nèi)核仍然在運(yùn)行,內(nèi)存管理器也還在運(yùn)行。
由于內(nèi)核仍然在運(yùn)行,所以在關(guān)機(jī)以后,所有我們運(yùn)行的,基于內(nèi)核的任務(wù)都可以被運(yùn)行。當(dāng)然,由于大部分的任務(wù)都需要進(jìn)行一些I/O操作(正如本例一樣)。因此,我們必須讓機(jī)器關(guān)閉以后,仍然使這些端口存在。這是通過K90network來實(shí)現(xiàn)。它使得網(wǎng)卡在關(guān)機(jī)以后也不會(huì)停止工作。
此外,任何需要使用到的基于內(nèi)核的服務(wù)都必須要處于運(yùn)行狀態(tài)(比如ipchains)。在缺省情況下,當(dāng)系統(tǒng)關(guān)閉時(shí),會(huì)把所有的ipchains規(guī)則都中止。如果這樣的話,在本例中,防火墻將無法工作,所以必須要把清除ipchains規(guī)則的腳本刪除。在本例中即要?jiǎng)h除K92ipchains腳本。
局限性
在關(guān)閉系統(tǒng)以后,只讓部分程序運(yùn)行,這顯然會(huì)有一些局限性。在本例中,最明顯的局限性就是如果客戶端的IP地址是通過后臺(tái)程序(比如PPP、DHCP)等獲得的,那么就將無法實(shí)現(xiàn)該功能。這就限制了那些使用動(dòng)態(tài)連接用戶的使用。此外,由于在關(guān)系系統(tǒng)過程中,所有的用戶代理空間(比如Socks5)都將被關(guān)閉,因此在本例的設(shè)置中,只能實(shí)現(xiàn)包過慮和NAT功能。
此外要考慮的一點(diǎn)是,由于所有的驅(qū)動(dòng)器都被卸載了,所有的交換空間都從機(jī)器上被刪除,所以如果機(jī)器的內(nèi)存足夠大的話,那么在處理的信息量很大時(shí)也不會(huì)有問題。但是如果使用的是一臺(tái)性能比較差的老機(jī)器,那么在傳輸?shù)男畔⒘窟^大時(shí)就會(huì)出現(xiàn)一些問題。
總結(jié)
作為一個(gè)Linux愛好者,我覺得這一小發(fā)現(xiàn)很有意思。此外,在我們完成特定的安全任務(wù)時(shí),這也給了我們一種特定的解決模式。目前,我最想知道的,是否其它的自由Unix(比如OpenBSD)也可以做成功類似的實(shí)驗(yàn)。此外,雖然我是在家中做的實(shí)驗(yàn),但是如果將其用于中小型公司的話,我想可以為公司提供安全極高的數(shù)據(jù)包過濾功能。此外,也可以為一些大的商業(yè)任務(wù)提供一個(gè)非常安全的、高帶寬的防火墻或者路由器
評(píng)論