`

解剖NetScreen (1)

阅读更多
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

0. 声明
本文仅仅是从技术角度分析如何实现NetScreen防火墙,即如果要把本人的一台Linux机器变成NetScreen防火墙估计要作那些工作,所有观点均为个人观点,不代表任何组织或团体,只谈技术,不带任何吹捧、攻击或贬低,欢迎大家一起讨论,有错误请指正,但对文章中如有不明白的名词和概念请问google而不要问我。

1. 参考资料:
http://www.juniper.net/techpubs/software/screenos/screenos5.1.0/translated/
CE_v2_SC.pdf 第2卷:基本原理
现在5.3的手册已经有了,不过还都是英文的。
 
2. 前言
 
NS自问世就以基于ASIC的纯硬件防火墙作为最大的卖点,这也是国内防火墙所难以比肩之处,硬件防火墙主要是从路由器发展而来的,国外作路由器硬件的小厂商比较多,搞硬件芯片设计的也多,因此搞硬件防火墙有很好的基础;而国内这方面的硬件实力就很差,基本上各防火墙厂商都是用PC架构开始作的,而且不要说芯片,就是系统板的设计国内作得都很少,这些都决定了国内防火墙厂商一开始都只能从比较低的硬件水平起步,基本都只关注软件,硬件平台实际上都是通用架构,没法采用专有硬件体系。 
凭借硬件体系的速度优势,NS在国内这个以硬件速度为王的市场如鱼得水,国内实际也成为NS在全球的最大市场,高端市场更几乎一统天下。 CheckPoint虽然是最大的防火墙软件公司,但由于是软件,国人似乎并不是很感冒,总觉得装在一台自己机器上还不如买个硬盒子来得保险。NS的软件功能刚开始也不算强,比CheckPoint差得多,但软件部分相对来说是能比较快提高的,尤其是处于追赶位置,实现其他已经有的功能的时候,相对来说当自己成为领跑者需要完全自己开发新东西时速度才会慢一些。关键还是要有人才,NS当初是由一些清华的留美学生搞起来的,本身都是牛人级别,以后随时可以招到最好的计算机专业的中国留学生,软件能力的迅速提高是理所当然的了,国内有几家防火墙公司能招到如此水平的能人呢?我看除非把国内厂商的顶尖级人物都集中起来还差不多,可惜这是不可能的,国内就是力量太分散了。
 
唠叨感慨一通,话规正题,具体看其功能的实现。
 
3.操作系统
 
NS的操作系统自称是NOS,反正肯定不是每行代码都是自己写的操作系统,至少还是在某些open source的操作系统基础上写的,是否是Linux比较难确定,但是类UNIX的是肯定的,NS网卡名在命令行显示时和Linux的比较像,但在 WebUI中显示不是,和CISCO的差不多;日志级别也是UNIX类的8种,格式虽然和syslog有一定差别但差别不大;前段时间fortinet被人揪了小辫子用了open source的东西,而fortinet是从netscreen分出来,内核部分应该差不太多。不过不管怎么样,只能判断NS是类UNIX的操作系统,但具体是哪种还很难确定,NS包装得比较好。
 
4. 区段
 
NS的区段只是个逻辑概念,系统内核应该是不知道的,系统内核看到的还是实际网卡,区段的定义使得在定义策略时比较方便,区段内可包括一个或多个网络接口。NS区段一个特点是可以自定义新的区段,而很多国内防火墙的类似区段概念的数量都是固定的,如内、外、DMZ等。
 
NS把区段分成三类: 安全区段,通道区段和功能区段。第一个还好理解,后面两种硬将其划归区段概念总觉得比较别扭,而且每个区段除了包含网卡外,还有其他属性,如虚拟路由器、虚拟系统等,确实有点不太好理解这种区段的意义。
 
区段既可能是物理内容的集合,如物理接口,也可能是逻辑内容的集合,如一些功能区段。
端口模式:修改端口模式系统的配置也会被删除,这点比较奇怪,对软件系统来说各端口是什么属性应该是随意指派的,修改后原来的系统配置也能自动更改,而NS作不到这一点,难道这是和硬件相关的?
 
总之,NS的区段是个比较让人觉得难以理解为什么要作得那么复杂的东西。
 
5. 接口
 
接口是需要和区段绑定的,每个接口只能属于一个区段,这倒是正常的。
由于是特制的硬件,所以物理接口可象交换机那样具体分到插槽号和端口号,和普通PC插多个网卡还是有点区别。
 
子接口就是VLAN虚拟网卡,这倒没什么。
 
聚合接口,在Linux下就是ip-bonding。
 
冗余接口,Linux下好象没有对应功能,不过高档点的交换机好象就有,这可能是从那里继承过来的。
 
虚拟安全接口:用来处理HA时的虚拟接口,好象好几个作HA的美国公司都用一种虚拟IP技术来实现HA,多台HA设备对外表现的是一个虚拟IP,其他设备到虚拟IP的包会再分配到各HA设备的实际IP进行处理。
 
管理接口,HA接口:特定功能的接口类型,感觉没什么必要,和其他接口没什么不同的。
 
通道接口:用在VPN通道,就象freeswan启动后会增加ipsec*接口一样,NS也象freeswan那样要指定VPN通道接口是绑在那个物理接口上的。
 
二级IP:应该就是Linux的网卡别名地址,但Linux别名没那么多限制,想怎么配都是可以的。
 
回传接口:好象是lo网卡的扩展,居然可以对其进行访问,有点象端口镜像的意思,到同组其他接口的数据也会被复制一份到回传接口上,但回传接口发出的数据到底是去那个物理接口上呢?是同组的其他所有接口?这个接口确实比较特殊.
 
接口状态:NS接口状态分为物理活动、逻辑活动、物理非活动、逻辑非活动;这和Linux网卡设备状态大相径庭,不过在Linux下要实现NS接口状态处理好象还是有点难度,需要实时监控各接口发出的信息和相应回应信息的情况。
 
IP跟踪:检测端口是否活动,实现倒是不算难,关键是怎么想到要设计这样一种处理能力?需要有个后台进程定时处理探测。权重是用来和监控器的故障临界值进行比较的,也就是低等级的IP跟踪失败也不影响端口状态。
 
接口监控:这也需要一个daemon来处理,可以和IP跟踪使用同一个daemon完成。权重和IP跟踪权重类似,是监控者用来判断该接口是否权限足够大能够引起监控者的状态进行变化。通过设置权重可以实现如单端口故障可忽略,多端口故障才认为是故障的功能。
 
IP跟踪、接口监控等针对端口状态的处理功能在国内防火墙中基本没有见到,不知道是否又是从路由器交换机那边继承过来的?在Linux内核本身是不带的,不知道有没有相关的类似实现?要实现有一定难度,但不算很大,想清楚算法就可以了,还可以参考ipvs中对服务器的探测处理。
 
NS接口应该和Linux的网卡设备net_device应该没有太大区别。
 
6. 接口模式
 
NS的接口模式定义为NAT,路由和透明,Linux都可以实现,只是没有明确和接口绑定就是了,网络接口只是一个可选项。

透明模式:
在透明模式下,NS的区段用的是VLAN区段和3个2层的安全区段,普通区段不行么?这点比较怪异,Linux下的桥用的网卡就没有任何限制,可以是网络网卡,也可以是VLAN网卡。
手册中有这么一句:“在第2层(L2)运行的NetScreen设备不允许任何区段间或区段内信息流,除非在该设备上配置了相应的策略。”这句话也比较费解,在一个以NS为主论坛上说NS不支持混合模式,这句话是否就是想表达这个意思?Linux混合模式是很容易实现的,而且甚至可以在桥网卡上作NAT。
 
不过在透明模式下,NS可以控制非IP和非ARP包,也可以支持VPN,freeswan也可以配桥网卡的VPN,但处理起来比较麻烦,不容易配通。
 
NS也支持从所有接口上发送未知MAC数据包的处理方法,然后确定该目的MAC应该和哪个接口相连,这个功能倒是比较有用。而且也支持自己生成 ARP请求和TTL=1的ICMP ping包从各接口发出来查找MAC地址与哪个接口相连。国内防火墙好象很少有把自己桥功能描述得那么清楚的,这种功能一般都是在内核里实现了,Linux的桥是否是这么找的我没仔细看过代码,但从应用过程看也能自动完成,搭好桥后一般不会马上就通,等一会防火墙就能学到MAC属于哪个端口也就通了。

NAT模式:基本如此了,功能不比netfilter强,只是NS的NAT是和接口绑定的。

路由模式:也没什么好说的。

7. 策略的构建块
 
这个应该就是其他防火墙里的对象了,NS分为:
 
地址、地址组:只支持网络掩码格式,不支持IP地址段;
 
服务:预定义了各种服务,不仅有TCP和UDP,还可定义ICMP类型,TCP/UDP不仅有目的端口,还有源端口的范围定义。这些都无所谓了,但比较有特色的是可以为每个服务定义单独的超时,在Linux下要对每个服务都设置不同超时的话是需要改不少东西,难度倒不算大,只是要增加不少内存空间来处理。不过这个超时值在虚拟系统中和在根系统中是相同的,这为在Linux下实现虚拟系统提供保证了,否则如果NS能做到这两种情况不同,在 Linux下真不知道该如何处理,毕竟Linux只有一个内核来处理所有数据;
 
超时和ICMP:没什么好说,Linux下都有;
 
RSH ALG、SUN RPC、MS RPC、RTSP、H.323、SIP、SDP:在Linux下相当于要支持动态协议跟踪了,得先清楚协议过程后可以些模块支持协议跟踪。Linux下也有一些现成的实现,但Linux下H.323不支持关守gatekeeper。NS对SIP的支持也很完备,Linux下要作到如此全面也有点难度。在 NS5.3中还增加了对MGCP(RFC3435)的支持。这些新的VOIP协议在Linux下作问题不大,只要熟悉协议过程和netfilter跟踪程序架构,属于难者不会,会者不难那种。
 
VOIP带宽、服务组:这些没什么好说;
 
DIP池:作VPN和NAT时用到,NAT时到没什么,VPN时用就有点意思了,freeswan用的地址都是固定用网卡地址的,如果要作成地址池形式有点难度。
 
时间表:可以配置为每周循环还是只起效一次的,难度不大,修改netfilter的time匹配可以实现。

8. 策略
 
基本元素为:方向,是通过区段来定义的,定义数据进入和流出的区段,不是直接用网卡接口,所以每个网卡接口都要设置所属区段;源、目的地址,这个没什么好说;服务:是包括协议、源端口、目的端口的组合;动作:deny/permit/reject/tunnel,前3个没什么,最后的 tunnel实现基于策略的VPN,这是freeswan作不到的,freeswan实现的是基于路由的VPN,不过如果freeswan和策略路由 iproute2结合,有可能实现基于策略的VPN,不过iproute2的策略不能象防火墙策略那么复杂。
 
区间段策略:如果区段和网卡接口是一一对应的话,netfilter是很容易实现的,就是数据的进出网卡了,但如果区段内包含很多网卡的话,netfilter就必须设置多条规则来定义进出网卡的可能配对;
 
区段内部策略:对netfilter来说,实现和区段策略相同,但要判断好源和目的分别与哪个接口相连;
 
全局策略:对netfilter来说就是没有网卡参数限制的规则;
 
按NS策略匹配查找描述,全局策略好象是最后才处理的。
 
在NS中,用户定义的策略和实际防火墙执行的逻辑规则是不同的,有可能1条策略对应125个逻辑规则。这就象是把用户看到的策略转换为 netfilter实际能处理的规则一样,这就是现在实际很多用netfilter实现防火墙时从用户层面到内核层面的一个规则转换过程,NS也不能免俗,还是没法作到用户层面和内核层面的一一对应,呵呵。
 
NS动作:deny等价于netfilter的DROP,permit等价于ACCEPT,reject等价于REJECT,tunnel就比较特殊,目前Linux+freeswan无法做到。
 
NS策略中还包含了大量的扩展元素:
应用:应该就是协议的跟踪吧,可以在不同的端口上指定用什么协议进行跟踪,Linux下也可以做到;
名称:没什么说的
VPN通道:将策略应用到VPN通道,对netfilter+freeswan来说就是就是对ipsec*网卡中的数据进行过滤;
L2TP通道:将策略应用到L2TP通道,对netfilter+freeswan+l2tpd来说就是就是对ppp*/ipsec*网卡中的数据进行过滤;
深入检查:也就是其他防火墙的内容过滤处理,netfiler可轻松实现;
策略置顶:这没什么好说的;
地址转换:实现NAT了,netfilter是用单独的NAT规则进行实现;
用户认证:包括运行时认证和WebAuth,运行时认证只支持HTTP、FTP、TELNET协议,有些国内防火墙也可以做到,linux下可以作到,有点难度;WebAuth认证是主动向Auth服务器认证,和HTTP运行时认证类似了,只是HTTP连接本来就是连认证服务器的。
HA会话备份:表明是否备份该连接,netfilter的连接备份功能还不完善,需要自己弄,但如果做到了,再增加一个是否备份的标志也就很容易。
URL过滤:netfilter可以实现,属于内容过滤范畴;
记录:是否记录日志,netfilter目前是记录连接中的包的信息,不记录连接本身的信息;
计数:netfilter可以统计符合规则的数量,如果一个策略包括多条规则,需要进行累加;
流量报警:netfilter可以限制流量,对流量限制范围内的数据通过,范围外的数据一般是DROP,这时候可以增加一个报警机制进行处理,倒不算难;
时间表:没什么说的了;
防病毒扫描:也属于内容过滤范畴了,实现机理都是有的,关键是病毒库如何生成;
信息流整形:也就是设置保障带宽、最大带宽、数据优先权等,保障带宽可以用iproute2作,最大带宽netfilter就能作,5.1版的数据优先权还不完全支持RFC2474,在5.3中可以全部支持了,这个可以由策略路由+TOS设置来实现;
策略的编辑处理就不说了,都是防火墙的必要的实现。
NS提供策略验证功能检查所定义的策略是否有问题,这些只是量而没有质的难度。
 
9. 信息流整形
 
信息流整形包括了流量限制和QoS管理两方面。在Linux下最大流量限制是用流量限制处理,netfilter自己就可以作;保障带宽和数据优先权则属于QoS管理,一般用iproute2来实现,可能TOS目标来配合修改包的TOS值。
5.1版本的NS支持8种数据优先级,但RFC2474定义的优先级是6位,64种,在5.3才可以支持6位优先级。
 
10. 系统参数
 
域名支持:Linux下都有;
DNS查找:在需要的时候用gethostname()解析就可以了;
DNS状态包:要看的话就把每次查询结果都记录;
动态DNS:就是看如何和DDNS服务器通信了,只要有协议就能作;这个功能在实现双方动态的VPN连接是特别有用;
DNS代理:Linux下有专门的实现;
DHCP:Linux下的dhcpd都能作,不过NS可以同时作为客户端和服务器运行,能把客户端收到的TCP/IP设置传给自己的客户端;
pppoe:NS的pppoe是配置在接口上的,既可以多个接口可以支持一一对应多条PPPOE通道,也可以一个接口对应多个PPPOE通道,前者rp-pppoe改改应该也可以做到,后者要难些;pppoe通道可以在HA时同步,在切换时不需要重新拨号,这到是比较新颖的;
升级降级固件、下载上载配置、许可密钥、注册:这些都没什么好说的了;
系统时钟:考虑比较细致,可以支持夏令时,时钟同步可以和WebUI同步,也可以和NTP服务器同步,Linux下有NTP的实现;

11. 小结
 
NS的基本防火墙功能的确是很完善,不过那么多的区段设置让人费解,大部分功能netfilter都可以实现,不过有些地方比 netfilter要细致一些,一条策略能包含那么多元素也挺让人佩服,当然netfilter的pom里的一些奇奇怪怪的匹配模式也是NS所没有的;另外NS的协议跟踪确实比较完善,但内容过滤好象就只是URL过滤、病毒、深度检测等,好象还没国内防火墙作的多。


NS 论坛:
http://www.netscreenforum.com/
www.sectao.com
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics