作者: reistlin
来源: http://www.reistlin.com/blog/35
更新时间: 2009.06
版权声明: 原创文章.转载请保留作者信息和原文完整.谢绝任何方式的摘要

pfsense.png

本文是根据 [pfSense] 的官方文档 Hardware Sizing Guidance 翻译的.水平有限.只翻译了重要的部分.很多补充是根据自己5年的安全从业经验整理的.个人认为.所有基于x86架构防火墙都可以参考本文进行硬件性能评估.pfSense(FreeBSD)的文档非常客观严谨.想深入了解防火墙性能的朋友请不要错过.

考虑pfSense性能,(REISTLIN:或者说考虑x86架构防火墙的性能)主要有2个因素:

1,防火墙吞吐率

(Throughput)REISTLIN:吞吐率是防火墙的最基本指标。在安全业内,商业产品的技术白皮书中的吞吐率数值主要是使用较大的数据包(远远大于64 bytes),通过硬件的压力测试设备(电信研究院)测试后公布的。因为实际网络应用中数据包都比较小,所以仅供参考。如果你有实际经验,你会发现,一般厂商的标称值在实际网络环境中都要打6-8折(这里要表扬一下 [NetScreen],官方网站上有明确注明大包吞吐率和小包吞吐率,大家有兴趣自己去计算比例)。

2,防火墙的功能

(Features)REISTLIN:防火墙最基本的功能是做数据包过滤,这里我认为所谓的数据包过滤是基于3层-4层的(IP+Port)。数据包过滤最有代表性的就是IPTables,如果你设置过IPTables就会知道,你不仅仅要设置数据包Out方向的策略,也要设置数据包In方向的策略。这就是区分是否是状态检测的最原始最可靠的方法。(当然,Linux下也有非常好的解决方案,比如 [Shorewall] 自动根据帮助你添加返回数据包的策略)不过成熟的防火墙(硬件/软件)产品都是基于完全的状态检测的,所谓状态检测,是 [CheckPoint] 公司的专利技术,防火墙会记录TCP/IP的状态,CheckPoint甚至可以模拟记录UDP的状态。业内的防火墙产品基本上都会宣称支持状态检测,比如国内的一些产品,究竟是不是完全的状态检测,我就不想多说了。

防火墙吞吐率的评估与考虑:

如果你要求防火墙的吞吐率小于10 Mbps,那你完全可以找任何一个硬件平台,或者迷你系统就可以胜任。(Intel 386?8M?)

如果你要求防火墙的吞吐率10 - 20 Mbps,你的CPU主频不能低于266 MHz

如果你要求防火墙的吞吐率21 - 50 Mbps,你的CPU主频不能低于500 MHz

如果你要求防火墙的吞吐率51 - 200 Mbps,你的CPU主频不能低于1G MHz

REISTLIN:又到了小雷废话时间,200 Mbps是一个特殊的值,既是代表了x86平台PCI网卡的防火墙吞吐率极限值,又代表了Linux x86平台IPSec VPN吞吐率的极限值。

继续,继续。

如果你要求防火墙的吞吐率201- 500 Mbps,硬件平台必须是基于PCI-X或者PCI-E的网卡,不一定是专用的服务器硬件系统,你也可以选择高性能的PC系统搭载PCI-E的1000M网卡(比如:Intel PRO 1000,小雷真罗嗦?),并且你的CPU主频不低于2G MHz

如果你要求防火墙的吞吐率大于500 Mbps,你似乎只能选择专用的高性能服务器硬件平台,PCI-X或者PCI-E的1000M网卡,并且你的CPU主频不低于3G MHz

防火墙功能性的评估与考虑:

pfSense功能模块的开启一般来说不会对性能造成很大影响。(REISTLIN:你可以理解为pfSense的每个功能模块都尽可能做了优化,在现有的功能与性能之间有一个比较合适的平衡点。不过一个客观的事实,一碗粥,分的人多了,每个人吃的就少。一个人,同时做的事情越多,人也越辛苦,每件事都会有效率和质量的双重影响。所以 UTM 或者 All in One 产品是适合中小型用户的;大型,专家级,运营级的要求总结起来只有3个:功能独立,运行稳定,性能高效。)

VPN:pfSense的VPN功能会给CPU造成沉重的负担,这是无法避免的。

(REISTLIN:不仅仅是pfSense,所有的VPN设备都一样,非常耗费CPU的性能)。CPU对通过防火墙的流量进行加密与解密,并且网络连接数(并发会话数/每秒新建会话数)的多少也直接影响到CPU的负载。经验告诉我,可以通过设置适当的VPN加密方式,比如不使用3DES+SHA-1;或者使用较少的VPN Tunnel,比如基于Subnet-to-Subnet,不基于Host-to-Host的Tunnel复用;真罗嗦。)

一个主频266 MHz的CPU,大约能够处理4 Mbps的IPSec VPN流量。
一个主频500 MHz的CPU,大约能够处理10-15 Mbps的IPSec VPN流量。

如果使用专用服务器硬件平台,比如至强CPU,800 FSB前端总线,或者高性能的PC系统,能够处理大于100 Mbps的IPSec VPN流量。如果需要达到更高的IPSec VPN吞吐率,(比如:500Mbps,1Gbps)那就只能选择专用的硬件VPN加速卡。

防火墙状态表的评估与考虑:

每一条网络连接的状态记录(网络会话状态)大约需要1KB的物理内存来存储。在默认(理想)情况下,当网络连接状态(网络会话状态)记录达到10000条时,大约需要10 MB物理内存。绝大部分的网络都会有数千条或者上万的并发会话,所以请确保有足够的物理内存。(REISTLIN:如果有人使用P2P软件,BT,eMule,一个IP甚至就可能达到1000+个网络连接;如果有国产的防火墙厂家跟你说,我们的防火墙支持并发连接数达到80万,我们的防火墙吞吐率只有不到500 Mbps,你会吗?)

数据包分析(Tcpdump / Snort)功能的评估与考虑:

如果使用数据包分析功能,比如入侵检测,数据包抓包分析,请保证物理内存不要低于512 MB。(因为数据包捕获需要大量的物理内存Cache实时的数据包信息,Ethereal/Wireshark 里面叫Buff)

全文完,最后说一句,这还算是翻译吗?睡觉了!

标签: pfsense, bsd