免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11276 | 回复: 22
打印 上一主题 下一主题

[网络管理] iptables/netfilter的效率问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-14 17:55 |只看该作者 |倒序浏览
做流量控制,打算用iptables+tc, 都已经开始了

结果今天被质疑iptables的效率

理由如下:

iptables 基于规则, 没有匹配上规则就会一直往下, 直到所有规则.

问题在于对于每一条规则, 包都要从ip头, tcp头或udp头, 一层层解析(或者说是指针偏移)

就是说前一次解析出的结果, 对 下一次没有任何意义!!!!!!

上头的建议就是希望从下至上的7层解析只做一次!

这我要如何反驳?

心想, 能设计iptables/netfilter的牛人应该考虑过这个问题,要不也不会选择这个方式

但能力有限,想不明白. 还望各位大虾指点迷经

论坛徽章:
0
2 [报告]
发表于 2006-09-14 19:26 |只看该作者
原帖由 tomorrow0530 于 2006-9-14 17:55 发表
做流量控制,打算用iptables+tc, 都已经开始了
结果今天被质疑iptables的效率
理由如下:
iptables 基于规则, 没有匹配上规则就会一直往下, 直到所有规则.
问题在于对于每一条规则, 包都要从ip头, tcp头或udp头, 一层层解析(或者说是指针偏移)
就是说前一次解析出的结果, 对 下一次没有任何意义!!!!!!
上头的建议就是希望从下至上的7层解析只做一次!
这我要如何反驳?
心想, 能设计iptables/netfilter的牛人应该考虑过这个问题,要不也不会选择这个方式
但能力有限,想不明白. 还望各位大虾指点迷经


为何 iptables 的 rule 都会先写这行叙述在前面不是没道理的

  1. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
复制代码


了解一下 ESTABLISHED 就不会被该问题困住了.

另外若是跑的 iptables rule 很长的话, 一般要搭配 -N 建立不同的 chain 来跳跃呼叫使用, 这样效率才会好.

比方常见一般例子说明:


  1. iptables -A INPUT -p tcp -s 192.168.1.1 -p tcp --dport 25 -j DROP
  2. iptables -A INPUT -p tcp -s 192.168.1.10 -p tcp --dport 25 -j DROP
  3. iptables -A INPUT -p tcp -s 192.168.1.20 -p tcp --dport 25 -j DROP
  4. iptables -A INPUT -p tcp -s 192.168.1.30 -p tcp --dport 25 -j DROP
复制代码


这个通常可以改成:


  1. iptables -N BAN_INPUT_PORT25
  2. iptables -A BAN_INPUT_PORT25 -p tcp -s 192.168.1.1 -j DROP
  3. iptables -A BAN_INPUT_PORT25 -p tcp -s 192.168.1.10 -j DROP
  4. iptables -A BAN_INPUT_PORT25 -p tcp -s 192.168.1.20 -j DROP
  5. iptables -A BAN_INPUT_PORT25 -p tcp -s 192.168.1.30 -j DROP

  6. iptables -A INPUT -p tcp --dport 25 -j BAN_INPUT_PORT25
复制代码


==

[ 本帖最后由 kenduest 于 2006-9-14 20:37 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-09-15 10:14 |只看该作者
1000条以内的规则效率可以不用考虑

论坛徽章:
0
4 [报告]
发表于 2006-09-15 10:17 |只看该作者
原帖由 depthblue_xsc 于 2006-9-15 10:14 发表
1000条以内的规则效率可以不用考虑


这话说得太勉强了吧。。。我觉得还是2楼的朋友的做法比较可取

论坛徽章:
0
5 [报告]
发表于 2006-09-15 12:03 |只看该作者
对于动态添加的规则,怎么搭配 -N 建立不同的 chain ?

更广一点就是动态添加的规则如何管理?Netfilter仅仅只是顺序遍历所有的规则,而且没有优先级的概念,而规则的动态加入,我们怎样才能有序的组合?

另外:
net/ipv4/netfilter/Ip_tables.c中的struct ipt_table_info中       

/* ipt_entry tables: one per CPU */
char entries[0] ____cacheline_aligned;
是说一个CPU中只能有存在一个规则表么?

论坛徽章:
0
6 [报告]
发表于 2006-09-15 13:08 |只看该作者
2楼说的的确有道理

但是如果只做防火墙,要不ACCEPT,要不DROP
用state特别方便
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

但如果做流量控制,用iptables是希望用set MARK的功能
tc根据MARK值分类
但不能对所有ESTABLISHED,RELATED 打上同一标记啊!!!!

论坛徽章:
0
7 [报告]
发表于 2006-09-15 13:10 |只看该作者
原帖由 depthblue_xsc 于 2006-9-15 10:14 发表
1000条以内的规则效率可以不用考虑


我觉得楼主的说法应该从三个方面来考虑,而3楼的这种说法是错误的。

1、Netfilter的效率的确是不咋地,这个要承认,但是楼主对使用规则搭配等问题乎没有搞清楚,2楼的正解!!

2、如果在正确的规则搭配上,还要追求效率,Netfilter.org有一个高性能补丁,可以大幅地提高效率(其网站上还有前后的性能测试图,可以看到Netfilter在小包20条规则后就开始严重丢包了,所以我才说3楼说法是错的)!!!
http://www.netfilter.org/projects/hipac/index.html

3、像楼主的这种特殊应用——忽略后面的包的三四层,只关心七层过滤部份,以提高效率,我觉得只要自己定制方能达到最理想的效率,也就是说,自己挂Netfilter Hook,自己写代码,脱离Netilter的规则过滤!!!

[ 本帖最后由 独孤九贱 于 2006-9-15 13:12 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-09-15 13:17 |只看该作者
原帖由 独孤九贱 于 2006-9-15 13:10 发表


我觉得楼主的说法应该从三个方面来考虑,而3楼的这种说法是错误的。

1、Netfilter的效率的确是不咋地,这个要承认,但是楼主对使用规则搭配等问题乎没有搞清楚,2楼的正解!!

2、如果在正确的规则搭配 ...


谢谢。。。第2条建议对我有用,我去看看去

论坛徽章:
0
9 [报告]
发表于 2006-09-15 15:23 |只看该作者

回复 7楼 独孤九贱 的帖子

像楼主的这种特殊应用——忽略后面的包的三四层,只关心七层过滤部份,以提高效率


我的本意是,每一个包只做一次从第一层到第七层的解析
并没有忽略连接后 的包的三四层

忽略了,怎么知道第七层是什么协议阿?




还有关于nf-hipac,还有没有多点资料
没google出什么结果

[ 本帖最后由 tomorrow0530 于 2006-9-15 15:25 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-09-15 15:41 |只看该作者
原帖由 tomorrow0530 于 2006-9-15 15:23 发表
像楼主的这种特殊应用——忽略后面的包的三四层,只关心七层过滤部份,以提高效率


我的本意是,每一个包只做一次从第一层到第七层的解析
并没有忽略连接后 的包的三四层

忽略了,怎么知道第七层是什么协 ...

除了三方插件,netfilter不存在拆包的问题,全是内核网络栈拆的,我不明白你的意思,而且一个你讲“每一个包只做一次从第一层到第七层的解析”,不会还让为Netfilter一个包做了多次拆包的解析吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP