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的值为可选的。 |
网友评论