一、概念
MARK和CONNMARK是Linux中iptables防火墻規則中的兩個重要目標,用于標記數據包以及連接。
-
MARK目標:
- MARK目標允許你為匹配的數據包設置一個32位的標記,這個標記可以在后續的規則中被使用。
- 通過MARK目標,你可以在數據包上打上一個標記,然后在后續的規則中通過條件匹配這個標記來進行進一步的處理。
- 例如,你可以使用MARK目標來標記特定類型的流量(如VoIP流量、視頻流量等),然后在后續的規則中基于這些標記來進行不同的處理,比如限速、優先級調整等。
-
CONNMARK目標:
- CONNMARK目標的作用是在連接跟蹤表中設置或修改連接的標記,而不僅僅是單個數據包的標記。
- 它通常用于在連接級別上對數據流進行標記,這樣可以跟蹤整個連接的狀態,并且在連接的生命周期內保持一致性。
- CONNMARK目標允許你基于連接的屬性(如源IP、目標端口等)來標記連接,然后在后續的規則中根據這些標記來進行相應的處理。
二、使用方法
2.1 MARK 的使用方法
MARK 目標用于給匹配的數據包添加一個特定的標記值。以下是一個基本的使用方法:
iptables -t mangle -A PREROUTING -s 源IP地址 -j MARK --set-mark 標記值
-t mangle:指定操作的表為 mangle 表,mangle 表用于數據包修改。-A PREROUTING:表示將規則添加到 PREROUTING 鏈中,即數據包進入路由之前的處理階段。-s 源IP地址:用于匹配數據包的源 IP 地址。-j MARK --set-mark 標記值:當數據包匹配規則時,使用 MARK 目標并設置標記值。
2.2 CONNMARK 的使用方法
CONNMARK 目標用于對連接進行標記,而不是對單個數據包。以下是一個基本的使用方法:
# 給特定連接的首次數據包標記
iptables -t mangle -A PREROUTING -s 源IP地址 -j CONNMARK --set-mark 連接標記值
# 在后續規則中使用連接標記
iptables -t mangle -A PREROUTING -m connmark --mark 連接標記值 -j ACCEPT
- 第一條規則將來自特定源 IP 地址的連接標記為指定的連接標記值。
- 第二條規則使用
-m connmark來匹配已經標記的連接,并執行相應的動作。