開發硬件防火牆的主要步驟

這裏說的雖然是硬件防火牆,但幾乎所有的工作都是軟件工作。硬件防火牆的核心是軟件。

在開發前,首先要清楚知道自已要需要的是什麼類型的防火牆。同爲硬件防火牆,大致可以分爲高端以千兆爲代表的主火牆,中端的百兆企業防火牆,以及低端家庭-小辦公室的防火牆(SOHU-SMB)。這三個級別的防火牆的開發方式有很大的不同。高端千兆防火牆的代表產品包括Netscreen的 5000系列防火牆,以及Nodia-CheckPoint的IP720以上的產品,這級防火牆能夠適應千兆要求的作業,吞吐量至少在600M以上。作爲國內生產商目前要推出真正的千兆防火牆是很困難的,詳情請參考:爲什麼實現千兆防火牆很困難

而作爲低端家庭-小辦公室產品的防火牆,主要受的是硬件成本的壓力。這一級產品包括如Netscreen的50/25/5X系列, Fortigate的FG200和FG300,以及一些市場上的撥號器、寬帶路由器都可以歸屬這檔防火牆。工作特點多是單進單出,主要用在小局域網進出互聯網的控制。考慮到一般公司出入互聯網的通道充其量也就幾兆,即使是LAN用戶或CABLE MODEM,公共出口也仍是幾兆。因此,自適應十兆/百兆的單進出小防火牆基本上可以滿足要求。事實上有些幾百人的公司使用win98+sysgate撥號,也是自我感覺良好,可見這一檔次的上網防火牆性能要求並不高;價格也是維持在兩萬元以下。但對於使用X86架構的防火牆來說,要求再低硬件也是有幾千元的;連上軟件成本,這兩萬元簡直無法維持。因此,這一級防火牆的主要開發方式,是選擇合適的嵌入式系統,通常是Linux,連硬件和軟件整套買進來,自已添加其中的防火牆應用程序。這種防火牆主要的系統開發工作由各嵌入系統的供應商完成,而系統功能也弱,留給生產商的軟件施展空間也不大,所以更象是一項硬件採購項目。連同最低採購限額(一般是一千)和軟件開發,大致在一百萬左右就可以拿下一個產品。這種防火牆,雖然也是“硬件防火牆”,但不是我們本文的重點。

本文介紹的,是中檔的企業級百兆防火牆的開發的主要步驟。這一級防火牆,是目前企業採購的主要對象,也是最需要的產品類型。國產防火牆,基本上集中在這個區間,操作系統一般選用開源的Linux或者BSD;相比之下,BSD的應用程序升級速度不算快,所以大部分防火牆選用的是Linux。

要決定開發一個百兆的防火牆,需要選定一款合適的服務器主板,或者工控機,另外就是要選定一個好的網卡,通常是服務器專用網卡。雖然象Linux 這樣的操作系統可以自動適應不同的主板,(只要它符合象PC2000這樣的標準),Linux的最新內核也總能支持較新的主板的性能,(如PIII的超線程);但每個主板和CPU之間還是有少許不同的;作爲一個防火牆,除非對極端性能要求不是太嚴格,否則,需要針對主板和CPU的一些特性,如寄存器, SMP,超線程等等對內核進行針對性的修改和優化,否則,默認的內核就只能使用這些主板/CPU最基本的部分。舉個例子說,防火牆有一個重要的性能指標叫最大會話數速率,或稱每秒最大生成會話數,如果使用普適形的內核用到P3CPU上,能夠達到的最大數值大致也就只有幾千;但經過對針對主板設計(這種說明可以從主板和CPU廠商獲取)進行優化,可以把性能提高到3-5萬左右。同樣,單純升級主板和CPU不見得能提高性能,象把防火牆從P3升級到P4,如果沒有支持P4的特殊性能,如超線程,最大會話能力就仍與P3沒有區別,不如不升值,還可以減點成本。而專門的優化,則可以把性能達到50萬,這也是這類防火牆的使用Intel架構主板目前所能達到的極限。針對選定硬件的優化工作儘管獨立於防火牆開發的主體軟件工作,一般情況下也不會顯出它的必要性,但當防火牆進行極端的使用環境或評測環境時,顯出的差距就非常大。針對網卡的開發驅動程序除了優化性能外,另一個目的就是要把防火牆與網關綁定在一起,以免被盜版。這個驅動程序與定造的防火牆內核一起,就令盜版顯得困難得多了。

防火牆軟件的開發工作主體就是防火牆管理軟件的開發。對此,架構師要明白自已到底要開發那一種防火牆,防火牆的管理思路是什麼。在幾年前這種開發顯得簡單,就是用一些web調用的程序,(另一種辦法是用dephi寫windows程序,通過特定端口服務控制防火牆,調用預設程序,原理也是一樣的),直接調用Linux的防火牆管理工具如ipchains;其餘的工作主要就是預先編好若干類的默認配置(相當於template)。因此開發難度不算大,十來個人一年半載總能完成;大批國產防火牆就是這樣開發出來的。這種防火牆,對於熟悉Linux防火牆的高手來說是不必要的,自已用 Ipchains就可以達到同樣的目的。因此,今天這種防火牆已經擺不上臺面了。今天的防火牆主要是從便於管理着手,着眼於管理員可以較易對大量、複雜、多半的政策進行維護,這就需要開發“面向對象管理的防火牆”。這樣一來,使用把 ipchains/iptables單純用PHP或delphi圖形化是不足夠的,事實上,這時侯單純使用如iptables已經很難滿足要求,開發者常常必須開發自已的象iptables那樣的防火牆管理工具。這部分的工作非常龐大。

