這裡說的雖然是硬體防火牆,但幾乎所有的工作都是軟體工作。硬體防火牆的核心是軟體。
在開發前,首先要清楚知道自已要需要的是什麼類型的防火牆。同為硬體防火牆,大致可以分為高端以千兆為代表的主火牆,中端的百兆企業防火牆,以及低端家庭-小辦公室的防火牆(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(這也是一個巨大的工程),Proxy 伺服器(如是要加,就要寫多種協議的Proxy 伺服器),如PPPOE撥號,是否還要加會話認證;以及HA和Server Load Balancer,以及支援透明模式接入;是否支援外部帳號管理,等等。
前文這些工作終雩都完成了,大概可以鬆一口氣交功課了吧?的確是這樣,假如您不介意你的防火牆有BUG的話!否則,這個工程頂多隻完成了一半。下面的工作就是編寫測試執行個體進行測試。硬體防火牆由於對軟體硬化處理,而且長時間無間斷運行,因此,對軟體的品質要求非常高。測試者至少要編寫以下三種測試執行個體進行測試:1)程式中是否有記憶體對象沒有清除;程式中殘留有對沒有clear是經常的事,象windows的程式就有這個毛病,所以windows 開了一段時間後就要重啟以便空出記憶體;在防火牆中這個要求嚴格得多,一個半個的對象殘留對普通的軟體項目沒什麼大不了的,但對於防火牆是致命的;防火牆的系統資源會在很短的時間內就完全被這個BUG吃光。2)使用防火牆的管理工具產生每指定的政策執行個體時,是否做到該允許存取的包允許存取,不該允許存取的包不允許存取;3)防火牆的極限工作條件;也不是如最大會話這樣的測試,這些需要專門的測試載入器如smartbit;高效能的防火牆還需要外包測試,因為裝置太貴。如果防火牆整合了如VPN,IDS,防病毒等功能,還必須進一步編寫測試執行個體,測試在啟動這些功能時防火牆的其他效能的下降情況。
防火牆軟體系統的測試是一項最耗時最耗力的工作,佔了整個開發成本至少一半以上,任何一個測試通不過,都要重新debug,重新測試,直到測試完全通過為止。如果一個模組測試返工三次就通過,那個程式員一定是很優秀的;如果通過六七次,實在很正常;就算十次才通過,也不算是丟臉的。在這種反反覆複的工作中,開發人員就會發現,象前文說的那樣把程式分成幾個獨立的層面分別開發,分別測試,文檔完整,具有無可比擬的優勢。否則,這樣的開發工程那怕一千人做,做一百年都做不完。
只有完成測試工作,防火牆就算過關了。整個工程100人如果能夠在一年裡做完,就要謝天謝地了。開發一個企業級防火牆需要上千萬人民幣,各位朋友現在是不是理解一點了?同樣,在幾年前幾個人做個管理介面調用ipchains,當然也是一個防火牆,的確也不是弄虛作假。只不過,在於各個廠商的選擇而已。