博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3090|回复: 0

解剖NetScreen

[复制链接]
发表于 2010-12-10 15:45:52 | 显示全部楼层 |阅读模式
解剖NetScreen

这是我从网上搜集的资料,看了觉得挺不错,主要是对着ScreenOS的用户手册和基于linux的防火墙进行对比,可供大家参考。

大家看的时候可以参考用户手册(中文版ScreenOS 5.3,英文版ScreenOS 6.0)


来源于http://blog.chinaunix.net/u/12313/article_21494.html


解剖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/ ... os5.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过滤、病毒、深度检测等,好象还没国内防火墙作的多。


解剖NetScreen (2)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v3_SC.pdf 第3卷:管理

2. 管理界面
本卷主要是界面功夫,NS的界面都在设备里面了,不需要在外面管理机上加专门的管理程序。

NS设备管理可通过Web、命令行(串口、telnet、SSH)和NetScreen Security Manager来管理。管理是NS设备接口的属性,可控制是否可以通过此接口管理NS设备,Linux下要做到这个可以通过netfilter规则来实现。

2.1 WebUI
基本是使用的是HTTP,可以封装在IPSec或SSL中;NS的HHTP到HTTPS是通过重定向来实现的;

比较重要的是NS设备的每个HTTP会话有一个特别的ID,用来区分不同的管理连接,学虚拟系统管理中显的更有用,WebUI可能是用JSP来写的。Apache服务器可以支持JSP和SSL。

2.2 命令行CLI
使用telnet时可以可以将数据封装在VPN通道中;
SSH支持SSHv1,v2,opensshd都支持;
命令行登录用户名口令和Web登录用的是相同的;
登录也可以直接登录进根系统也可以是各虚拟系统里;
支持SCP安全拷贝;
可关闭串口登录,Linux下就是不在inittab中起ttyS0/1的getty进程;

2.3 通过NetScreen Security Manager(NSM)管理
NSM是一个企业级的管理中心,需要安装的外部主机上,NS设备中有相关的代理支持和NSM通信,管理中心可象SNMP服务器那样定制和获取NS设备的相关信息,可以进行配置同步。

2.4 控制管理信息流
管理控制选项是接口的属性,这些在Linux中都可以使用规则或直接在net_device结构中增加参数,对从该网卡进入的数据检测数据类型进行控制。其他没什么。

2.5 管理级别
NS将管理员分为:根管理员;读写管理员;只读管理员;虚拟系统管理员;虚拟系统管理员等。这些实现起来没有本质的困难。

3. 系统监控

3.1 日志
NS日志可存在本地FLASH、SYSLOG、显示在控制台、E_mail、SNMP、Webtrends、PCMCIA,比较齐全,但这些都没有实质的实现难度。
NS的日志类型比较多,在Linux实现时可以用syslog将不同类型的日志记录到不同的文件中。

3.1.1 事件日志
就是标准的SYSLOG八级日志。
从命令行上就能进行日志的查询,可按地址、时间、ID等来查询日志。
日志下载可通过WebUI或在命令行通过tftp传。

3.1.2 流量日志
记录连接的开始日期时间、持续时间、源地址和端口、转换后的源地址和端口、目标地址和端口、转换后的目的地址和端口、会话中的服务、发送和接收的数据字节数等信息。在Linux中需要修改连接结构参数以支持时间、流量等参数。

3.1.3 self日志
就是拒绝的到本机的数据包信息,在Linux也就是INPUT链策略为Drop时最后加一条目的为LOG的iptables规则。

3.1.4 资源恢复日志
资源恢复时的信息

3.1.5 系统日志
达到一定级别的系统事件才生成系统日志,NS支持多个日志服务器,并可用TCP传输。

3.1.6 WebTrends
WebTrends现在也算日志服务器的一种了,可以对日志进行分析,可以象SYSLOG一样发送。

3.1.7 VPN封装
NS可以将各种日志信息封装进VPN通道以保障信息安全性。Linux下实现得先建立VPN通道再传数据,

3.2 流量报警
NS策略流量超过阈值时可以进行报警,在Linux下可以设计一个netfilter报警目标,将超过流量限制的包发到这个目标进行报警处理。

3.3 SNMP
NS支持SNMPv1, v2,可通过SNMP trap发送信息,这些可以通过net-snmpd来实现,需要自己根据需要改点东西。

3.4 计数器
NS提供了大量的计数器统计各种数据数量,Linux下也可以实现,不过的确是太多太杂了。

4. 小结
NS的管理确实比较完善,而且WebUI的实现难度属于比较大的,这卷文档描述的功能虽然不是防火墙的核心功能,单独处理的难度不算很大,但实在是非常杂,工作量比较大。


解剖NetScreen (3)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v4_SC.pdf 第4卷:攻击检测和防御机制

2. 前言

本卷是防火墙的核心功能,用户购买防火墙的级别目的就是用来防御攻击的。防御攻击是防火墙核心技术之一,但现在除了对SYN Flood没有本质防御手段外(见我的另一篇关于syn flood的文章的分析),其他各种IP、TCP层的攻击只要特征明显都是很容易防御的,在Linux上也很容易实现(见我的其他几篇网络攻击的文章的分析)。另外状态检测已经是当前防火墙的一个通用技术,本身就能防御各种状态非法包。

3. Linux下的防御实现

Linux内核中的网络控制参数、netfilter等已经提供了比较多的防御控制,如碎片重组选项、TCP FLAG等。但对于IP、TCP层面的攻击,实际上单独写个netfilter的扩展模块则更方便,记得在早期的绿盟月刊里有过一篇讲如何写netfilter模块来实现IDS的,一般在PREROUTING链里就进行处理了。

4. NetScreen的网络保护选项

4.1 侦查威慑

IP地址扫描:对扫描的检测都只能用统计的方法来实现,NS是同一IP地址在5ms内发10个ICMP包就认为是扫描,不过没说是否能识别是请求包还是响应包,否则多台机器一起ping一台机器时会把该机的回应当成攻击了,而实际它是受害者;在Linux下实现就是统计来自同一IP的ICMP包进行统计,具体时间间隔可以根据sk_buff包中的timestamp字段来判断,可以精确到微秒级别,不过这种统计可能会很耗内存,必须设计好算法以便可以及时释放只要;

端口扫描:NS是同一IP地址在5ms内发10个SYN包到相同IP的不同端口就认为是扫描;Linux下的实现同上,把统计ICMP(1)改为统计TCP(6)的SYN包;

操作系统探查:主要检测一些异常的TCP标准组合,这个很容易实现;

逃避技术:实际NS所描述的这些攻击在严格的状态检测下都能识别出来,不过Linux内核的原始的TCP跟踪表需要修改,使变得更严格一些;

4.2 拒绝服务攻击防御
4.2.1 防火墙DoS攻击

会话表泛滥:NS采用的方法一是限制单个IP的连接数,这对于防御内部网络内的冲击波之类的病毒很有效,但防御外网的就难了,在DDOS下每个IP的连接很小,但IP数很大,防火墙内存肯定顶不住,linux实现起来就是对每个IP增加连接数参数,在建立新连接前判断该IP的连接是否已经到限值了;二是修改TCP会话时间,Linux下都是现成的;

SYN-ACK-ACK代理泛滥:主要是针对SYN代理的攻击了,NS也是靠单IP连接数限制,linux实现方法同上;

4.2.2 网络DoS攻击

SYN泛滥:syn flood本质是无法防御的,所有措施只是一种缓解,NS的防护方式一是SYN包数率限制,netfilter自己就可以提供;二是SYN包速率超过限制后使用SYN代理,SYN代理Linux下没有现成的,得自己作;

ICMP泛滥:基本就是包速限制了;

UDP泛滥:也是包数限制;

Land攻击:源目的相同的包就扔,很容易识别判断;

4.2.3 与操作系统相关的DoS攻击

Ping of Death:属于碎片类攻击,重组再转发就可以防

Teardrop攻击:属于碎片类攻击,重组再转发就可以防

WinNuke:TCP139端口的URG标识包,很容易识别判断;

4.3 可疑数据包属性

ICMP碎片:拒绝ICMP碎片包

大型ICMP数据包:拒绝IP总长超过1024字节的ICMP包

有害IP选项:拒绝有些特殊的IP选项类型

未知协议:1~137合法,其他非法

IP数据包碎片:拒绝IP碎片包

SYN碎片:拒绝SYN碎片,其实TCP有碎片都是异常的

4.4 内容监控和过滤

碎片重组:这是指内容级别的重组,如果不是通过代理方式的话,属于难度比较大的功能,NS的重组用来执行URL,FTP下载上载等的检测;

防病毒扫描:NS中集成了防病毒扫描,检测HTTP、FTP、SMTP、POP3、IMAP协议中的病毒,其实难的是病毒库,有了的话扫描就是模式匹配过程;不过不知道是否对压缩、编码(非加密)的数据也能扫描;

URL过滤:这个是很常见的功能了,就是解析HTTP请求包取URL再来模式检查,不过NS还支持与WebSense连动,这个得先了解一下协议过程才行;

4.5 深入检查
感觉就是IPS功能,把IDS中比较明确的异常模式捆到防火墙,防火墙发现这些模式时就进行处理,在Linux下实现时可以参考snort中关于应用协议的规则定义,把那些模式加载进防火墙进行匹配检查。实现的一个技术重点是如何定义每种异常所需要检测的最关键数据部分,这样在检测时只检查这个最关键的数据部分,以提高检测速度,否则全部内容都进行检测的话速度实在太慢,防火墙也就根本不可用。NS的优势就是可以使用正则表达式进行硬件级别的内容检测,这样速度比软件要快得多。

状态式签名:也就是区分攻击模式会出现在哪些地方了,不是所有地方会出现的都是攻击;
协议异常:判断数据是否和RFC规定的协议格式匹配;

精确封锁HTTP组件:也就是封锁ActiveX, Applet,zip, exe文件等东西,ActiveX, Applet可以在HTML页面中封锁,zip, exe在URL中封锁;

4.6 GPRS超额计费攻击防护
这个东西国内不知道用的多不多?没用过GPRS,这种缺陷GPRS本身应该能够修补吧?一定要加NS的设备么?按NS的说明不过就是一个删除通知而已,GPRS协议有那么傻么?个人觉得没什么意思。

5. 小结
NS的攻击防御功能还算比较全面,不过也没有其他防火墙作不到的东西。


解剖NetScreen (4)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v5_SC.pdf 第5卷:VPN

2. 前言

VPN现在也成了防火墙功能的一个重要组成部分,最常用的VPN协议是IPSec,其次还有PPTP、L2TP,至于SSL VPN一般是作为单独设备出现,不作为防火墙;而MPLS一般只是电信设备里用。

NS支持的是IPSec和L2TP,没提PPTP。NS以前不作SSL VPN,收购了一个作SSL VPN的公司后也有SSL VPN的专门产品。

3. 协议概述

3.1 IPSec

IPSec是一个标准协议族,最新基本框架标准在RFC4301-4309中定义,原来老标准体系(RFC2410-2412)中的主要部分:RFC2401,2402, 2404, 2406, 2407, 2408, 2409已经被废除了,只有RFC2403,2405, 2410, 2411, 2412还有效,此外还有其他相关的各种RFC和draft,一个比较完整的VPN标准列表可见:http://www.vpnc.org/vpn-standards.html

(感叹一声:计算机的东西变化就是快,一个东西都还没上手就已经作废了,想想还要搞一辈子真是苦啊,555)

IPSec使用的协议为AH(51)或ESP(50),模式为通道模式或传输模式,密钥可以是手工配置,也可以是自动密钥交换,目前实现使用IKE协议(RFC2409),以后就是IKEv2了(RFC4306),这种情况下通信双方需要共享一些信息,该信息可能是共享的数据串,也可能是公开密钥算法中对方的公钥或证书。

IKE分两个阶段,第一阶段有两种协商模式,main mode和aggressive mode,第一阶段主要是身份认证和协商加密和认证算法,协商的前两步是明文,后面就是加密的了,NAT-T,XAUTH等在此阶段使用;第2阶段只有一种模式,quick mode,协商信息都是都是加密的,协商通信的SA,确定通信加密密钥(对称加密密钥),PFS在此阶段使用。

IPSec中涉及几乎所有PKI相关技术,关于PKI可参考PKCS系列,关于X.509证书可以参考RFC2459,证书管理协议参考RFC4210,不过国内PKI建设还是比较差,真正用证书的IPSec不多。

IPSec本身还有很多相关技术,如:为提高安全性的完美向前加密PFS;为支持NAT环境的NAT-T;检测对方失效的DPD;提供用户级认证的XAUTH;通过IPSec通道传输多播/广播信息等。

IPSec的实现分两类,一种是网关,为内部网络的通信进行保护,一般称为VPN网关;一种是主机,为本机的通信进行保护,一般称为VPN客户端。在RFC中规定,网关必须实现通道模式,而传输模式是可选的,而主机必须同时支持通道和传输模式。

IPSec实际应用环境分为静态网关到静态网关;静态网关到动态网关;静态网关到静态客户端;静态网关到动态客户端;动态网关到动态网关;动态网关到动态客户端等多种类型,后两种的实现需要第3方设备的支持,如VPN管理中心,DDNS等。

IPSec设备使用模式可分为路由模式或透明模式,还要支持一些特殊网络拓扑环境,如星型VPN、同网段VPN通道等。

IPSec的高可用性分两类,一是通道热备,通过VPN网关冗余实现,要能实现通道状态备份;二是通道均衡,VPN流量自动均衡,自动识别失效通道。VPN的高可用性属于难度很大的功能。

所以说,目前要实现某一情况的IPSec现在不算很难,因为现在open source的IPSec实现已经不少,但能完全实现上述所有情况的还是比较困难的。

在Linux下,IPSec最有名的实现是freeswan,并有很多相关补丁,可以实现绝大多数IPSec需求,但关于高可靠性方面是个空白。在国内使用的话,一般还会要求支持国产加密算法。在Linux2.6中,已经自带了IPSec的实现(native IPSec),不过在内核中它和freeswan只能二选一,不能同时使用。

freeswan提供的IPSec是基于路由的,不支持基于策略的VPN;使用native IPSec和netfilter配合,也许能实现基于策略的VPN。

3.2 L2TP

L2TP标准在RFC2661中定义,目前大部分实现都是基于此RFC,而最新的L2TPv3则在RFC3931中定义。其实l2TP只是提供一种封装方法,并没有加密认证过程,所以真正要保证安全一般是和IPSec结合,在RFC3193中定义了如何用IPSec封装L2TP。

Linux下有l2tpd的L2TP实现,将L2TP包封装在UDP1701端口数据中,防火墙作为服务器监听UDP1701端口。

L2TP/PPTP的应用环境相对简单,一般就是VPN设备作为服务器,然后由远程的客户端来连接,在Windows中自带了PPTP/L2TP客户端,比IPSec要容易实施,所以在某些不需要网关互连的环境下用PPTP/L2TP比IPSec要方便。

3.3 需求小结

除了具体的各种功能需求外,其实有个最常用的需求也是最难实现的需求,是要求VPN通道在任何情况下如果不是手工断开的话,都能一直保持稳定不断,不需要任何人工参与,这是一个实现起来非常难的需求,要求VPN设备能具备很强的鲁棒性,而open source的代码大都没有如此鲁棒,需要自己增加不少处理措施。

老实说,我对IPSec通信的可靠性还是有一点怀疑,AH、ESP包中只有序列号而没有确认号,NAT-T只是包装在UDP包而不是TCP包,因此没有重传机制,如果使用CBC模式的加密算法,只要一个包丢失后续的包就无法解析了,因此VPN通道可能需要经常重新建立。不过在目前实际应用看,好象通道自动重建不是很多,看来是现在的网络可靠性还是比较高,丢包的概率很小了。

4. NetScreen的IPSec

NetScreen的加密认证算法使用硬件实现,所以速度上比软件实现的要快很多。

4.1 证书

NS使用两种密钥创建机制创建VPN通道:手动密钥和具有预先共享密钥或证书的"自动密钥IKE"。

NS支持证书、PKCS#7、可通过LDAP或HTTP在线检索CRL。

NS证书处理过程是先在设备上生成证书请求,下载后发送给CA进行签发,将CA签发的证书再上载回设备,同时也需要上载CA的公钥证书和CRL,也可以使用SCEP自动获取证书和自动更新证书,使用OCSP协议来检查证书状态。SCEP和OCSP是freeswan所不支持的。NS也可以自签证书,说明其内部也建了个CA,openssl可用来建CA。

4.2 加密选项

NS提供的加密选项很多,基本上在IPSec处理时只要有不同选择时都提供有选项,给用户的自由度比较大,但对用户的要求也就比较高了,不过一般情况下就用缺省配置就可以了。国内产品一般没提供那么多的选项配置,NS可配置的包括:

ESP/AH;通道模式/传输模式;自动IKE/手工密钥;main/aggressive; 证书/共享密钥;RSA/DSA;密钥长度512/768/1024/2048;DH组:1/2/5;加密算法:AES/DES/3DES;认证算法:MD5/SHA1;IKE ID:IP/U-FQDN/FQDN/ASN1-DN;PFS:Y/N;replay检测:Y/N;

4.2 基于路由和基于策略的通道

NS提供了基于路由和基于策略的VPN通道,由于IPSec是第三层实现的,SA定义中也没有上层协议的信息,所以基于路由应该是最自然和合理的,基于策略只是由于需求的提高而增加的,所以需要增加新的处理措施,所以一般基于策略的VPN应该是更消耗资源一些。

freeswan是只支持基于路由的VPN,如何在此基础上实现基于策略的VPN还没想清楚,或许由策略路由来辅助可能有帮助。

基于策略的VPN是在配置策略动作时指定为加密处理,CheckPoint也是这样作的;基于路由的VPN一般是先要配置VPN通道信息,NS还支持在VPN通道接口上使用动态路由协议,这样在大型网络中比较灵活。

个人感觉基于路由和基于策略的区别是在于通道的建立时机,基于路由的IPSec是事先建立的,以后两点间的通信就全走通道了;而基于策略的IPSec是动态的,有点象拨号中的"dial on demond",在有数据需求是才去建立通道,数据通信完就结束。

4.3 站点到站点的VPN(网关到网关)

freeswan的VPN通道接口"ipsec*"是VPN配置文件中绑定到固定网卡上的,使用和该网卡相同的地址,VPN通道建立后,自动建立到达对方的路由,不需要另外配置。而NS的VPN通道接口可以自己单独定义,可以配也可以不配地址,VPN通道路由需要自己添加。

对于动态地址,NS使用FQDN来定义对方,建立通道前通过DNS解析获取对方实际地址,这点freeswan也可以作。不过这要求设备支持DDNS,在获取IP地址后自动通知DNS服务器自己的IP。

对于重叠地址的VPN通道连接,普通情况建立的VPN通道是无效的,因为当访问对方的IP时会认为是访问本地,这时需要对两边地址进行转换,数据在进入VPN通道前就要转换地址。不过NS支持得有限,只支持部分地址的点转换,好象不能实现网络对网络的全面转换。这种地址转换本身不属于IPSec,只是IPSec的一个预处理过程,netfilter本身不支持这样的转换模式,但可以简单修改后支持,修改量不大,而且最终可以实现网络对网络的一对一转换,也就是可以访问对方网络内的任意一台机器,而不是有限的服务器。

透明模式VPN,是指防火墙运行在透明模式下,但防火墙上配地址,用该地址建立VPN通道保护防火墙内部到外部的通信。freeswan是可以支持的,使用前先启动桥,将ipsec网卡绑定到桥网卡就可以了。

4.4 拨号VPN

拨号VPN的特点就是启动VPN时还不知道对方地址,服务器端是处在监听状态等待对方来连接。在freeswan中称之为Road Warrior,配置时除了对方地址等为ANY外其他参数基本和网关到网关的类似。一般这种情况下会应用XAUTH来认证对方。NS是通过证书中的ID或共享密钥来识别对方,也可以启用XAUTH。从NS的配置实例看,NS可以通过对方子网来区分对方,这点在freeswan中作不到。

对于多个拨号对端,NS提供组IKE ID、共享IKE ID来通配对方。

freeswan是通过地址匹配来找连接信息的,所以只能配一个匹配任意IP地址的连接,匹配了第一条连接后就不会再去找第二条连接的信息。

4.5 高级VPN功能

NS支持NAT-T、VPN通道的监控、每个通道接口多个通道、冗余VPN网关、背对背VPN、星型VPN等。前3个freeswan都可以支持,在某些特定配置下也可以支持星型VPN。

不过不太理解背对背和星型有什么实际区别,NS中背对背用在不同区段,需要查找策略;星型用在同一区段,不需要查找策略,可本质上有什么区别呢?不都是从一个通道进来,VPN设备解密,再从另一个通道里发出去的过程么?查不查策略和IPSec本身有什么关系?

freeswan本身不支持冗余处理,需要自己定义相关的处理,因为这种多网关协商取最高优先权的处理模式不是RFC定义的,需要自己定义。不过NS也不能实现网关间的全部数据连接状态的冗余备份,切换后连接会重置,但可以以状态检测失效为代价来使连接不重置。

5. NetScreen的L2TP

NS的L2TP支持使用IPSec进行加密,而且只能使用传输模式,NS的L2TP本身的功能基本上Linux下的l2tpd都能提供,很容易实验通;不过和IPSec结合比较麻烦,没试成功过。不过以其那么麻烦地用L2TP+IPSec,还不如用PPTP,Linux下有完整的PPTP实现和相关MS-MPPE的补丁,可以提供128位的加密保护。

6. 小结

NS的VPN功能的确算比较完整的,尤其是IPSec部分,不过影响其在国内应用的不是技术而是法律因素,很多情况是禁止使用国外的VPN产品的。

国内的VPN厂家不算少,可大部分还是基于freeswan修改的,而且是靠软件实现加密和认证,国密办允许的加密卡速度都比较慢,好象都没有超过百兆的,还不如AES的软件加密来得快,硬件加速卡国内基本没有产的,都是美国或台湾产的,感觉国内还是比较落后。

对于常用的公开的加密算法如AES、3DES等,目前还没有公开的破解,但没人保证美国NSA已经能够破解,所以真正国内只允许使用国密办允许的加密算法,都是硬件化的,靠通过算法保密来提高可靠性,使用软加密的都是打擦边球;对于HASH算法,由于王小云教授的横空出世,MD5和SHA1相继被破解,感觉一下没有合适的HASH算法可用了,提出新的可靠HASH算法是密码界的最紧迫的任务了。

解剖NetScreen (5)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v6_SC.pdf 第6卷:路由

2. 前言

路由是防火墙的基本功能,防火墙除了透明模式外,其他情况下就是也是一个路由器。路由分三种,一是静态路由,一般是手工配置,一旦配置后就一直存在,策略路由增加了源地址因素,一般大多配为静态路由;一种是动态路由,一般是路由器之间使用某种动态路由协议自动生成的,根据情况也会被删除;第三种路由称为多播路由,现在随着多播(也称为组播)通信应用的增加,相应也有对多播路由的需求,多播路由的特殊之处在于多播包的MAC地址不是真实的物理MAC地址,而是根据多播地址构造出来的,这样就和普通包的路由转发不一样。

NS支持普通静态路由、策略路由、多播路由,动态路由支持RIP、OSPF、BGP,NS一个最具特色的功能就是虚拟路由器。

在Linux下,静态路由直接通过route命令可配置;策略路由可通过iproute2来提供;多播路由首先内核需要支持,用户层程序有mrouted、pimd等;动态路由应用程序有routed、gated、zebra等。

3. NS路由表

NS路由表和CISCO路由器有点象,和Linux路由表不同在于增加了协议、优先级和虚拟系统部分,而ID应该是硬件相关因素,说明NS的路由表应该是有限的。注意在命令行方式下NS的以太网卡名称和Linux相同,是否意味着NOS和Linux还是有一定的关联。

4. 虚拟路由器

NS可以将其路由选择组件分成两个或多个虚拟路由器。虚拟路由器(VR)支持静态路由协议、动态路由协议和组播路由协议,可以在一个VR上同时启用这些协议。NS设备上有两个预定义的VR:trust-vr和untrust-vr。配置路由就是在VR中配置,还要把区段绑定到VR上,不过为什么缺省时untrust区段不绑定到untrust-vr上呢?

NS这么作的目的是使不同VR中的路由表对于其他VR来说是不可见的,防止将内部网络结构通过动态路由协议传递出去,当然NS设备就要能将数据从一个VR转移到另一个VR中,如一般就要把trust-vr的缺省路由配置为untrust-vr。如此看来,VR对于路由基本是和区段对于网络接口类似的逻辑关系,新定义的VR就类似新定义的区段一样,系统内核里的路由表还是各个接口的路由都在一起,但增加相应的VR标志,在显示给用户时,只显示相同VR内的路由,同样在进行动态路由时,只传递同VR内的路由信息。Linux内核中可支持多个路由表,这是否可以用来借鉴实现VR呢?还没想得很清楚。其实Linux的路由功能也是很强大,在advanced routing howto中有很详细的说明。每个虚拟系统共享根级VR,就象多路由表中共享main路由表一样,各个VR可在各自路由表中定义,再配合一些路由策略,应该可以在Linux上实现类似的VR功能。

对于到相同目的的多个路由的选择是通过路由优先级来进行,这个倒没什么说的。

源路由时,NS除了根据源地址外,还可以根据源接口来选择,路由查询顺序是先源接口类路由,再源地址路由,最后是目的地址路由,和Linux的多路由表处理类似,main也是在最后。iproute2支持源地址策略路由,好象不支持接口。

在netfilter的POM中有个ROUTE目标,用于实现将指定的数据从某条路由上发出,这样可以实现更精细的策略控制。

等值路由(ECMP):NS的等值路由是用来实现线路均衡的,在有多个ISP出口的应用环境中使用,linux的iproute2可以实现此功能。

路由重新分配:一般就是针对动态路由项而言的了,相关就有路由过滤和访问列表的处理。

5. 动态路由

NS支持RIP、OSPF和BGP,这些在Linux下都有现成的实现,具体的就不说了,玩CISCO比较多的对这些也一定很熟悉。

6. 组播路由

要转发组播信息,组播路由环境需要具备以下内容:
1)主机和路由器之间用于传送组播组成员关系信息的机制。NetScreen设备支持IGMP (互联网组管理协议)版本1、2和3。路由器和主机仅使用IGMP来传送成员关系信息,而不转发或路由组播信息流
2)用来传送组播路由表以及将数据转发给网络中的各个主机的组播路由协议。NetScreen设备支持PIM-SM (协议无关组播-稀疏模式)和PIM-SSM (协议无关组播-源特定模式)。或者,还可使用"IGMP代理"功能来转发组播信息流,而不占用运行组播路由协议的CPU开销。

组播路由的特殊之处在于其MAC地址。

NS的静态组播路由可以改变组播地址,支持GRE封装组播包。

Linux下的组播支持比较弱,以前有个mrouted,但很就没有更新了,最新的有pimd等,不过感觉不太稳定。

7. IGMP和PIM

IGMP在主机和路由器之间运行,PIM在路由器之间运行,都用来处理组播信息,使路由器可以知道多播组的信息从而能够正确转发多播信息到正确的接口。

8. 小结

NS的路由功能虽然比不上CISCO路由器,在防火墙中算非常强大了,Linux下对普通路由也都能比较好支持,估计可以配出类似VR的路由功能;但多播部分支持比较弱一些,比NS要差不少,要实现NS的多播路由功能工作量不小。



解剖NetScreen (6)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v7_SC.pdf 第7卷:地址转换

2. 前言

NAT(Network Address Translation)是在IP(版本4)地址日渐枯竭的情况下出现的一种技术,可将整个组织的内部IP都映射到一个合法IP上来进行Internet的访问,也可将外部对某IP的访问映射到内部的服务器上。与NAT相关的术语有IP伪装(IP Masquerade)、端口映射(Port Mapping)、端口地址转换(Port Address Translation)、透明代理(Transparent Proxy)等,它们都是NAT的某种表现形式,NAT在RFC3022中定义。

NAT分为源NAT和目的NAT两种,源NAT是指转换前源IP地址和转换后源IP地址不同,数据进入防火墙后,防火墙将其源地址进行了转换后再将其发出,使外部看不到数据包原来的源地址;目的NAT是指转换前目的IP地址和转换后目的IP地址不同(对于TCP/UDP协议,也可以改变端口号),数据进入防火墙后,防火墙将其目的地址进行了转换后再将其发出,使看不到数据包原来的目的地址。在进行NAT时,如果是一个地址到一个地址的转换,称为一对一模式;如果是一个网段地址到一个地址的转换,称为多对一的转换;如果是一个网段地址到一个网段地址的转换,称为多对多的转换。上面说的IP伪装就属于源NAT,而端口映射和透明代理等属于目的NAT。

NAT从另一个角度也可分为静态和动态两种,静态方式是明确指定了转换前后的地址和端口的情况,可以有一对一、一对多、多对一等方式,如果实际地址发生变化,NAT规则必须相应改变;而动态方式也就是IP伪装方式,是一种多到一的源NAT转换模式,一般只需指定转换前的地址,转换后地址则是防火墙的IP地址,此地址是可以动态改变的,而NAT规则可以不变。静态NAT一般用在防火墙IP地址都是固定的情况,而动态NAT用于防火墙IP地址不固定的场合,如ADSL拨号。动态情况下也可以进行目的NAT,但NAT规则是在获取了地址后才起作用。

一般来说,源NAT多用于从内部网络到外部网络的访问,内部网络地址可以是保留IP地址;目的NAT多用于外部网络到内部服务器的访问,内部服务器可使用保留IP地址。当使用透明代理模式时,由内到外的访问实际上是一种目的NAT,是将访问的目的IP和目的端口转换为代理服务器的IP和代理端口。

Linux下的netfilter提供了完整的NAT解决方案。

使用目的NAT功能时可实现负载均衡(Load Balance,LB)功能,假设防火墙外网卡上有一个合法IP,内部有多个服务器同时提供服务,当将访问防火墙外网卡IP的访问请求转换为这一组内部服务器的IP地址时,访问请求就可以在这一组服务器进行均衡,在Linux下是由IPVS完成的。

3. NS的NAT

NS的NAT_src和NAT_dst是两种不相关的处理,这点和netfilter是一样的,netfilter的NAT规则也是只处理单方向的信息,反方向的主动连接不符合此规则。

PAT在netfilter中是自动启动的,在NS中还有相关选项启动,以防止在某些特殊场合不能改端口。在禁用PAT的情况下,如果地址足够多,netfilter也可以不用改端口的。

NS的NAT规则是加在策略上的,而netfilter是和过滤规则分开的,不过完成的功能是相同的,NS是一起处理了,而netfilter是分两步实现。

NS可以实现子网到子网的一对一映射,netfilter本身转换后地址是均衡选择的,不过实现这种多对多时的一对一转换很容易。

NS中的MIP相当于加了双向的NAT规则。

NS中的VIP就是通过不同端口来映射内部不同主机,这个netfilter也可以很容易实现,比较要注意的虚IP本身,Linux本身不支持虚IP,要处理不同地址的话需要加网卡别名,不过修改网卡结构可以支持网卡上带虚IP。

4. 特殊场合的NAT

4.1 重叠网段VPN通道中的NAT

这种情况在关于VPN那章中说过这种情况,为解决VPN通道两边IP地址重叠时的VPN访问问题,需要对数据在进入VPN通道前和出VPN通道后进行相关的地址转换,netfilter本身不支持这种情况,但作简单修改后可以支持。

4.2 访问内部同网段服务器

当内部服务器和内部机器在相同的内部网段,地址是内部地址的场合,用合法外部地址访问内部服务器时用普通NAT方式是无法实现的,因为这同时要修改数据包的源地址和目的地址(注意,如果服务器和内部机器不在同一内部网段,通过NAT是可以实现这种访问的)。
为处理这种情况,TRX的NetGuard用了特殊的NAT处理来实现,有的防火墙是通过DNS NAT方式来实现,从NS的手册中没有相关描述,不知道是否能正确处理这种情况。NS中源和目的地址同时改变的场合是4.1中描述的VPN场合。

5. 小结

NAT技术现在已经是一个很成熟的技术了,netfilter本身提供了完善的NAT功能,基本不比任何商业系统差,而且源码公开可以少量改动就能改造成各种所需要的处理方式。


解剖NetScreen (7)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v8_SC.pdf 第8卷:用户认证

2. 前言

认证是保证信息只能由合法用户访问的常用手段,一般是通过双方共享一个秘密信息,只要对方提供持有该秘密的证据,即认为认证成功。这种秘密可以是逻辑信息,如一般的口令;也可以是生物信息,如指纹、虹膜等。对于网络安全应用,秘密只能是逻辑信息,而对此秘密的识别过程即为认证算法,最普通的就是用户名/口令认证,如普通的PAP认证等;为防止口令信息被监听,通常对通信过程进行加密,如radius认证过程就是加密的;有的干脆就不用在网络上传输,如CHAP认证,通过对随机的挑战附加秘密信息后HASH的方法来进行处理;有的使用非对称算法进行认证,如用对方公钥加密挑战信息,对方如果能用私钥解开就可认证成功。

防火墙的认证一般用在认证防火墙管理员、防火墙控制的用户、VPN对端等,一般都支持多种认证处理,一般认证秘密信息存在防火墙内部,但由于大部分防火墙的存储量有限,在用户数很大时通常使用外部认证服务器,防火墙只起一个认证转发作用:把用户提供的认证信息转到认证服务器,然后接收认证服务器的返回结果,根据认证成功还是失败进行不同的处理。
3. NS的认证对象

NS的认证对象包括:

ADMIN用户:即防火墙的管理员,包括根ADMIN、根读写ADMIN、根只读ADMIN、虚拟系统ADMIN、虚拟系统只读ADMIN,其中根ADMIN的秘密信息必须存防火墙内部,其他的可以在外部认证服务器。

多类型用户:auth、IKE、L2TP、XAuth用户组,并可组合在一起。不过个人认为这种由防火墙控制的用户最好还是统一化,不用和应用进行绑定,具体该用户是否可以在某应用中使用是管理员设置的用户属性。我个人不认为将用户类型分为多个单独帐户有更高的安全性,和单一多类型用户安全性一样。

NS支持组表达式处理,这虽然没有理论上的难度,只是属于有点麻烦。
NS的认证设置是在策略中的,可在运行时认证,但只是HTTP、FTP、TELNET之一的访问,如果不是这几个协议的访问,如何实现这个认证过程呢?这地方感觉NS没说清楚。

4. NS认证服务器和用户

NS支持的外部认证类型是radius/ldap/SecureID,没有很常用的TACACS/TACACS+,而且每种认证不是所有类型的认证对象都支持。在Linux有现成的radius/ldap认证客户端,SecureID由于要有其他硬件配合,就不考虑了,在防火墙内的各个应用程序中当然没必要都实现radius/ldap认证客户端,我想应该在防火墙内部设置一个认证代理,综合各种认证客户端,各应用程序使用统一接口把认证信息提交到认证代理,再由代理根据是哪种认证再进行相应的处理,把结果返回各应用程序。

NS中认证的一个难点是其运行时认证,虽然只支持HTTP、FTP、TELNET三个协议,不过有点不明白的是既然截取了用户的请求信息,随后的认证处理应该也是在这个TCP连接中处理的,如果认证通过,后续通信应该是另一个TCP连接了,不知道NS说会缓冲原来数据再转发是怎么完成,被认证端还认识这个连接么?我自己要实现的话只能让用户认证完后还要发新连接重新连接服务器,觉得很难在一个连接中完成,尤其是在FTP、TELNET这样连接一直保持着的协议,不过用类似SYN代理的方式可以实现,但一定要算好之前通信的序列号和确认号,这样防火墙的负载就大了些。

策略前检查认证就无所谓了,现在很多防火墙就是那么作的。

NS定义了词典文件定义了RADIUS认证服务的一些属性值,可以实现用户相关数据处理,这个不难实现。

NS可以将外部服务器作为缺省认证服务器,这点在系统设计时要注意。

没看出NS是如何判断认证是运行时认证的,难道是把认证信息加到策略中后NS就自动作为运行时认证?

NS的认证用户提供用户组的概念,这样设置处理方便些,这些实现难度不大,关键是要能想到,就象MS本身技术比UNIX差得多,但只是从用户使用方便性上下了很多功夫而已。

至于其他的IKE、XAUTH、L2TP等的认证,那是在各应用程序中处理的了,这个没什么特别的。

5. 小结

