netfilter学习总结一:规则结构表示及其内存布局

 

       最近对netfilter进行了研究,已经搞明白了其框架结构、运行流程、以及与iptables的交互流程包括规则设置,慢慢总结一下理解的知识,记录下来,加深理解,以防忘记。

另外,虽然我只是记录我的学习过程,以免忘记,而且不成体系,但是字段说明增加了结构体的重要字段在程序里的关键点的使用时机,这个是网上资料所没有的,网上资料只说明字段含义,从不说什么时候用,什么时候赋值,在哪里赋值,而这些信息是理解功能和源码必须要明白的。

1. netfilter规则组成

netfilter的每一条规则由结构体struct ipt_entry定义,规则包含三部分:

ip头信息及控制信息 struct ipt_ip,属于标准匹配信息

match匹配相关信息 struct xt_entry_match,属于扩展match信息,可以没有

target匹配成功时执行的动作相关信息 struct xt_entry_target,为扩展target信息可以没有,但是netfilter初始化时会设置默认策略,包含了标准target,即target必须只少有一个,以决定默认数据包走向。默认策略的设置代码还需要再看看。

2. 规则匹配结构体

头文件 linux/netfilter_ipv4/ip_tables.h

struct ipt_entry 定义如下:
/* This structure defines each of the firewall rules.  Consists of 3
   parts which are 1) general IP header stuff 2) match specific
   stuff 3) the target to perform if the rule matches */
struct ipt_entry {
    struct ipt_ip ip;     //标准匹配:ip头信息,源目的IP地址,掩码,网络接口等
                          //在匹配规则时先进行次标准匹配,作为参数传递到ip_packet_match
                          //函数进行匹配

    /* Mark with fields that we care about. */
    unsigned int nfcache;     //自己理解:匹配的字段,每一位表示一个字段
                              //查看iptables源码时,发现设置规则时会把命令行的字段也就是规则需
                              //要的字段,将其宏定义值安照位或运算设置到该变量

    /* Size of ipt_entry + matches */
    u_int16_t target_offset;  //target的偏移位置,获取和遍历target都根据该变量进行
                              
    /* Size of ipt_entry + matches + target */
    u_int16_t next_offset;    //一个完整的规则包含ipt_entry + matches + target三部分
                              //所以这三部分后就属于下一条规则ipt_entry的开始位置
                              //也就是说该变量表示下一个规则的偏移

    /* Back pointer */        
    unsigned int comefrom;    //也是在遍历规则时用,没仔细看细节

    /* Packet and byte counters. */
    struct xt_counters counters;   //计数器统计字节与包数,后续再细看

    /* The matches (if any), then the target. */
    unsigned char el
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种菜的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值