网络安全 频道

开发硬件防火墙的主要步骤

防火墙软件的开发工作主体就是防火墙管理软件的开发。对此,架构师要明白自已到底要开发那一种防火墙,防火墙的管理思路是什么。在几年前这种开发显得简单,就是用一些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,远程的secureshell,或者使用专用客户端工具。无论是那一种,都是基于同样的在防火墙预定的用户管理程序工作,这些管理程序被调用后,就与防火墙的接口管理程序(象iptables,或自编写的接口程序,象图腾ObjectMgr)互动,完成防火墙的管理工作。这部分的工作也是比较大的。象防火墙可以允许用户用ssh登录,但却不可能允许直接返回rootshell(太危险了),于是就必须开发一个安全的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,当然也是一个防火墙,的确也不是弄虚作假。只不过,在于各个厂商的选择而已。

0
相关文章