Netfilter CONNMARK用法及分析(二)-- 内核代码分析
本文着重分析内核中CONNMARK的实现,同时还包括MARK的match和target模块的实现。因为CONNMARK模块通常是和MARK模块搭配使用的。
1. CONNMARK及相关模块的选项
这里先列出CONNMARK、MARK和mark模块的iptables命令行的选项,随后我们再逐一分析各个模块的内核实现。iptables版本为v1.3.5。
(1)CONNMARK target的选项
选项 功能
--set-mark value[/mask] 给链接跟踪记录打标记。
--save-mark [--mask mask] 将数据包上的标记值记录到链接跟踪记录上。
--restore-mark [--mask mask] 重新设置数据包的nfmark值。
(2)MARK target 的选项
选项 功能
--set-mark value 设置数据包的nfmark值。
--and-mark value 数据包的nfmark值和value进行按位与运算。
--or-mark value 数据包的nfmark值和value进行按或与运算。
(3)MARK match的选项
选项 功能
[!] --mark value[/mask] 数据包的nfmark值与value进行匹配,其中mask的值为可选的。
其中CONNMARK和MARK match中都有mask选项,这个主要用来指定给出value值中哪几位是需要设置的。通常,如果我们不指定mask的话,其值会被默认初始为0xFFFFFFFFUL。
2. MARK target的内核实现
我这里分析的内核源码版本是2.6.18,该模块的代码见文件xt_MARK.c,其核心的target实现代码如下: