基于NetChannel技术的UTM架构改进
2010-08-23樊永霞陈小飞
樊永霞,陈小飞
FAN Yong-xia, CHEN Xiao-fei
(石家庄科技工程职业学院,石家庄 050800)
1 UTM
1.1 UTM出现
出于性能的考率,传统的防火墙保护了链路层、网络层,放弃了对应用层的保护。伴随着网络技术的发展,针对应用层的网络攻击不断涌现,为控制病毒,木马等应用层的攻击,在采购防火墙的同时不得不采购反病毒,反入侵,内容过滤等设备,多种安全设备的共存必然导致网络拓扑和网络管理的复杂,不同厂家的设备缺乏协调配合,缺乏互操作性,往往导致无法形成合力有效的保护网络和数据的安全,针对这一问题,IDC提出了UTM(统一威胁管理)的概念,不仅保护链路层网络层,而且保护应用层,UTM将众多网络安全技术融合在一个设备上,简化了网络结构和网络安全设备的管理
1.2 UTM架构
传统的防火墙大多采用了asic+x86cpu的架构,asic集成了如会话,路由和策略路由,桥, 虚拟专用网等诸多功能,比起x86架构,小包可以轻松达到线速,然而在asic集成AV,IPS等复杂功能不仅十分困难而且风险难以控制,显然以cpu处理CF,IPS,AV等复杂功能更加简便。随着intel多核处理器,pci-e总线的出现,越来越多的UTM采用了多核x86cpu架构。
多核x86cpu架构具有可扩充、易更新、易移植等优点,然而在多核下,资源的共享和互斥,资源的调度等问题变的更加复杂,UTM的多核x86硬件平台需要更加优秀的软件系统软件架构。
2 NetChannel
天才学者jacobson在2006 linux年会上提出了NetChannel架构,将性能低的矛头直指linux内核协议栈,在linux网络社区引起强烈争论。
2.1 NetChannel架构
NetChannel系统框架如图1所示。
图1 NetChannel系统架构
NetChannel系统主要包括RootChannel和SubChannel,RootChannel处理以太层/网络层数据,而SubChannel处理应用层数据[1]。应用程序预处理器和应用程序后处理器组成用户空间协议栈。
2.2 NetChannel的优点
相对于linux的两个通信环,NetChannel是点对点通信,应用数据经过SubChannel直接到达应用程序而不经过linux内核协议栈,具有如下优点:
1)由于不经过linux内核协议栈,也就完全避免了packet到skb的拷贝以及skb到应用层的拷贝,是最彻底的零拷贝技术。
2)由于不经过linux内核协议栈,就不会处理linux协议栈中大量共享数据,从而减少了锁,有利于cache的本地化。
3)当确定包是应用数据时,无需raise软中断,减少了系统软中断的个数,减少了系统的上下文切换,有利于cache的本地化。
2.3 NetChannel的缺点
1)当今几乎全部主流协议栈都是在内核实现的,用户空间协议栈难以可靠实现。
2)用户空间协议栈和linux内核协议栈共存,难以维护,在用户空间和内核需要维护相同功能的模块,比如应用程序预处理器和RootChannel预处理器、应用程序后处理器和RootChannel后处理器。
3 NetChannel plus
尽管NetChannel具有很多优点,然而linux内核协议栈经过多年的发展已经非常可靠和完备,就连jacobson本人也承认,linux内核协议栈是最快和最完备的协议栈[2],单独开发用户空间协议栈有较大风险,从而不会为UTM设计人员所接受。基于以上考虑,提出了一种改进的NetChannel架构NetChannel plus
3.1 NetChannel plus架构
系统框架如图2所示。
图2 NetChannel plus系统架构
NetChannel plus分为应用层,以太层/网络层则包括slow forward层和fast forward层。
1)以太层/网络层。如VPN/地址转换/路由等处理,这部分由于要求快速响应、用户透明的特点,可以在系统的内核空间完成。其中Slow fowward主要用于建立fast forward层所需的信息FastInfo,并发送数据,而fast forward层主要通过FastInfo信息直接修改包快速发送数据,NetChannel plus在以太层/网络层的数据处理具有较高的性能
2)应用层。对于应用层数据,因为其要处理类似病毒检测/攻击检测/反垃圾检测等比较耗费资源且相对危险数据,所以这部分操作在用户空间完成;同时,考虑到不同用户需求,可以提供开放应用层接口,使用部分硬件完成比如模式匹配等工作。与NetChannel不同,由于取消了应用层协议栈,当应用层处理完数据后,需要将包放入Rcv-RootChannel中,以便通过fast forward层完成以太层/网络层的数据处理。
Netchannel plus以AppChannel取代了SubChannel,当slow forward层通过会话表发现应用数据或fast forward层通过FastInfo直接发现是应用数据时,以太层/网络层会将数据包放入App Channel中并唤醒应用进程处理。
3.2 NetChannelplus子模块
基于内核的模块完成数据包分类、访问控制、VPN、地址转换、建立/销毁FastInfo、建立/销毁防火墙会话表等操作。系统初始华是为每个网卡驱动程序注册Tx-RootChannel和Rcv-RootChannel,并且注册App Channel
各个模块功能如下:
1)RootChannel预处理器:从RootChannel中得到数据,然后进行以下处理:若此数据包是一个加密数据包,则进行解密;若是分片数据包,则进行分片重组;如果包上有应用程序以处理标记,则从包中取出hash信息,否则根据数据包的五元组信息(源IP地址、目标地址、协议、源端口、目标端口)计算hash值,在FastInfo中hash查找,若找到对应的条目,则把数据包交给防火墙FastForard管理器进行处理。否则数据包进入RootChannel过滤器。
2)RootChannel过滤器:根据用户的规则配置进行数据包的规则验证,对于非法数据包,将被丢弃。合法数据包将根据用户配置完成地址转化、路由查找等操作,建立防火墙会话表。
3)RootChannel管理器:根据RootChannel过滤器的输出,建立FastInfo,并把对应的防火墙会话信息加载到FastInfo上;如果数据包需要应用层处理且无应用程序处理标记,将hash信息记录在包上,包送AppChannel处理。
4)RootChannel前置处理器:根据防火墙的会话信息、用户配置信息对数据包进行修改,并完成校验和等操作;
5)RootChannel后置处理器:如果是VPN数据包,则先作加密处理;如果数据包需要分片,则进行分片处理,然后把处理好的数据包push到tx-RootChannel。
6)FastChannel管理器:如果FastInfo指示数据包需要应用层处理且无应用程序处理标记,将hash信息记录在包上,包送AppChannel处理。
7)FastChannel前置处理器:根据FastInfo信息直接对数据包进行修改,并完成校验和等操作。
8)应用程序处理器:从App Channel中poll到数据包后,根据用户配置(包含在防火墙会话信息中)完成反病毒,反入侵,内容过滤等操作,如果检测到数据包非法,则丢弃此数据包,释放内存。这部分可以使用外部的应用程序加速卡来加快处理速度。在包中置应用程序处理标置,然后将包送到rx-RootChannel中去。
3.3 NetChannel plus流程图
图3 NetChannel plus流程图
3.4 NetChannel plus实现和关键技术
Slow forward层基本是linux netfilter实现,应用程序用第三方软件或硬件实现,fast forward层的设计是系统性能的关键所在,由于以FastInfo作为处理包的基础,fast forward可以设计成轻量级协议栈,通过构造类似于netfilter但又高度精简的hook点,fast foward可以具有开放性的架构,方便集成第三方的软件和硬件,由于fast forward的实现可以充分运用、借鉴linux协议栈已经提供的成熟的支持函数和包处理函数,fast forward的设计和调试将变的简单,而NetChannel的应用层协议栈,无论在设计还是调试都将举步维艰。
实现NetChannel plus依赖于下面的关键技术:
1)零拷贝:大部分网卡支持DMA方式将包传输到内存[3],而linux内存映射避免了用户空间和内核空间的拷贝。
2)硬件中断:NAPI技术解决高负载下多中断的问题[3],上下文切换减少。
3)软中断:由于linux ksoft_irq具有较低的调度优先级[4],上下文切换减少。
4)锁:AppChannel 使用ring buffer结构,无需锁,而fast forward基本上是只读访问,RCU读锁极大地提高了性能。
5)高速缓存:大部分网卡将采用多队列技术,属于同一条流的包将进入同一个队列,加上MSI-X以及中断亲和技术,同一条流的包将在同一个core上处理,cache将实现本地化。
上述关键技术表明,尽管NetChannel plus依然是两个通信环,但是零拷贝,硬件中断,软中断,锁和高速缓存的问题并不是无法解决的。
4 结束语
将NetChannel plus将NetChannel架构的先进性和linux协议栈成熟性结合起来,充分利用UTM软硬件设计中涌现出的先进技术,克服两个通信环的缺陷,解决了NetChannel应用协议栈难以实现的问题,为UTM架构设计提供了一种可实现的方案。
[1]基于NetChannel技术的UTM架构设计 http://www.ecice06.com/qikan/manage/wenzhang/0811-53.pdf.
[2]Jacobson V.Speeding up Networking[Z].2006.
[3]Corbet J,Rubini A.Linux Device Driver[M].Nanjing:Dongnan University Press,2001.
[4]Daniel P.Unstanding linux kernel[M].Beijing:Power Press,2007.