作爲防火牆的載體的操作系統和防火牆的內核也是一個工作重點。防火牆作爲網絡的第一道防線,不可以使用默認設置的操作系統,除了最必要的服務以外,所有東西都必須刪除。因此,企業級防火牆基本上是使用的是嵌入式操作系統的開發方式,通通常是形成一個在內存中運行的安全操作系統,如同一個無盤的工作站。防火牆必須長時間無故障工作,還要應付可能有的突然斷電等現象,所以,一般情況下禁止連接系統硬盤,以免造成斷電損壞。防火牆的固存一般都不大, 16M到32M就綽綽有餘了。有些防火牆廠商沒有能力做到這一步,就使用大容易的FLASH作爲系統盤,其實是非常危險的。原因在於flash的寫性能差,可寫次數只在千次數量級,而Unix類的文件系統讀與頻繁,因此極易造成flash上數據的丟失;而且一旦發生斷電關機,如果仍然有系統盤安裝在目錄上,很可能造成文件系統的損壞,最終結果,即使最後可以搶救過來,也會給用戶防火牆質量不過關的印象。

防火牆的內核也是一項不可少的工作內容。目前一般的防火牆都是使用netfilter作爲防火牆的內核,而且都要求添加一定數量的防攻擊性能。參考netfilter的深入應用舉例。但有些防火牆產品把這項工作擴大化,希望由內核完成如IDS、防病毒的工作,儘管可以辦到,但對防火牆的基本性能會造成嚴重的損害。

企業級的防火牆需要有多種遠程管理工具,方法一般有三種,ssl+http,遠程的secure shell,或者使用專用客戶端工具。無論是那一種,都是基於同樣的在防火牆預定的用戶管理程序工作,這些管理程序被調用後,就與防火牆的接口管理程序(象iptables,或自編寫的接口程序,象圖騰ObjectMgr)互動,完成防火牆的管理工作。這部分的工作也是比較大的。象防火牆可以允許用戶用 ssh登錄,但卻不可能允許直接返回root shell(太危險了),於是就必須開發一個安全的shell作爲第一重接口,這樣,開發者就相當於自已開發了一個BASH一類的解釋程序了。對遠程訪問的安全控制是防火牆的一處重點,常常要結合管理機限制,IP/MAC限制,密碼、證書認證等多重安全手段。否則,否許所有人都試圖登錄防火牆,防火牆本身就很危險,根本談不上網絡的安全性。

完成以上的工作後,再完成最先談到的web-ssl管理界面,或者是delphi(或C++)的客戶端管理工具。防火牆就基本上成形了,區別只在於用戶是不是覺得你的管理工具好用不好用而已。(許多程序員認爲防火牆工程不大,其實是他們的腦海中以爲防火牆的研發只有這個圖形管理界面一項而已)。但即使這樣,作爲防火牆的研發工程還遠遠沒有完成。開發者常常還必須向防火牆添加VPN(這也是一個巨大的工程),代理服務器(如是要加,就要寫多種協議的代理服務器),如PPPOE撥號,是否還要加會話認證;以及HA和負載平衡,以及支持透明模式接入;是否支持外部帳號管理,等等。

前文這些工作終於都完成了,大概可以鬆一口氣交功課了吧?的確是這樣,假如您不介意你的防火牆有BUG的話!否則,這個工程頂多只完成了一半。下面的工作就是編寫測試實例進行測試。硬件防火牆由於對軟件硬化處理,而且長時間無間斷運行,因此,對軟件的質量要求非常高。測試者至少要編寫以下三種測試實例進行測試:1)程序中是否有內存對象沒有清除;程序中殘留有對沒有clear是經常的事,象windows的程序就有這個毛病,所以windows 開了一段時間後就要重啓以便空出內存;在防火牆中這個要求嚴格得多,一個半個的對象殘留對普通的軟件項目沒什麼大不了的,但對於防火牆是致命的;防火牆的系統資源會在很短的時間內就完全被這個BUG吃光。2)使用防火牆的管理工具生成每指定的政策實例時,是否做到該放行的包放行,不該放行的包不放行;3)防火牆的極限工作條件;也不是如最大會話這樣的測試,這些需要專門的測試工具如smartbit;高性能的防火牆還需要外包測試,因爲設備太貴。如果防火牆集成了如VPN,IDS,防病毒等功能,還必須進一步編寫測試實例,測試在啓動這些功能時防火牆的其他性能的下降情況。

防火牆軟件系統的測試是一項最耗時最耗力的工作,佔了整個開發成本至少一半以上,任何一個測試通不過,都要重新debug,重新測試,直到測試完全通過爲止。如果一個模塊測試返工三次就通過,那個程序員一定是很優秀的;如果通過六七次,實在很正常;就算十次才通過,也不算是丟臉的。在這種反反覆覆的工作中,開發者就會發現,象前文說的那樣把程序分成幾個獨立的層面分別開發,分別測試,文檔完整,具有無可比擬的優勢。否則,這樣的開發工程那怕一千人做,做一百年都做不完。

只有完成測試工作,防火牆就算過關了。整個工程100人如果能夠在一年裏做完,就要謝天謝地了。開發一個企業級防火牆需要上千萬人民幣,各位朋友現在是不是理解一點了?同樣,在幾年前幾個人做個管理界面調用ipchains,當然也是一個防火牆,的確也不是弄虛作假。只不過,在於各個廠商的選擇而已。
 
發佈了230 篇原創文章 · 獲贊 21 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章