免费注册 查看新帖 |

Chinaunix

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

【iptables交流贴】iptables执行的流程分析 [复制链接]

论坛徽章:
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
31 [报告]
发表于 2008-08-06 17:43 |只看该作者
原帖由 songpure520 于 2008-8-6 17:40 发表
学习了!!貌似看的不是很明白!!看来要多看几遍啊!


惭愧,可能很多地方写的不是很清楚。

论坛徽章:
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
32 [报告]
发表于 2008-08-06 17:45 |只看该作者
原帖由 jaycu 于 2008-8-6 17:36 发表


好的,谢谢,我再好好看看


你可以看一看iptables应用代码中添加一条规则时,有多个match的话,程序是如何处理的

论坛徽章:
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
33 [报告]
发表于 2008-08-06 17:50 |只看该作者
原帖由 jaycu 于 2008-8-6 17:36 发表


好的,谢谢,我再好好看看



看一下iptables的应用程序,iptables.c中generate_entry函数,应该可以解答你的问题:
  1. static struct ipt_entry *
  2. generate_entry(const struct ipt_entry *fw,
  3.                struct iptables_match *matches,
  4.                struct ipt_entry_target *target)
  5. {
  6.         unsigned int size;
  7.         struct iptables_match *m;
  8.         struct ipt_entry *e;

  9.         size = sizeof(struct ipt_entry);
  10.         for (m = matches; m; m = m->next) {
  11.                 if (!m->used)
  12.                         continue;

  13.                 size += m->m->u.match_size;
  14.         }

  15.         e = fw_malloc(size + target->u.target_size);
  16.         *e = *fw;
  17.         e->target_offset = size;
  18.         e->next_offset = size + target->u.target_size;

  19.         size = 0;
  20.         for (m = matches; m; m = m->next) {
  21.                 if (!m->used)
  22.                         continue;

  23.                 memcpy(e->elems + size, m->m, m->m->u.match_size);
  24.                 size += m->m->u.match_size;
  25.         }
  26.         memcpy(e->elems + size, target, target->u.target_size);

  27.         return e;
  28. }
复制代码

论坛徽章:
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
34 [报告]
发表于 2008-08-06 17:54 |只看该作者
当你添加一条规则是,解析完命令行,以及相关的检测,就会通过该函数生成一个规则项,那么该函数会根据规则中的相应信息,设置规则的target_offset, next_offset等。

最后该规则经过处理后,通过setsockopt下载到内核中。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
35 [报告]
发表于 2008-08-06 17:56 |只看该作者
原帖由 jaycu 于 2008-8-6 16:24 发表
Godbach 兄,我有个关于netfilter的问题想请教你。就是netfilter中的规则ipt_entry和ipt_entry_match是如何联系在一起的?
      首先在ipt_do_table函数中对sk_buff依照规则ipt_entry进行匹配match,然后调用 ...


entry,match和target是filter表最难理解的几个地方。首先,需要理解的是,一个entry对应一个match,一个match对应一个或者多个target。match是通过访问entry的偏移地址来访问的,target紧接在match后面。我现在手上没有代码,不能结合代码来阐述这个问题。但这条线必须要认识清楚。

论坛徽章:
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
36 [报告]
发表于 2008-08-06 18:00 |只看该作者
原帖由 dreamice 于 2008-8-6 17:56 发表


entry,match和target是filter表最难理解的几个地方。首先,需要理解的是,一个entry对应一个match,一个match对应一个或者多个target。match是通过访问entry的偏移地址来访问的,target紧接在match后面。我 ...



一个entry也可以一个标准match,然后还可能有多个扩展match。
所以一条规则的大小一般是sizeof(ipt_entry)+n * match + target

[ 本帖最后由 Godbach 于 2008-8-6 18:03 编辑 ]

论坛徽章:
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
37 [报告]
发表于 2008-08-06 18:03 |只看该作者
标准match即struct ipt_entry结构中的struct ipt_ip结构体

论坛徽章:
0
38 [报告]
发表于 2008-08-06 21:41 |只看该作者
好东西,顶上去.有机会好好看看了

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
39 [报告]
发表于 2008-08-06 22:59 |只看该作者

回复 #37 Godbach 的帖子

不好意思,刚好说反了,多个match和一个target。

论坛徽章:
0
40 [报告]
发表于 2008-08-06 23:41 |只看该作者
好贴,谢谢LZ



:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP