歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 讓關閉的Linux操作系統實現防火牆

讓關閉的Linux操作系統實現防火牆

日期:2017/3/6 15:14:40   编辑:關於Unix
一次在網上閒逛,突然看到論壇有一條消息說有一種方法,可以讓已經關閉的Linux機器繼續運行ipchains,並且讓這台機器繼續實現防火牆的功能。當時我的第一反映是不屑一顧,難道一個防火牆還可以在關機的狀態下工作?依照論壇中所指的鏈接,我找到了一個帖子,   一次在網上閒逛,突然看到論壇有一條消息說有一種方法,可以讓已經關閉的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/K9.network

  /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)也可以做成功類似的實驗。此外,雖然我是在家中做的實驗,但是如果將其用於中小型公司的話,我想可以為公司提供安全極高的數據包過濾功能。此外,也可以為一些大的商業任務提供一個非常安全的、高帶寬的防火牆或者路由器。

Copyright © Linux教程網 All Rights Reserved