[关键词] Linux 防火墙 RFC算法
一、Linux防火墙的内核机制
Linux内核从2.4版本开始设计实现了Netfilter框架,该框架使得网络协议代码和防火墙之间有了比较清晰的界限。Linux2.4内核防火墙的底层结构是Netfilter结构,位于Linux网络层和防火墙内核功能模块之间。
虽然Linux2.4内核中的防火墙是在IP层实现的,但它没有对2.4的内核网络结构造成破坏,因为Netfilter结构把防火墙对数据包的处理过程引入IP层,防火墙的代码与实现IP层的代码完全分离,使得防火墙与网络层在结构上很清晰;对防火墙的修改和功能扩充更加容易。
每一种协议都可以设定自己的防火墙。在Linux内核中是由firewall-Ps结构体定义的。firewall-ops可以为各种协议的防火墙提供统一的接口,每个协议可以对应多级防火墙,每个防火墙有各自的优先级,按照从高到低的优先级顺序可以将firewall-ps连接到Linux内核与防火墙接口的链表。当数据包经过IP层进行处理时,对相应的钩子函数链表中是否存在注册的HOOK函数进行检查,如果存在,各级防火墙会顺着其链表一一进行处理。
二、 RFC算法的查找过程
RFC算法被分为P个阶段 (Phase),每一个阶段是由可并行查找的散列表组成。每次查找结果的返回值都比内存数据索引值要小。操作如下:在第一个阶段 (Phase 0),将包头中F个字段分成许多个块,每个块被用来作为并行查找的索引。例如有七个相等的块(chunk),一个数据包的字段在内存中是怎样被划分的。每次查表的输出值被称为eqcID。其中存储 eqcID所需的比特数比索引值的比特数要小,即需要较少的bit。下一个阶段,每次用于查找散列映射表的索引值是由前几个阶段的查找结果按某种方式合并而成,并放入内存中。在最后阶段,所得到的结果就是与数据包相匹配的最佳规则标识符classID。
RFC算法是个通用性强、速度快的多维数据包分类算法,对规则的宽度和维数有较好的扩展性;在进行分类查找时,查找性能不受规则数量和规则特征的影响。 处于同一阶段 (Phase)的预处理表或索引交叉乘积表可以被并行地索引,并且这些表又是各自独立的。处于不同阶段的预处理表或索引交叉乘积表也能够互不干扰地并行进行索引。
算法的存储空间消耗会随规则集中规则数量的增加而增大,限制了算法的应用范围。由于索引交叉乘积表的长度等于各预处理表中等价类(eqID)数量的乘积,所以预处理表和索引交叉乘积表中eqID的数量与规则库的规则成正比,其中IPT表中总是存在着相同的eqID连续重复存储的问题。我们从表IPTI中可以看出,前8项中都存放了相同的eqID值。如果相同的元素过多会造成内存中存在大量的冗余信息。虽然在预处理表中也有这样的问题,但它所占空间非常小,如果想解决RFC算占用内存过大的问题,可以从减少索引交叉乘积表中连续相同元素的重复存储这方面进行研究。
三、 L1nox防火墙测试步骤
在生成防火墙的规则集和测试数据包之后,对RFC算法和CRFC算法在Linux防火墙进行功能测试,具体测试步骤如下:
(l)利用上面提到的规则集生成模块生成的过滤规则集,并将其导入到Linux防火墙中。
(2)利用数据包生成模块向Linux防火墙发送测试数据包,Linux防火墙收到数据包后对数据包进行处理,并且获取处理结果。
(3)对Linux防火墙测试数据包的处理结果被存储在了计时模块和存储计数模块中,方便后面对处理结果进行详细的分析。
(4)用RFC算法、CRFC算法替换防火墙中原有的线性搜索算法,重复上面的三步,用相同的方式进行测试,并记录测试结果。
(5)最后对计时模块和存储计数模块中记录的数据进行比较分析,证实改进后防火墙的正确性。
[参考文献]
[1]M.Smith,R.Hunt.Network security using NAT and NAPT.Networks 2002.10th IEEE International Conference on Augest 2002:355-360
[2] David Lee, Dong luo Chen, Rui bing Hao, Raymond E.Miller Jianping Wu,Xia Yin.Network Protocol System Monitoring- A Formal Approach with passive Testing.IEEE/ACM Transaetions on Networking,Vol.14, NO.2 April 2006.
[3] Mrdul Dixit,M.Barbadekar,Dr.B.V.Barbadekar.Paeket Classifieation Algorithms.Seoul Olympic Parktel, Seoul Korea:IEEE Internaltional Symposium on Industrial Eleetronies(ISIE2O09),July5-8,2009