NS的认证处理应该没有太多特别的,除了运行时认证外,其他的很多国内防火墙都能作。

解剖NetScreen (8)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.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的虚拟系统是国内产品缺乏而国外产品中比较普遍的功能,不过国内用户使用此功能的似乎不多。实现时用户层上的区分难度不大,关键是内核中的数据分类。


解剖NetScreen (9)

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

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

1. 参考资料:
http://www.juniper.net/techpubs/ ... os5.1.0/translated/
CE_v10_SC.pdf 第10卷:HA

2. 前言

HA实现分两类,一种是热备,一种是均衡,后者可靠性更高,难度更大。

NS使用其专有协议NSRP来实现HA功能,NSRP好象是没有RFC,所以其内部实现过程无从知晓。路由器中实现HA的协议有VRRP(RFC3768),一般也可应用在防火墙上,Linux下有其实现,不过还是基于老rfc2338的。Linux下的应用层HA的实现是heartbeat,是根据心跳信号来判断对方是否还在运行从而确定是否启动从机,不过heartbeat实际上是针对应用层的,相对效率比较低,切换速度慢,我个人觉得对于防火墙来说,自己设计一个自己的heartbeat处理反而会简单一些,可控制从机能迅速切换。

HA的第一级门槛功能是普通状态的备份,就是主机中的连接信息能实时备份到从机,使得从机切换后内外之间通信能继续,不需要重新连接;

HA的第二级门槛是VPN连接的备份,使主机中的VPN通道信息能实时备份到从机,使得从机切换后内外之间VPN通道能继续有效,不需要重新建立VPN通道;对普通连接的数据均衡也可算这一级别吧;

HA的第三级门槛是防火墙之间的均衡,防火墙之间没有主从之分,所有各种连接的数据,包括VPN通道,都可以在各防火墙间进行流量均衡,一旦一台失效,其他防火墙都能接管其流量,真正做到数据通信的可靠传输,可以实现核电站中的"单一故障准则"。

Linux下的open source中有个netfilter-ha的项目正在实现第一级门槛,国内有些防火墙已经可以实现第一级门槛功能。

3. NSRP

NSRP也是通过心跳信号来实现,基本是热备模式,在路由或NAT时,通过VRRP路由器分配数据流量来实现均衡模式,HA设备数量可扩充2个以上,这样数据应该都是通过多播来实现的。在透明模式下就只能实现热备模式,其实有点奇怪,其实在透明模式下实现均衡应该是更简单的。

NSRP通信通过DES加密,MD5认证。

NSRP提供集群功能,集群中任何一台设置的配置处理都会传给集群中其他设备,这个倒不难实现,是在多播包中传命令就是,显然有些命令是不需要也是不必要传的,在设计时要注意。

HA从机切换会广播ARP从而不需要将HA设备的MAC地址设得相同,ARP广播Linux不难实现。

在集群模式下,NSRP象VRRP一样根据优先级值选出主机和备份机,而且有选项控制主机启动后新的优先级是否能抢占。这些倒是不难实现,只要参考VRRP设计好协议协商过程就行。

配置NSRP时要先配防火墙的虚拟安全设备VSD,通过VSD的虚拟安全接口VSI通信,一台NS设备可以配多个VSD,就类似多个虚拟系统,设备互为备份,可能会提高可靠性吧。

NS将需要HA备份的对象称为执行对象RTO,如会话等,还支持SA,,是否意味支持VPN通道的备份?

VSD组状态基本如此,是每个实现HA的协议所要实现的。

NSRP提供手动同步配置功能,可以同步RTO、系统时钟。

NSRP的三种心跳信号:HA物理链接心跳信号;VSD心跳信号;RTO心跳信号。

NSRP的两种HA消息:
配置消息:主设备向其它VSD组成员发送的网络和配置设置
RTO消息:主设备向其它RTO镜像发送的RTO

从这些信号和消息基本可以猜测出NSRP的大概协议过程。

NS支持双HA接口,以及双HA链接探查,以确定HA接口间链接是否正常,不过这和HA物理链接心跳信号有什么区别吗?手册里为什么要单独进行说明?

4. 冗余接口

NS提供冗余接口和聚合接口功能,冗余接口功能是接口备份功能,一个端口失效可以由备份端口接替;聚合接口就是将多个网卡接口捆绑在一起以提高接口的流量和可靠性。还可以通过串口来保证到外网的链接不中断。

Linux下有ip-bonding功能实现聚合接口可将多个网卡捆绑在一起以提高流量功能,冗余接口不知道是否有实现。NS的其他的接口冗余处理确实也比较多,Linux下可能也没有现成的,得自己写个监控程序随时监控各网卡的状态,要实现NS类似功能属于工作量比较大,虽然没有难度门槛方面的问题。

5. 故障切换

故障切换就是防火墙功能从主设备切到从设备,或从从设备到主设备的过程,NS可以监控物理接口、区段或特定目标IP地址来确定是否切换,可以设置不同的权重,当失败的权重到一定值是发生切换,这个感觉搞得比较麻烦。

6. 小结

NSRP确实比较完善,也非常复杂,基本满足了单一故障准则,不知道NS是否公开了该协议。

自己定义HA协议时可参考VRRP协议,也可以参考OSPF,Linux下的HA实现和NS相差太多,要作到NS的程度工作量还很大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-11-23 22:48 , Processed in 0.100463 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表