msn: [email protected]
来源:http://yfydz.cublog.cn
0. 声明
本文仅仅是从技术角度分析如何实现NetScreen防火墙,即如果要把本人的一台Linux机器变成NetScreen防火墙估计要作那些工作,所有观点均为个人观点,不代表任何组织或团体,只谈技术,不带任何吹捧、攻击或贬低,欢迎大家一起讨论,有错误请指正,但对文章中如有不明白的名词和概念请问google而不要问我。
1. 参考资料: http://www.juniper.net/techpubs/software/screenos/screenos5.1.0/translated/ CE_v9_SC.pdf 第9卷:虚拟系统 2. 前言 虚拟系统(virtual system)是NS中一个比较特殊的功能,虽然国外其他防火墙也有相似功能,但国内目前没有一家防火墙具备此功能。虚拟系统可将一台防火墙虚拟成多个防火墙,每个虚拟防火墙之间不相关,这样在某些特殊场合,如服务器托管、部门分隔等,每个虚拟防火墙用于保护各自的内部系统,相互之间又无关,这样对节省用户开支有很大好处。 VS在CISCO的PIX中类似的功能好象是叫Security Context, 其不支持在Security Context中实现VPN、multicast、dynamic routing。NS没提它的VS之间是否可以区分这些特殊协议数据。 在Linux下实现VS功能有不小的难度,而且工作量不小。 3. 分包策略 实现VS的一个最重要的前提就是分包,即把数据包分配到正确的虚拟系统中。因为实际上防火墙内的操作系统还是就一个,有一个共同的网络栈,VS 不过是从用户层的角度来看到的系统,就象计算机的并发处理在细尺度上仍然是串行处理一样。操作系统使用特殊的分包策略,将不同的包分配到不同的VS中处理,其他VS中看不到这个包,这样用用户层角度就好象是多个系统分别处理自己数据,NS称这个过程为信息流分类。 在NS4.0的时候,分包策略还是通过数据进入的网卡接口来区分的,也就是每个接口(包括VLAN接口)分属不同的VS,这样从物理上就区分开这些数据包,属于物理级区分;到了5.1,可采用基于VLAN和基于IP的分类策略,接口可以是多个VS共享,共享的接口中的数据进一步可根据源地址、目的地址来进行区分,详细分类方法可见手册。 4. Linux下实现VS 在Linux下实现VS功能,要考虑处理好以下一些问题: 网卡区分:要将网卡分配给不同的VS,网卡可共享也可独有,配置显示时要加一层处理,使在VS中只看到本VS中的网卡,网卡名称应该重新编排,如VS1中的网卡1和VS2中的网卡1可能分别指eth0和eth1; 路由表区分:要将不同VS的路由表区分开来,具体怎么实现没想好,估计是应该用到多路由表和策略路由功能,编译内核时一定要设置MULTI_ROUTE_TABLE; 分包策略:分包可以用网卡来分,也可以用netfilter实现不同的链来区分,或者给数据包打MARK,MARK值就是VS号,在规则中增加对mark的匹配处理这样就可以实现对不同VS使用不同的。 策略区分:这个用户制定的策略只是用在netfilter实现的不同VS的策略链中,不直接加入到缺省的那几个链,每个VS的策略链都能产生最后的判定结果; 用户界面:对于用户接口,传统防火墙对象下就包括策略,用户等子对象,现在还要在防火墙下插入一层VS,VS下面才是策略、用户等配置,登录时加入判断是根用户还是虚拟系统用户而进入不同的系统。这些属于用户层处理,难度虽然不大,但工作量会很大。 NS的各虚拟系统之间如果没有策略是不能通信的,加入策略后可以通信,对netfilter来说就是将一个链的结果转到另一个链中。 5. 小结 NS的虚拟系统是国内产品缺乏而国外产品中比较普遍的功能,不过国内用户使用此功能的似乎不多。实现时用户层上的区分难度不大,关键是内核中的数据分类。