一次在網上閑逛,突然看到論壇有一條訊息說有一種方法,可以讓已經關閉的Linux機器繼續運行ipchains,並且讓這台機器繼續實現防火牆的功能。當時我的第一反映是不屑一顧,難道一個防火牆還可以在關機的狀態下工作?依照論壇中所指的連結,我找到了一個文章,上面說在2.0.x核心中,使用Shutdown ?h(關機)命令可以使防火牆仍處於啟用狀態,而此時沒有掛載磁碟機,也沒有進程在運行。也就是說防火牆將在Level 0下運行,但仍然可以進行包過濾。不過,貼子說該功能在2.2.x系統的核心中已經不具備了。
看到這兒,我有些坐不住了,我決定在核心為2.2.x的機器上也實作類別似的功能,並且我希望不在核心中增加任何補丁。事實證明,我做到了。
安全的防火牆
我認為安全意味著這樣一種可能性,也就是假設防火牆已經被完全關閉,並且已經清除了所有進程空間和檔案系統,這樣就不會有任何駭客可以對該系統進行訪問。因為該機器上已經完全沒有了進程空間,也沒有掛載磁碟機。因此,駭客就無法在系統外使代碼運行在核心空間中。因為這需要寫解釋代碼來產生所需要的結果,而這是一項非常艱苦的工作。
不過需要提請注意的是,該防火牆並不能避免“拒絕服務式”的攻擊。事實上,對於“拒絕服務式”攻擊以及其它的專門耗盡資源的攻擊,該防火牆並不比任何其它的防火牆有效。當然,現實中,一般來說系統並不容易受到這種攻擊。
因為這種方法可以確保沒有一個使用者可以控制該機器,因此可以使安全性大大的提高。這正好應了IT業安全領域常說的一句話,要想讓一台機器絕對安全,就應該把它關機,然後將其鎖在一間屋子裡。
開始實施
我用於測試的是一台基於x86的Red Hat 6.2機器,它安裝有兩個網卡。整個過程無需特殊的系統或者對核心進行增改。開始,我嘗試著在控制啟動並執行指令碼中搜尋,希望能找到一點相關的線索。最後,我把焦點定格在rc0(該指令碼在機器關閉時運行)指令碼上。事實證明,這正是我要找的地方。於是我開始從中刪除一些指令碼,並且進行了一系列測試。
經過一段相對較短的時間,我得出結論,對於Red Hat Linux 6.2,刪除以下指令碼就可以實現上述的功能:
/etc/rc.d/rc0.d/S00killall
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc0.d/K92ipchains
刪除這三個指令碼以後,我們就可以使網路仍然可以工作,並且使ipchains仍然運行。切記,一定要把killall指令碼刪除,因為它的任務是尋找/etc/rc.d/rc0.d/中所有的目錄,並且運行所有以K為開頭的指令碼。也就是說該指令碼會運行K90網路和K92ipchains指令碼,而這兩個指令碼會刪除網路和ipchains。
一些解釋
實際上,我們是把Linux設定成了一個核心子集。當機器暫停時,甚至是機器運行了Shutdown以後,這一部分核心仍駐留在記憶體中。這種方法可以避免在關機的過程中,機器會中止所有的進程,關閉所有網卡以及卸載所有的檔案系統。此外,這種方法使得機器在關閉以後,不能再執行任何內部的任務。然而,核心仍然在運行,記憶體管理器也還在運行。
由於核心仍然在運行,所以在關機以後,所有我們啟動並執行,基於核心的任務都可以被運行。當然,由於大部分的任務都需要進行一些I/O操作(正如本例一樣)。因此,我們必須讓機器關閉以後,仍然使這些連接埠存在。這是通過K90network來實現。它使得網卡在關機以後也不會停止工作。
此外,任何需要使用到的基於核心的服務都必須要處於運行狀態(比如ipchains)。在預設情況下,當系統關閉時,會把所有的ipchains規則都中止。如果這樣的話,在本例中,防火牆將無法工作,所以必須要把清除ipchains規則的指令碼刪除。在本例中即要刪除K92ipchains指令碼。
局限性
在關閉系統以後,只讓部分程式運行,這顯然會有一些局限性。在本例中,最明顯的局限性就是如果用戶端的IP地址是通過背景程式(比如PPP、DHCP)等獲得的,那麼就將無法實現該功能。這就限制了那些使用動態串連使用者的使用。此外,由於在關係系統過程中,所有的使用者代理程式空間(比如Socks5)都將被關閉,因此在本例的設定中,只能實現包過慮和NAT功能。
此外要考慮的一點是,由於所有的磁碟機都被卸載了,所有的交換空間都從機器上被刪除,所以如果機器的記憶體足夠大的話,那麼在處理的資訊量很大時也不會有問題。但是如果使用的是一台效能比較差的老機器,那麼在傳輸的資訊量過大時就會出現一些問題。
總結
作為一個Linux愛好者,我覺得這一小發現很有意思。此外,在我們完成特定的安全任務時,這也給了我們一種特定的解決模式。目前,我最想知道的,是否其它的自由Unix(比如OpenBSD)也可以做成功類似的實驗。此外,雖然我是在家中做的實驗,但是如果將其用於中小型公司的話,我想可以為公司提供安全極高的資料包過濾功能。此外,也可以為一些大的商業任務提供一個非常安全的、高頻寬的防火牆或者路由器。