iptable的mark功能可以用于标记网络数据包,用于标记数据包。在一些不同的table或者chain之间需要协同处理某一个数据包时尤其有用。


下面介绍iptables mark简单的用法:


  • -j MARK //-j代表动作这里代表要执行mark操作
  • -m mark //-m代表匹配mark
  • –mark xxx/yyy //xxx代表要匹配的mark的值,yyy代表掩码,如果要完全匹配可以省略掉掩码,不过一般不会直接整个匹配,因为可能一个系统中很多模块都需要打mark,所以一般用掩码来取得某几位

//打标记
iptables -t mangle -A PREROUTING -j MARK --set-mark 33
//匹配标记
iptables -t nat -A PREROUTING -m mark --mark 33 -j ACCEPT
//or-mark
iptables -t mangle -A PREROUTING -j MARK --or-mark 0x400
//掩码匹配
iptables -t nat -A PREROUTING -m mark --mark 0x400/0x400 -j ACCEPT
1

CONNMARK target的选项

选项

功能

–set-mark value[/mask]

给链接跟踪记录打标记。

–save-mark [–mask mask]

将数据包上的标记值记录到链接跟踪记录上。

–restore-mark [–mask mask]

重新设置数据包的nfmark值。

iptables -t mangle -A QOS_MARK_FORWARD_eth1 -j CONNMARK --restore-mark --nfmask 0xfffff --ctmask 0xfffff

iptables -t mangle -A QOS_MARK_FORWARD_eth1 -m mark --mark 0x0/0xfffff -j QOS_RULES_FORWARD_eth1

iptables -t mangle -A QOS_RULES_FORWARD_eth1 -j CONNMARK --save-mark --nfmask 0xfffff --ctmask 0xfffff

MARK target 的选项

选项

功能

–set-mark value

设置数据包的nfmark值。

–and-mark value

数据包的nfmark值和value进行按位与运算。

–or-mark value

数据包的nfmark值和value进行按或与运算。

iptables -t mangle -A POSTROUTING -m iprange --src-range 192.168.0.2-192.168.0.200 -j MARK --or-mark 0x1

–or-mark 用于以或的关系设置mark,因为mark可能提前被提前设置过,如之前的mark为0x0100,通过–or-mark设置0x1后mark为0x0101,不会影响之前设置的mark,注意匹配是用掩码按位匹配。

而如果是–set-mark,会清楚之前的mark 0x0100 --set-mark(0x1) = 0x0001

MARK match的选项

选项

功能

[!] --mark value[/mask]

数据包的nfmark值与value进行匹配,其中mask的值为可选的。