
我的 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
只能用於顯示第一個資料包未被丟棄的流,否則沒有可用的流。