当前位置: 代码迷 >> 综合 >> Linux netfilter 模块优先级
  详细解决方案

Linux netfilter 模块优先级

热度:25   发布时间:2023-12-10 17:22:02.0

netfilter机制就不详述了,只想纪录一下netfilter模块匹配顺序。

比如下面的hook结构:

struct nf_hook_ops my_hook = {
    .hook = hook_func,
    .hooknum = NF_INET_PRE_ROUTING,  
    .pf = PF_INET,
    .priority = NF_IP_PRI_FIRST,
};

优先级定义为:NF_IP_PRI_FIRST,

如果有两个以上的模块都声明自己是NF_IP_PRI_FIRST,那么谁先?谁后呢?

加载模块的顺序为:

    insmod myhook1

    insmod myhook2

经实测,优先级匹配顺序类似队列的FIFO模式,先到先得,实际是myhook1先处理,

如果myhook1返回NF_ACCEPT,myhook2才能获取数据包,

myhook1返回NF_STOP或NF_DROP,myhook2都获取不到包。

 

类似iptables -A的加载顺序,后来的规则追加在后面,是否能执行取决于前面规则的执行结果。

iptables -I模式正好相反,是类似“栈”的模式,后进先得,总是把规则插入到匹配链的最前面。