经常看到很多人,在争论linux/bsd下面有那么多的防火墙,我们选择谁呢,其实咱们经常碰到的开源防火墙(那些由BSD基础定制开发的商业防火墙ciso,jump,华为等)不在此列)有:iptables,ipfilter,pf,ipfw(panabit7层),看起来很多其实我们完全没有必要恐慌,如果您有钱完全可以去买ciso,华为等品牌防火墙出了事可以找个背黑锅的,反正不是花咱们自己的钱,还能拿到他们的回扣。。。,这样的话你就不用往下面看了,因为你不用为选择什么防火墙烦恼了呵呵。
其实对于一般的中小企业,总出口带宽不超过千兆的话,完全不需要卖那些价格高高在上,性能低低在下的东东,编程时门学问,核心库算法都是百年不变的东西(基础都是数学,过时很难),有很多商家很聪明,会借用开源bsd,linux自己改改再加上一个定制的1U,半U机箱装上一个赛扬或者更低能的嵌入式cpu就说是完全自主开发,线性千兆性能了(就不告诉你倒是多大的包的性能测试,你问他64位小包性能,他就要哭了)。当然网络过滤性能是软件与硬件的共同结果,如果您企业的带宽超过了千兆,那就没办法省钱了,还是去买ciso,jump等大企业的mips多核心+专门网络加速模块防火墙吧,我想最少也要百来万把,不过您的实力肯定是小意思了。
好了废话不说了,最近由于项目原因,研究了下防火墙,我们网站的第一道防线,浅谈下个人对iptables,ipfilter,pf,ipfw的个人看法吧,仅供参考,请谨慎部署,出问题与本人无关!
1,iptables,linux自带的防火墙,对于这个防火墙本人不看好,首先我是不会拿linux来做防火墙的,为什么呢,很简单linux核心开发者太多,无组织,无纪律,隔山查尔的更新kernel,最新版的kernel都到3.6了,而我们的debian,centos才可怜的2.6.32可悲啊,不过我欣赏debian,centos发行版,为了稳定,还是不要冒进,linux核心都不稳定,选择iptables就是一个玩具了!动不动冒一个linux溢出漏洞,所有设置都是枉然,建议还是老老实实,用linux当后端的web,数据库用吧,当然如果你非要用,我那么我还是建议你使用linux的专门的防火墙发行版-IPCop ,毕竟如果安全要求不高话,还是可以用用的,毕竟linux的性能,iptables-nat转发性能大家都知道很高的,而且还有一个ly7项目,可以把iptables扩展到应用层去,不过你可千万不要还用ly7官网的特征码了,那个太老了,以至于panabit都在笑了,其实大家完全可以学习ly7的7层特征码正则表达式(不难就是用正则表达式过滤匹配分析数据包),自己通过,科莱分析软件,tcpdump等包分析软件书写自己的特诊吗,当然了这需要长时间的测试磨合了。
2,下面就来说说我们可爱的freebsd上的几款防火墙其中最让我纠结就是ipfilter,ipfw了,这两个家伙,一个是普通过滤性能强悍-ipfw,一个是nat转发性能强悍-ipfilter(由于版权协议,已经被openbsd抛弃了,这也就诞生了pf),ipfw是freebsd的亲生防火墙,在以前很老的版本中nat模式还不是核心模式,所以转发性能很低下,当然现在已经是核心模式了,而且配置简单明了,而且有强人写了linux-iptables中的ly7山寨bsd7层过滤模块-ipfw-classly借用了linux-ly7的正则特征码,说白了就是linux-ly7的的bsd实现,只用我们常用到的pfsense,7层过滤功能就是调用了bsd-ly7模块,当然也是落后的7层过滤特征码,需要自己写新的,还有那个笑使用linux-ly7的panabit,其实他也是在使用ipfw-classly只是人家把所有的软件名字全部改掉了,不叫ipfw也不叫ipfw-classly了,(全完自主开发嘛),但是他们还是做了一点事情的就是设计了一个很漂亮的web前台,和自己经常性的编写最新的ly7特征码,以跟上腾讯QQ,迅雷的脚步,可惜啊,那些都是加密的,本人是没有办法破解了,但是加密了怎么能开源呢!对于ipfw我的看法是如果你不需要防护墙来实现 F5一样的集群负载均衡的话,可以使用,因为他缺乏pf的地址池轮训功能,只能说是一个功能和linux-iptables差不多的防火墙吧,我给他打70分吧。。。
至于ipfilter除了nat转发性能蛮好外,没有其他特别的功能,甚至还没有人开发7层过滤模块,当然如果您的防火墙后面保护的是网吧游戏电脑,可以有效的降低ping延迟,对于网吧来说是不不错的选择,不需要什么负载均衡啊,地址池,7层过滤等功能,是不不错的选择,建议选择基于freebsd的m0n0wall防火墙系统。。。打个60分吧。
下面我们来研究下我们的pf防火墙吧,这个东东原来是openbsd中用来替代ipfilter的防火墙,和openbsd配合简直是完美的集合,加上openbsd的relayd可以实现和F5(听说要几十万把)的防火墙负载均衡功能,pf有着很多很使用的功能,ip地址池的强大配置,syn代理握手,方便的包整流,流控,状态表控制,网关认证等等除了不支持7层过滤外,其他防火墙有的他都有,其他防火墙没有的他也有,全完能满足咱们的各种变态的要求,但是唯一的不好就是openbsd虽然安全但是,硬件支持不好,其中导致的最让我崩溃的就是没有不支持intel网卡的polling功能,遇到64小包,syn攻击等流量攻击直接挂住,定死!好在freebsd是一个研究,学者性的操作系统,他在偷学linux的同时,还在偷学其他的BSD,他很好的把pf从openbsd中移植了过来,而且功能语法知道freebsd9.0基本没发上变化,(freebsd是移植openbsd4.5-pf,openbsd此前经行了性能最大调整版本),当我们遇到非常大的syn小包攻击,导致 cpu中断崩溃时我们可以马上开启网卡的polling模式,虽然性能下降了点,不过好歹不怕syn攻击了,我的最后选择就是freebsd+pf作为我们的前端防火墙,把freebsd的swap关闭,所有系统加载到内存中区运行,精简内核,删除所有无用的程序,把freebsd运行等级提高到2,保护内核,及防火墙规则组件,如果你不是很熟悉pf规则编写,或者喜欢图形化,可以选择pfsense2.01-freebsd8.1+pf的防火墙系统。我给pf打80分吧,毕竟性能不算最高的,建议部署在千兆带宽以内,500台机器左右的机房。
好了,防火墙选择好了,随便谈谈diy防火墙的硬件选择及要求:
1,cpu,我们要选择多核心最少2个核心,最关键的还有频率,由于x86cpu是通用处理器,完成一个数据包的过滤需要很大的中断开销,已经非常多的指令执行(大概完整的处理一个数据包需要大约14000条指令),导致了其处理64位小包的能里低下,没办法我大概的算了一下,要使用x86处理器达到小包线速处理千兆带宽流量,需要处理器频率达到7G左右,但是除非你超频,否则我建议最少不要小于3.2G频率吧,而且最好选择intel-cpu支持能配合intel-网卡,更好的支持发送,接受列队功能,miix中断等专门的网络优化技术。
2,网卡不用多说了,唯一的选择intel网卡。而且要处理千兆的话最好是两块intrel网卡绑定聚合mode=0,这个我就不说了,linux配置大家都会吧,接口一定是pci-e接口,芯片组嘛5257系列了吧,最好支持队列,支持miix2代中断。把所有的外部网卡中断都cpuset 到第一个cpu上,可有效的防止ddos中断是的cpu切换开销,当然了你要知道那块网卡是外部的,通过vmstat -i查看中断号,你懂得。
3,不要硬盘,随便整一个dom盘,就可以了,反正只是作为启动用,一旦freebsd启动所有的东东都会加入到 内存中运行!关闭swap.
4,内存这个东东,越大越好罗。最少2G-4G吧, 如果你图稳定就选择32位的freebsd,内存嘛 有个2G就好了,一般来说一个连接占用1K左右内存,10M内存处理1万个连接吧。处理百万并发肯定要2G罗呵呵
5,其他的就没什么要求了,想耗电少点还是选择一块迷你小板吧,把所有东东塞进一个火柴盒子里面,就算是专业的千兆硬件防火墙了(开个十万八万的越高越有人买,越便宜越没人要)。
好了,大概的说了说。大家有时间多看看openbsd-pf手册,pfsense手册,研究研究,一定会有收获的。最后希望netbsd6.0赶紧出release,想用用他的新型防火墙 npf官方介绍对多核心有优化期待中。。。。。
本文出自 “清蒸BSD红烧LINUX” 博客,转载请与作者联系!