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