iptables中的MARK用法

1. MARK作用

给特定的数据包打上标记,配合TC做【QOS流量限制】 或 【策略路由实现】。

2. MARK相关的模块
libxt_mark.so
libxt_connmark.so
libxt_MARK.so
libxt_CONNMARK.so
libxt_SECMARK.so
libxt_CONNSECMARK.so

小写是匹配模块,大写是标记模块。
带CONN的是标记链接,不带的是标记数据包。
带SEC的是处理IPSEC数据,不带的是处理一般数据。

-m 匹配
-m mark --mark value[/mask]
如果指定了掩码,就先把mark值和掩码取逻辑与,然后再和包的mark值比较。
-j 标记
-j MARK 标记数据包
--set-mark #标记数据包
-j CNNMARK 标记链接
--set-mark #标记链接
--save-mark #保存数据包中的MARK到链接中
--restore-mark #将链接中的MARK设置到同一链接的其它数据包中
示例
# 数据包标记为50
iptables -t mangle -A PREROUTING -j MARK --set-mark 50
# 匹配标记为50的数据包,并保存数据包中的标记设置到链接中
iptables -t mangle -A PREROUTING -m mark --mark 50 -j CONNMARK --save-mark

# 链接标记为50
iptables -t mangle -A PREROUTING -j CONNMARK --set-mark 50
# 匹配链接标记为50数据包,并将链接中的标记设置到数据包中
iptables -t mangle -A PREROUTING -m connmark --mark 50 -j CONNMARK --restore-mark
3. 应用

–restore-mark 与 --set-mark 和 --save-mark 进行配合,完成给链接打标记,进而为链接上的所有数据包打标记。

iptables -A POSTROUTING -t mangle -j CONNMARK --restore-mark
iptables -A POSTROUTING -t mangle -m mark ! --mark 0 -j ACCEPT
iptables -A POSTROUTING -t mangle -m mark --mark 0 -p tcp --dport 21 -j MARK --set-mark 1
iptables -A POSTROUTING -t mangle -m mark --mark 0 -p tcp --dport 80 -j MARK --set-mark 2
iptables -A POSTROUTING -t mangle -m mark --mark 0 -p tcp -j MARK --set-mark 3 
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark
  1. 规则1,完成了将链接跟踪上的标记记录到该连接上的每一个数据包中。
  2. 规则2,匹配数据包标记不为0的数据包,直接ACCEPT。如果为0,则交由后面的规则进行匹配并打标记。
    如果一条链接的第1个数据包经过规则1后,由于ct->mark为0,所以其数据包标记skb->nfmark也为0,就需要进行后面规则的匹配。
  3. 规则3~5,按照匹配选项对符合规则的数据包打上不同的标记。
  4. 规则6,将数据包上的标记记录到链接跟踪上。
    当属于该链接的下一个数据包走到规则1后,就会被打上标记,命中第2条规则,直接ACCEPT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值