免费注册 查看新帖 |

Chinaunix

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

Iptables/Netfilter系统表(filter,nat,mangle)的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-18 15:31 |只看该作者 |倒序浏览
在下今日在学习Iptables/Netfilter相关的知识,作为本科毕设只用。
  但是在学习的过程中遇到了一些疑问,想请教各位大牛,希望能帮助解答:
  读了很多关于数据包在协议栈以及Netfilter当中处理流程的资料
  
  像如上资料说的,但是分析这个处理过程,不知Netfilter框架中的三张系统表(filter,nat,mangle表)是在那里起的作用,或者是三张表存在的意义是什么呢?
  到目前为止,我浅薄的理解是:协议栈在每个钩子处交给Netfilter处理,而Netfilter只是将数据包和每个规则相比对(match),比对上了则进行相应的target,没有比对上则进行下一条规则的匹配,直到最后一条位置。如果按照如上思路,和三张表貌似没有太多的关系啊?请大牛解决

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2011-01-18 16:00 |只看该作者
规则-表-链 这三者的关系你要搞清楚。
规则是存储在表中的。
iptables -t tables
这个命令是要指定使用哪张表的,不同的表具有不同的功能。
我们通常写规则,没有带这个 -t 选项,是因为默认表是 filter。

论坛徽章:
0
3 [报告]
发表于 2011-01-18 17:44 |只看该作者
规则-表-链 这三者的关系你要搞清楚。
规则是存储在表中的。
iptables -t tables
这个命令是要指定使用 ...
Godbach 发表于 2011-01-18 16:00


谢谢哥德巴赫大牛,再次受教了~

论坛徽章:
0
4 [报告]
发表于 2011-01-18 18:46 |只看该作者
内核实现时,这3个表有差异吗?
static struct nf_hook_ops nf_nat_ops[] __read_mostly = {
        /* Before packet filtering, change destination */
        {
                .hook                = nf_nat_in,
                .owner                = THIS_MODULE,
                .pf                = NFPROTO_IPV4,
                .hooknum        = NF_INET_PRE_ROUTING,
                .priority        = NF_IP_PRI_NAT_DST,
        },

从内核nf_hook_ops的定义来看,我觉得是没有差异的。
换句话说,内核并不知道这个表。


规则-表-链 这三者的关系你要搞清楚。
规则是存储在表中的。
iptables -t tables
这个命令是要指定使用 ...
Godbach 发表于 2011-01-18 16:00

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2011-01-18 19:16 |只看该作者
内核实现时,这3个表有差异吗?
static struct nf_hook_ops nf_nat_ops[] __read_mostly = {
        /* Before packet filtering, change destination */
        {
                .hook                = nf_nat_in,
                .owner                = THIS_MODULE,
                .pf                = NFPROTO_IPV4,
                .hooknum        = NF_INET_PRE_ROUTING,
                .priority        = NF_IP_PRI_NAT_DST,
        },

从内核nf_hook_ops的定义来看,我觉得是没有差异的。
换句话说,内核并不知道这个表。

这个数据结构主要是定义NF 的 hook 函数及相关属性,并不能理解为和表有直接关系。

数据包进入系统后,按照hook 函数的优先级,被各个 hook 函数处理。每个hook函数内部有自己的处理机制。对于 nat 的hook函数,那么就去就是执行 nat 的相关动作,这个时候就要查找 nat 表在这个hook 点上的规则,进行匹配,执行动作。

论坛徽章:
0
6 [报告]
发表于 2011-07-13 09:21 |只看该作者
楼主的截图是哪部大作上面的啊? 小弟新手,跪求一下。

论坛徽章:
0
7 [报告]
发表于 2011-07-13 14:42 |只看该作者
nf_nat_in->nf_nat_fn->nf_nat_rule_find中语句:
ret = ipt_do_table(skb, hooknum, in, out, net->ipv4.nat_table);
明确指定是nat_table。

论坛徽章:
0
8 [报告]
发表于 2011-07-13 14:47 |只看该作者
不同的hook在调用ipt_do_table是指定其对应的table.然后针对表中的规则去match(一条规则可能有多个match,即需要符合多个条件),若match成功则执行该规则的target。

论坛徽章:
0
9 [报告]
发表于 2011-11-15 16:53 |只看该作者
最近在看netfilter的东东,太复杂了  

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
10 [报告]
发表于 2011-11-16 08:16 |只看该作者
回复 10# hi.stao
其实理解netfilter关键是理清楚数据包在内核的流程。建议先了解一下内核接收和发送数据包的大体流程,结合起来看netfilter会比较好理解的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP