如何使用 conntrack 將來自未知 MAC 位址的傳入 iptables 請求標記為 99

如何使用 conntrack 將來自未知 MAC 位址的傳入 iptables 請求標記為 99

我的 iptables 規則運行了多年,沒有發生任何事件,但在允許所有受信任的 MAC 存取權之後:

/sbin/iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT

我正在嘗試標記其他 mac 位址,例如:

/sbin/iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99

但是當我現在嘗試通過這樣做來讀取該地址時,
conntrack -L | grep "src=10.1.1.234"
我在任何地方都看不到我未知的 10.1.1.234 freeloader...
但是我想繼續在iptables 中通過以下方式將我的freeloader 轉移到登錄頁面

/sbin/iptables -t filter -A FORWARD -m mark --mark 99 -j DROP```  
And obviously it doesn't work because I can't even see it from my conntrack listing.  
What am I doing wrong here..?

答案1

之間有一個區別包包馬克,又名只是標記,防火牆標記或者弗瓦馬克,以及一個 conntrack 入口標記,又名CT標記,連接標記或者康馬克:前者附在資料包上磁碟緩衝區,後者附加到繼續追蹤條目。有明顯的iptables -切斯柏油-得到對於兩者,包括方法將標記從資料包傳遞到連線條目或者從連接入口到資料包

這裡不需要使用這個標記連線對於這種情況,它conntrack -L根本不是顯示丟棄的資料包的正確工具(請參閱最後一段)。使用該iptables-nft變體時,查看標記資料包以進行調試的最簡單方法(否則僅使用-j LOG會在其日誌中添加資料包的標記)是跟踪它們並用於xtables-monitor --trace顯示它們的命運(iptables-legacy會將其發送到內核日誌,並且可能很容易淹沒日誌,此外它不能很好地與網路命名空間配合:這是 -legacy 和 -nft 變體之間罕見的不相容更改)。

一個可能的例子:

iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
iptables -A PREROUTING -t mangle -m mark --mark 99 -j TRACE

[...]

iptables -A FORWARD -m mark --mark 99 -j DROP

現在可以非常詳細地追蹤-j TRACE和之間所有此類標記資料包的詳細命運-j DROP(或加上這些選定的少數資料包的所有進一步處理):-j ACCEPT

xtables-monitor --trace

為了限制詳細程度,可以透過更改規則來僅追蹤開始新串流的資料包,TRACE如下所示:

iptables -A PREROUTING -t mangle -m mark --mark 99 -m conntrack --ctstate NEW -j TRACE

另外:此類流的第一個資料包確實會觸發創建連線通常在事件模式下使用 可見的條目(即使沒有標記)conntrack -E -p tcp --dport 80。但是當這個資料包被丟棄時,暫定的 conntrack 條目永遠不會確認的且該事件永遠不會提供給conntrack.雖然它在命令中不可見,但在刪除之前conntrack在規則中仍然可見。-m conntrack --ctproto tcp --ctorigdstport 80任何進一步的重試都將再次成為第一個資料包,它將建立一個臨時條目,由於資料包被丟棄等原因,該條目不會被確認。

因此conntrack只能用於顯示第一個資料包未被丟棄的流,否則沒有可用的流。

相關內容