APP下载

Netfilter/Iptables性能优化探究

2013-09-26孙爱爱

电子测试 2013年21期
关键词:报文数据包防火墙

孙爱爱

(武汉邮电科学研究院,武汉 430074)

0 引言

防火墙的功能是限制非法流量,保护内网。看一个防火墙是否成功,应该从它是不是瓶颈来考虑,所以避免防火墙成为瓶颈就需要通过提高它的性能来解决。iptables主要通过各个表中的有序规则链对网络数据包进行过滤和筛选,从而有效抵制网络入侵与攻击[1]。本文先对iptables的四个表五个链以及对经过iptables的数据包的流程作简要的分析,然后提出几种简单的方法来提高防火墙的性能。

1 对iptables的简单分析

1.1 iptables四个表五个链的关系

netfilter/iptables IP信息包过滤系统是由netfilter与iptables两个组件构成的。netfilter组件属于内核的一部分,包含了实现内核过滤和处理信息包的规则集。iptables组件是一种被称作用户空间的工具。它使处理信息包的过滤表中的规则变得容易。

iptables包含四个表,五个链。表和链实际上是netfilter的两个维度。四个表的处理优先级从高到低依次是 raw、mangle、nat、filter。五条链分别是 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

Filter表,是默认的表,它包括INPUT链、OUTPUT链以及FORWARD链。Nat表主要是做网络地址转换,它有三种内建链,PREROUTING链通常用于DNAT;POSTROUTING会通过SNAT和MASQUERADE两种方式转换源IP地址;OUTPUT是处理本机产生的数据包。Mangle表由这包含了这五条链,可以对特定的数据包进行修改或者给数据包附上一些额外的数据,以达到路由控制和流量控制等。Raw表用于处理异常,优先级最高,包括PREROUTING链和OUTPUT链。

1.2 经过iptables的数据包的流程分析

由图1可以看出,经过iptables的数据包的基本步骤如图1:

数据包到达网络接口,比如eth0,首先进入raw表的PREROUTING链,该链的作用是赶在连接跟踪之前处理数据,如果进行了连接跟踪,则在此处理;经过IP校验后,首先经过mangle表中的PREROUTING链,在此可以修改数据包,接着进入nat表的PREROUTING链,在此可以做DNAT,但不要做过滤;再经过一次路由查找,决定该数据包是给本地主机还是要转发。若是给本地的主机,则进入mangle表的INPUT链,这里是在路由之后,交给本地主机之前,可以对数据包进行一些相应的修改,接着进入Filter表的INPUT链,在这里可以对流入的所有数据包进行过滤,无论数据包来自哪个网络接口,经过这些处理后再传递给上层协议。如果数据包需要转发,则发给mangle表的FORWARD链的和Filter表的FORWARD链对该数据包进行相应的处理;本机网络层以上各层产生的数据包在依次通过mangle表、nat表和filter表的OUTPUT链后,再通过路由选择一次;要发送的数据包,都一定要经过mangle表的POSTROUTING链和nat表的POSTROUTING链进行处理。

2 Netfilter/Iptables性能优化

在防火墙中,数据包所流经的规则和数据链是由其来源、目的地址等属性决定的,只要数据包匹配了其中一条规则,过滤就会结束,否则会通过整个规则链,再按默认的规则来处理该包。经过一次不匹配的规则至少相当于一次比较。由于netfilter/iptables有大量的表和链,经过的规则过多,会显著影响其性能。让数据包尽可能少的经过netfilter/iptables中的表和链是优化防火墙的最终要求,理想情况下数据包能够达到以线速进行传送。

2.1 未经过DNAT的报文过滤规则优化

一般过滤一类报文,会在默认的filter表中过滤,但是这些报文在到达filter表的FORWARD链之前,由图1可以看到它会首先经过除filter表之外的其它表的某些链的所有规则,这会严重影响防火墙的过滤性能[4]。这种情况下,可以将filter表中的某些过滤规则前移到raw表或mangle表。

iptables -A FORWARD -d 192.168.2.0/24 -j DROP修改为

iptables -t raw -A PREROUTING -d 192.168.2.0/24 -j DROP

2.2 经过DNAT的报文过滤规则优化

对于做了DNAT的报文,例如:

iptables -t nat -A PREROUTING -p tcp-d 111.173.99.38 --dport 80 -j DNAT --to 192.168.1.20:8080

由于nat表的PREROUTING链在filter表的INPUT链和FORWARD链之前,此时报文在filter表过滤时,已经做了DNAT。此时,可以考虑将过滤的规则前移至raw表的PREROUTING链,由于nat表的PREROUTING链在raw表的PREROUTING链之后,因此在将规则前移到raw表的PREROUTING链时,要考虑将规则中的地址作相应的转换,

iptables -A FORWARD -p tcp -s 111.173.99.40 -d 192.168.1.20 --dport 8080 -j DROP 修改为

iptables -t raw -A PREROUTING -p tcp -s 111.173.99.40 -d 111.173.99.38 -dport 80 -j DROP ,这两者的效果是一样的,但是由于过滤规则提到了raw表之前,此时转发效率得到了提高。

2.3 用户自定义规则链的优化

iptables的规则匹配是按顺序来匹配的,规则的数量越多,效率就越低。iptables允许用户自己定义一些规则链,在匹配集的基础上,目标能够向外扩展或中转到用户自己定义规则链上。这会有两种情况存在,若是在用户自定义链上规则没有匹配成功,则在遍历了用户自定义规则后,控制会被转回到调用链,继续在调用链的下一规则上进行相应的匹配;若是在自定义规则链上规则匹配成功了,则会对数据包采取相应的行动,这样控制就不会回到调用链了,这样就大大减少了比较次数。

2.4 根据UDP与TCP协议的特点调整规则的位置

很多internet的服务程序可能用的是TCP协议,而UDP协议是一种非常简单的协议,它是基于数据包收发的协议,所以基于该协议的数据包在经过TCP协议的规则链时,是不会使系统的负担明显加重[5],所以可以将TCP所有规则放在UDP规则之后。

2.5 在防火墙规则链的后端放置ICMP规则

由于ICMP数据包是一种发送频率是相对较低的数据包,它里面只包含了少量的控制和状态信息。并且只有Echo-Request ICMP数据包为了应对某种异常出站行为总是发送控制消息或者状态消息的数据包。所以应该在防火墙规则后端放置ICMP协议。

3 小结

通过改进,可以通过移动防火墙规则在iptables表中的位置,或者用户自定义规则链,或者是根据一些规则的特点将它放置在防火墙规则之前或之后的方法来提高防火墙的性能。

[1] 王相林, 沈清姿. 高效的iptables规则集管理机制的研究与实现[J]. 杭州电子科技大学学报, 2011(6):59-62.

[2] 周增国, 李忠明. Linux平台下Netfilter/Iptables包过滤防火墙的研究与应用[J]. 网络安全技术与应用 , 2008(1):49-50.

[3] 赵跃华,周万胜.防火墙过滤规则动态生成方案设计[J]. 计算机工程 ,2012, 38(2):135-137,140.

[4] 刘勇,苏军.Netfilter/Iptables防火墙的运行机制分析与性能优化[J].科技创新论坛, 2012(6):188.

[5] 吴延卯.iptables防火墙性能优化研究[J].计算机与现代化 ,2012(9):106-108.

猜你喜欢

报文数据包防火墙
基于J1939 协议多包报文的时序研究及应用
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
CTCS-2级报文数据管理需求分析和实现
构建防控金融风险“防火墙”
浅析反驳类报文要点
SmartSniff
ATS与列车通信报文分析
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事