如今多核处理器的迅速发展为并行处理技术提供了广阔空间,我们在多核处理器的硬件平台上,可以利用并行处理来提升IPS性能,但实际上提升IPS性能取决于不IPS并行化方法及程度,不幸的是IPS软件的并行化远比硬件增加1个或几个物理内核要复杂得多,这涉及到操作系统并发工作的模式、流量的分担与负载、IPS引擎的并行检测、配置的同步与竞争控制、事件统计以及运行态调试等等问题。以下我们将对这些IPS并行化中的问题逐一探寻。
首先需要IPS系统软件(这里假定IPS系统是一个运行于应用层的程序,如果将IPS做为内核模块嵌入到操作系统中则需要考虑的问题会更多一些)的载体-操作系统本身支持并行化,也即操作系统有稳定的SMP版本。操作系统在多核处理器硬件平台上一般有两种构架,一种是SMP方式,也称为同构方式(见图:SMP方式示意图,以4核为例),另一种为AMP方式,也称为异构方式(见图:AMP方式示意图,以4核为例)。
SMP方式示意图
AMP方式示意图
SMP方式顾名思义就是将多个内核平等看待,每个内核运行的操作系统相同,且每个内核上都运行一套IPS系统,这样从数据接收、连接建立、数据检测到数据发送都是并发执行的,相当于多个IPS系统在同时运行。这种架构比较简洁,各个处理器内核负载均衡,可以全方位地提升IPS性能,特别是在测试单一性能指标时,由于所有内核都参与处理工作,往往可以获得比较好的表现。这种架构也有其固有缺陷,因为所有内核都运行相同的软件系统(包含操作系统和IPS系统),势必产生对共享资源(内存数据、文件描述符、I/O设备等)的争用。为处理并发与同步需要使用大量的锁机制,而这些锁的操作又影响了性能发挥,更严重的是随着内核数量的增多,并发与同步的消耗达到一定的量级,这时性能就不再增长甚至下降了。
AMP方式就是将多个内核区别看待,可以运行不同的操作系统也可以在相同的操作系统上运行不同的任务,各个处理器内核按照任务划分,各负其责,规避共享资源的竞争,做到“术有专攻”,从而提升IPS性能。完整的操作系统往往比较庞大,耗费资源较多,效率也较低。拿出几个物理内核,在其上建立一种简易的系统环境(有时候直接叫做“裸核”环境),在这个“洁净的空间”内运行单一任务(比如收发数据、模式匹配等)往往可以获得极高的性能,这是AMP方式的特点,也是其优势。另外一种方式,在相同的操作系统上运行不同的任务也是同样的机理,只不过更容易实现一些,相应的性能提升的效果也逊色一些。这种架构也有其缺陷,在测试单一性能指标时,因为特定功能只有有限的内核参与处理,往往性能不够理想。架构本身也比较复杂,需要仔细权衡各个内核的任务分担,否则会造成内核负载不均衡,影响性能发挥。
选择哪一种架构需要根据处理器硬件平台与IPS系统本身的特点来抉择,通常在硬件处理器内核比较少的情况下选择SMP架构,在需要将一大堆不可能并行化的“遗产”继承到产品中时只好选择AMP架构,如果已经使用了硬件内容加速,那么可以选择SMP架构,如果是新开发IPS产品,内核分工可以动态调整的AMP架构是不错的选择,但需要保证足够的技术储备和适当的人力投入。
在确定了工作模式后,就要考虑流量的分担与负载问题了,多个内核并行处理,它们共同的输入就是来自网络的数据流,如何将这些数据流“喂”给处理器内核呢?最简单的就是轮询方法,即将到达的数据依次交给等待处理的内核,各个内核平均分配,这对早期的基于单个数据包检测的IPS系统比较适合。现代的IPS系统功能丰富,不仅可以进行TCP流重组,还可以跟踪应用层协议和控制流量。但是在多个内核上并发地跟踪TCP状态机是个棘手的问题,实现难度也较大,所以出现了另外一种按照五元组分流的方法,即将同一个数据流分配到同一个内核上,保障一个数据流始终由一个内核处理。这种方式大大降低了IPS内部实现复杂度,虽然具有流量较小时负载不均衡的副作用,但从研发成本考虑还是可以接受的。
接下来就是对提升性能至关重要的IPS引擎的并行检测,IPS检测引擎的并发是提升性能的关键。这里的引擎主要指应用协议的识别和分析、攻击特征的匹配、策略的检查以及后续的数据处理。如果运行于应用层,可以将每个IPS引擎作为一个单独的进程对待,它们共用一份公共的攻击特征库,对各自的输入的数据流进行并行检测和处理,就好像多个引擎在同时工作。但是数据流之间有时候是相关的,比如一个应用层协议可以动态协商出它的一个子连接,当这个子连接分配到另外一个IPS进程上处理时,要想控制它就需要进行进程间通讯,这样引擎的独立性就被破坏了。同样在双机热备份的状态同步、应用层协议动态识别上也会遇到同样的困难。如果IPS作为一个内核模块运行于操作系统核心层,那么需要对所有可能产生竞争的共享资源进行并发访问控制,使其彻底并行化,除此之外可能没有什么更好的办法了。
配置问题是并发系统中一个棘手的问题,用户常常在系统运行过程中进行配置变更,而且总是希望这种变更后的配置能够即时生效。
在并发IPS系统中只有一份配置,配置的变化意味着所有的并行工作都要暂停下来,需要根据新的配置调整运行参数。运行时态频繁地调整配置不可避免地影响并发IPS系统性能,如果设计不好还会产生“停顿”,导致丢包。同样的,在IPS系统中各种统计数据(流量统计、事件统计、时间统计等)都需要实时地准确地显示到用户可视层面,多个引擎需要并发地对单一数据结果操作,如果简单地用锁规避竞争也会很大程度上影响并发IPS系统性能的提升。
一个系统的成熟和完善离不开调试,与基于单内核的系统相比,并发IPS系统的调试工具极度匮乏,调试手段也很不成熟。那些传统的强大的单步跟踪工具已经没有用武之地,就连简单的打印调试信息也需要特别小心,因为你需要先知道这个信息是哪个内核打印的才好定位问题。如果系统运行时死锁,那么整个系统或者IPS进程会被挂起,但留下的供你调试的线索却非常有限。总之,有四类问题比较关键:死机、内存泄漏、内存篡改和报文调试。这些问题影响并发IPS系统的稳定,当然也影响到性能发挥。
【编辑推荐】