网络设备最经常用到的,也是最重要的一个安全设备就是防火墙了。作为一款IT设备,无非两种选择方式。一种是购买品牌防火墙成品,另一种是自己DIY防火墙。两种方式各有自己的优劣,购买品牌防火墙最大的问题莫过于是投入较多的资金,却可以得到更多的后期维护。而自己 DIY防火墙的最大弊端就在于需要一个专业的人员来定制,还要投入更多的精力做后期的维护。
作为一个热血IT青年,自己DIY一个防火墙设备,不仅仅能够带来投入的节省,最重要的是你可以在这个过程中,得到许多一个电话CALL来的售后服务那里,所学到的到东西要多得多。DIY一个防火墙设备,最最重要的是要认清硬件架构和软件架构的特点,以及最适合于那种搭配。
基于通用CPU的X86架构的安全网关,一般采用Intel或AMD公司的芯片,X86在架构系统时还需要北桥和南桥芯片,采用该种硬件架构,软硬件配套资源比较多,便于快速推出产品,企业投资少,最初的防火墙大都是基于X86架构。X86架构采用通用CPU和PCI总线接口,具有很高的灵活性和可扩展性,过去一直是防火墙开发的主要平台。其产品功能主要由软件实现,可以根据用户的实际需要而做相应调整,增加或减少功能模块,产品比较灵活,功能十分丰富。
但其性能发展却受到体系结构的制约,作为通用的计算平台,x86的结构层次较多,不易优化,且往往会受到PCI总线的带宽限制。虽然PCI总线接口理论上能达到接近2Gbps的吞吐量,但是通用CPU的处理能力有限,尽管防火墙软件部分可以尽可能地优化,很难达到千兆速率。同时很多X86架构的防火墙是基于定制的通用操作系统,安全性很大程度上取决于通用操作系统自身的安全性,可能会存在安全漏洞。
从总线速度来看,基于32位PCI总线的X86平台,也就是我们所说的基于传统X86架构的防火墙,做为百兆防火墙的方案是没有任何问题的。但X86平台的防火墙方案,数据从网卡到CPU之间的传输机制是靠“中断”来实现的,中断机制导致在有大量数据包的需要处理的情况下(如:64 Bytes的小包,以下简称小包),X86平台的防火墙吞吐速率不高,大概在30%左右,并且CPU占用会很高。这是所有基于X86平台的防火墙所共同存在的问题。因此,基于32位PCI总线的X86平台是不能做为千兆防火墙使用的问题。
X86平台的防火墙其最大的缺点就是小包通速率低,只有30%-40%,造成这个问题的主要原因是因为X86平台的中断机制以及X86平台的防火墙所有数据都要经过主CPU处理。早期的千兆防火墙仅仅是将百兆接口替换为千兆接口而已。这种基于X86体系结构的千兆防火墙主体仍然是软件,其性能受到很大制约,无法达到千兆的处理速度。因此,这些防火墙只是具有千兆接入能力的防火墙,而不是真正具有千兆处理能力的防火墙因此可以说是一种“换汤不换药”的形式改变。
Intel提出了解决方案,可以把32位的PCI总线升级到PCI-E总线,即:PCI-Express,这样,PCI-E 4X的总线的速度就可以达到 2000MB Bytes/S,即:16Gbits/S,并且PCI-E各个PCI设备之间互相独立不共享总线带宽,每个基于PCI-E的网口可以使用的带宽为:2000MB Bytes/S,即:16Gbits/S,所以基于PCI-E 4X的X86从系统带宽上来说,做为千兆防火墙是没有任何问题的。但是,基于PCI-E的防火墙数据从网卡到CPU之间传输同样使用“中断”机制来传输数据,所以小包(64 Bytes)的通过率仍然为:30-40%,基于x86的防火墙,其最高性能只能达到2Gbps!同时CPU和外围芯片组发热比较大,产品寿命和稳定性难以保证。
如果你选择的硬件是x86架构的,我建议只有一个系统合适你,就是freebsd,要么自己定制防火墙,要么选择m0llowakk或者pfsense!为什么不是linux?很简单,当遇到大量小包攻击的时候(syn),freebsd的扛压能力大大超过linux,最极端的时候可以开启网卡polling模式,可以有效地降低cpu中断负载,不至于你的cpu0 100%占用!而且,特别是pfsense选用了openbsd的pf防火墙,支持syn三次握手代理,地址池,自动黑名单等等有用的功能,而且很小巧稳定,性能只是比linux 差一点,不过完全够用!可以直接配置一台不带硬盘,只有cpu,内存,内存卡的小盒子系统,省电,稳定,完全!而且可以通过ipfw-classic实现和iptable layer-7一样的应用层过滤,反正大家都是山寨人家clearos公司的!还有商业的panbit,流控大师也是选用freebsd的,不过可惜啊,特征码给加密了。