免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 独孤九贱
打印 上一主题 下一主题

iptables 源码分析 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2005-12-07 10:53 |显示全部楼层
iptables 仅仅是USER空间的一个改变(添加,删除等操作)KERNEL中的规则表的SHELL。

规则一旦建立,真正起防火墙作用的东西都是内核中的代码,和iptables程序就没有关系了。

论坛徽章:
0
2 [报告]
发表于 2005-12-07 13:37 |显示全部楼层
对于iptables来说,USER mode的IPTABLES和KERNEL的NETFILTER不存在内存共享和LOCK问题。
USER 和 KERNEL 通信就是通过 SET(GET)SOCKOPT实现的。
USER 得到的TABLES是在USER 空间的一个COPY,而不是内核那个TABLE,连格式也是不一样的。

论坛徽章:
0
3 [报告]
发表于 2005-12-07 15:38 |显示全部楼层
To platinum, 我恰好研究过iptalbes, 所以略知道一点。看你明白的其他那么多我一点也不知道的问题,自己也感觉惭愧。

To JiuJian,
是的。所以规则太多了(比如 大于大于1000)就十分慢了。这个问题有人贴过。

论坛徽章:
0
4 [报告]
发表于 2005-12-07 15:43 |显示全部楼层
我说的“不存在LOCK问题”是指在iptables user 程序中不用lock,
在setsockopt 的内核代码中要修改 kernel中的table必须lock.

论坛徽章:
0
5 [报告]
发表于 2005-12-07 16:12 |显示全部楼层
To Jiu3Jian4,

我没有研究过IPTALBES code, 仅仅看过KERNEL的部分。

论坛徽章:
0
6 [报告]
发表于 2005-12-08 13:53 |显示全部楼层
内核的netfilter table基本是一个空间上连续的分为几个区域(TABLES)的ARRAY结构,每个区域是一个table, table的每一个项是一个规则。这些在空间上是连续的。ARRAY的大小不等,table的每一个项大小也不同,因为规则复杂程度不同。
次项的开始地址 + 长度 == 下一个项的开始。

规则的比较匹配是用注册函数指针在项中。所以匹配就是调用相应的函数。有一些built-in函数,比如比较ip地址port等。其他的靠register.

内核的table和用户getsockopt得到的表的格式不完全相同。

netfilter匹配规则时,这种数据结构的速度还可以。但设置时就十分慢。因为插入,删除等很费力。

我看代码后的理解。不十分精确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP