這里說的雖然是硬件防火墻,但幾乎所有的工作都是軟件工作。硬件防火墻的核心是軟件。
在開發(fā)前,首先要清楚知道自已要需要的是什么類型的防火墻。同為硬件防火墻,大致可以分為高端以千兆為代表的主火墻,中端的百兆企業(yè)防火墻,以及低端家庭 -小辦公室的防火墻(SOHU-SMB)。這三個(gè)級別的防火墻的開發(fā)方式有很大的不同。高端千兆防火墻的代表產(chǎn)品包括Netscreen的 5000系列防火墻,以及Nodia-CheckPoint的IP720以上的產(chǎn)品,這級防火墻能夠適應(yīng)千兆要求的作業(yè),吞吐量至少在600M以上。作為國內(nèi)生產(chǎn)商目前要推出真正的千兆防火墻是很困難的,詳情請參考:為什么實(shí)現(xiàn)千兆防火墻很困難。
而作為低端家庭-小辦公室產(chǎn)品的防火墻,主要受的是硬件成本的壓力。這一級產(chǎn)品包括如Netscreen的50/25/5X系列, Fortigate的FG200和FG300,以及一些市場上的撥號器、寬帶路由器都可以歸屬這檔防火墻。工作特點(diǎn)多是單進(jìn)單出,主要用在小局域網(wǎng)進(jìn)出互聯(lián)網(wǎng)的控制。考慮到一般公司出入互聯(lián)網(wǎng)的通道充其量也就幾兆,即使是LAN用戶或CABLE MODEM,公共出口也仍是幾兆。因此,自適應(yīng)十兆/百兆的單進(jìn)出小防火墻基本上可以滿足要求。事實(shí)上有些幾百人的公司使用win98+sysgate撥號,也是自我感覺良好,可見這一檔次的上網(wǎng)防火墻性能要求并不高;價(jià)格也是維持在兩萬元以下。但對于使用X86架構(gòu)的防火墻來說,要求再低硬件也是有幾千元的;連上軟件成本,這兩萬元簡直無法維持。因此,這一級防火墻的主要開發(fā)方式,是選擇合適的嵌入式系統(tǒng),通常是Linux,連硬件和軟件整套買進(jìn)來,自已添加其中的防火墻應(yīng)用程序。這種防火墻主要的系統(tǒng)開發(fā)工作由各嵌入系統(tǒng)的供應(yīng)商完成,而系統(tǒng)功能也弱,留給生產(chǎn)商的軟件施展空間也不大,所以更象是一項(xiàng)硬件采購項(xiàng)目。連同最低采購限額(一般是一千)和軟件開發(fā),大致在一百萬左右就可以拿下一個(gè)產(chǎn)品。這種防火墻,雖然也是“硬件防火墻”,但不是我們本文的重點(diǎn)。
本文介紹的,是中檔的企業(yè)級百兆防火墻的開發(fā)的主要步驟。這一級防火墻,是目前企業(yè)采購的主要對象,也是最需要的產(chǎn)品類型。國產(chǎn)防火墻,基本上集中在這個(gè)區(qū)間,操作系統(tǒng)一般選用開源的Linux或者BSD;相比之下,BSD的應(yīng)用程序升級速度不算快,所以大部分防火墻選用的是Linux。
要決定開發(fā)一個(gè)百兆的防火墻,需要選定一款合適的服務(wù)器主板,或者工控機(jī),另外就是要選定一個(gè)好的網(wǎng)卡,通常是服務(wù)器專用網(wǎng)卡。雖然象Linux 這樣的操作系統(tǒng)可以自動適應(yīng)不同的主板,(只要它符合象PC2000這樣的標(biāo)準(zhǔn)),Linux的最新內(nèi)核也總能支持較新的主板的性能,(如PIII的超線程);但每個(gè)主板和CPU之間還是有少許不同的;作為一個(gè)防火墻,除非對極端性能要求不是太嚴(yán)格,否則,需要針對主板和CPU的一些特性,如寄存器, SMP,超線程等等對內(nèi)核進(jìn)行針對性的修改和優(yōu)化,否則,默認(rèn)的內(nèi)核就只能使用這些主板/CPU最基本的部分。舉個(gè)例子說,防火墻有一個(gè)重要的性能指標(biāo)叫最大會話數(shù)速率,或稱每秒最大生成會話數(shù),如果使用普適形的內(nèi)核用到P3CPU上,能夠達(dá)到的最大數(shù)值大致也就只有幾千;但經(jīng)過對針對主板設(shè)計(jì)(這種說明可以從主板和CPU廠商獲取)進(jìn)行優(yōu)化,可以把性能提高到3-5萬左右。同樣,單純升級主板和CPU不見得能提高性能,象把防火墻從P3升級到P4,如果沒有支持P4的特殊性能,如超線程,最大會話能力就仍與P3沒有區(qū)別,不如不升值,還可以減點(diǎn)成本。而專門的優(yōu)化,則可以把性能達(dá)到50萬,這也是這類防火墻的使用Intel架構(gòu)主板目前所能達(dá)到的極限。針對選定硬件的優(yōu)化工作盡管獨(dú)立于防火墻開發(fā)的主體軟件工作,一般情況下也不會顯出它的必要性,但當(dāng)防火墻進(jìn)行極端的使用環(huán)境或評測環(huán)境時(shí),顯出的差距就非常大。針對網(wǎng)卡的開發(fā)驅(qū)動程序除了優(yōu)化性能外,另一個(gè)目的就是要把防火墻與網(wǎng)關(guān)綁定在一起,以免被盜版。這個(gè)驅(qū)動程序與定造的防火墻內(nèi)核一起,就令盜版顯得困難得多了。
防火墻軟件的開發(fā)工作主體就是防火墻管理軟件的開發(fā)。對此,架構(gòu)師要明白自已到底要開發(fā)那一種防火墻,防火墻的管理思路是什么。在幾年前這種開發(fā)顯得簡單,就是用一些web調(diào)用的程序,(另一種辦法是用dephi 寫windows程序,通過特定端口服務(wù)控制防火墻,調(diào)用預(yù)設(shè)程序,原理也是一樣的),直接調(diào)用Linux的防火墻管理工具如ipchains;其余的工作主要就是預(yù)先編好若干類的默認(rèn)配置(相當(dāng)于template)。因此開發(fā)難度不算大,十來個(gè)人一年半載總能完成;大批國產(chǎn)防火墻就是這樣開發(fā)出來的。這種防火墻,對于熟悉Linux防火墻的高手來說是不必要的,自已用 Ipchains就可以達(dá)到同樣的目的。因此,今天這種防火墻已經(jīng)擺不上臺面了。今天的防火墻主要是從便于管理著手,著眼于管理員可以較易對大量、復(fù)雜、多半的政策進(jìn)行維護(hù),這就需要開發(fā)“面向?qū)ο蠊芾淼姆阑饓Α薄_@樣一來,使用把 ipchains/iptables單純用PHP或delphi圖形化是不足夠的,事實(shí)上,這時(shí)侯單純使用如iptables已經(jīng)很難滿足要求,開發(fā)者常常必須開發(fā)自已的象iptables那樣的防火墻管理工具。這部分的工作非常龐大。
作為防火墻的載體的操作系統(tǒng)和防火墻的內(nèi)核也是一個(gè)工作重點(diǎn)。防火墻作為網(wǎng)絡(luò)的第一道防線,不可以使用默認(rèn)設(shè)置的操作系統(tǒng),除了最必要的服務(wù)以外,所有東西都必須刪除。因此,企業(yè)級防火墻基本上是使用的是嵌入式操作系統(tǒng)的開發(fā)方式,通通常是形成一個(gè)在內(nèi)存中運(yùn)行的安全操作系統(tǒng),如同一個(gè)無盤的工作站。防火墻必須長時(shí)間無故障工作,還要應(yīng)付可能有的突然斷電等現(xiàn)象,所以,一般情況下禁止連接系統(tǒng)硬盤,以免造成斷電損壞。防火墻的固存一般都不大, 16M到32M就綽綽有余了。有些防火墻廠商沒有能力做到這一步,就使用大容易的FLASH作為系統(tǒng)盤,其實(shí)是非常危險(xiǎn)的。原因在于flash的寫性能差,可寫次數(shù)只在千次數(shù)量級,而Unix類的文件系統(tǒng)讀與頻繁,因此極易造成flash上數(shù)據(jù)的丟失;而且一旦發(fā)生斷電關(guān)機(jī),如果仍然有系統(tǒng)盤安裝在目錄上,很可能造成文件系統(tǒng)的損壞,最終結(jié)果,即使最后可以搶救過來,也會給用戶防火墻質(zhì)量不過關(guān)的印象。
防火墻的內(nèi)核也是一項(xiàng)不可少的工作內(nèi)容。目前一般的防火墻都是使用netfilter作為防火墻的內(nèi)核,而且都要求添加一定數(shù)量的防攻擊性能。參考netfilter的深入應(yīng)用舉例。但有些防火墻產(chǎn)品把這項(xiàng)工作擴(kuò)大化,希望由內(nèi)核完成如IDS、防病毒的工作,盡管可以辦到,但對防火墻的基本性能會造成嚴(yán)重的損害。
企業(yè)級的防火墻需要有多種遠(yuǎn)程管理工具,方法一般有三種,ssl+http,遠(yuǎn)程的secure shell,或者使用專用客戶端工具。無論是那一種,都是基于同樣的在防火墻預(yù)定的用戶管理程序工作,這些管理程序被調(diào)用后,就與防火墻的接口管理程序(象iptables,或自編寫的接口程序,象圖騰ObjectMgr)互動,完成防火墻的管理工作。這部分的工作也是比較大的。象防火墻可以允許用戶用 ssh登錄,但卻不可能允許直接返回root shell(太危險(xiǎn)了),于是就必須開發(fā)一個(gè)安全的shell作為第一重接口,這樣,開發(fā)者就相當(dāng)于自已開發(fā)了一個(gè)BASH一類的解釋程序了。對遠(yuǎn)程訪問的安全控制是防火墻的一處重點(diǎn),常常要結(jié)合管理機(jī)限制,IP/MAC限制,密碼、證書認(rèn)證等多重安全手段。否則,否許所有人都試圖登錄防火墻,防火墻本身就很危險(xiǎn),根本談不上網(wǎng)絡(luò)的安全性。
完成以上的工作后,再完成最先談到的web-ssl管理界面,或者是delphi(或C+ +)的客戶端管理工具。防火墻就基本上成形了,區(qū)別只在于用戶是不是覺得你的管理工具好用不好用而已。(許多程序員認(rèn)為防火墻工程不大,其實(shí)是他們的腦海中以為防火墻的研發(fā)只有這個(gè)圖形管理界面一項(xiàng)而已)。但即使這樣,作為防火墻的研發(fā)工程還遠(yuǎn)遠(yuǎn)沒有完成。開發(fā)者常常還必須向防火墻添加VPN(這也是一個(gè)巨大的工程),代理服務(wù)器(如是要加,就要寫多種協(xié)議的代理服務(wù)器),如PPPOE撥號,是否還要加會話認(rèn)證;以及HA和負(fù)載平衡,以及支持透明模式接入;是否支持外部帳號管理,等等。
前文這些工作終于都完成了,大概可以松一口氣交功課了吧?的確是這樣,假如您不介意你的防火墻有BUG的話!否則,這個(gè)工程頂多只完成了一半。下面的工作就是編寫測試實(shí)例進(jìn)行測試。硬件防火墻由于對軟件硬化處理,而且長時(shí)間無間斷運(yùn)行,因此,對軟件的質(zhì)量要求非常高。測試者至少要編寫以下三種測試實(shí)例進(jìn)行測試:1)程序中是否有內(nèi)存對象沒有清除;程序中殘留有對沒有clear是經(jīng)常的事,象 windows的程序就有這個(gè)毛病,所以windows 開了一段時(shí)間后就要重啟以便空出內(nèi)存;在防火墻中這個(gè)要求嚴(yán)格得多,一個(gè)半個(gè)的對象殘留對普通的軟件項(xiàng)目沒什么大不了的,但對于防火墻是致命的;防火墻的系統(tǒng)資源會在很短的時(shí)間內(nèi)就完全被這個(gè)BUG吃光。2)使用防火墻的管理工具生成每指定的政策實(shí)例時(shí),是否做到該放行的包放行,不該放行的包不放行;3)防火墻的極限工作條件;也不是如最大會話這樣的測試,這些需要專門的測試工具如smartbit;高性能的防火墻還需要外包測試,因?yàn)樵O(shè)備太貴。如果防火墻集成了如VPN,IDS,防病毒等功能,還必須進(jìn)一步編寫測試實(shí)例,測試在啟動這些功能時(shí)防火墻的其他性能的下降情況。
防火墻軟件系統(tǒng)的測試是一項(xiàng)最耗時(shí)最耗力的工作,占了整個(gè)開發(fā)成本至少一半以上,任何一個(gè)測試通不過,都要重新debug,重新測試,直到測試完全通過為止。如果一個(gè)模塊測試返工三次就通過,那個(gè)程序員一定是很優(yōu)秀的;如果通過六七次,實(shí)在很正常;就算十次才通過,也不算是丟臉的。在這種反反復(fù)復(fù)的工作中,開發(fā)者就會發(fā)現(xiàn),象前文說的那樣把程序分成幾個(gè)獨(dú)立的層面分別開發(fā),分別測試,文檔完整,具有無可比擬的優(yōu)勢。否則,這樣的開發(fā)工程那怕一千人做,做一百年都做不完。
只有完成測試工作,防火墻就算過關(guān)了。整個(gè)工程100人如果能夠在一年里做完,就要謝天謝地了。開發(fā)一個(gè)企業(yè)級防火墻需要上千萬人民幣,各位朋友現(xiàn)在是不是理解一點(diǎn)了?同樣,在幾年前幾個(gè)人做個(gè)管理界面調(diào)用ipchains,當(dāng)然也是一個(gè)防火墻,的確也不是弄虛作假。只不過,在于各個(gè)廠商的選擇而已。