Networking

iptable 如何與 Linux 橋接器一起工作?

  • November 1, 2020

設置:

VM1 — 橋 – VM2

VM1 和 2 在同一子網上。Bridge 為 brctl bridge 添加了 2 個介面。當我使用 uptables -A FORWARD -s (VM1 ip) -j DENY 阻止 VM2 ip 時,它不起作用。我知道數據包永遠不會進入網路層,但這表示“當 IP 數據包位於橋接程式碼中時,將遍歷所有 iptables 鏈”。甚至 MAC 過濾也不適用於 iptables。ebtables 工作正常。怎麼了?

Linux 的橋接過濾器框架具有可用的機制,其中第 2 層橋接程式碼可以向上呼叫iptables(以及arptablesor ip6tables)並過濾從第 2 層(橋接幀)到第 3 層(iptables帶有數據包)然後返回第 2 層。這遠遠超出了使用BROUTING僅給出留在第 2 層或繼續在第 3 層的邏輯選擇的鏈(通過執行幀dnat/broute到本地)。

例如,這種分層違規允許利用該conntrack設施並在第 2 層提供狀態防火牆。

當人們沒想到會發生這種情況並且難以調試問題時,它也會造成麻煩,或者在(大多數情況下)不需要時阻礙性能。所以從核心 3.18 開始,br_netfilter 程式碼從橋接程式碼中分離出來並模組化,不再自動載入。

現在要在 iptables 中使用此功能,必須modprobe br_netfilter將 sysconf 參數net.bridge.bridge-nf-call-iptables設置為1(等價於echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables)並將其保持。現在,這將允許 OP 連結的所有奇妙複雜性:基於 Linux 的橋上的 ebtables/iptables 互動。請注意,當 iptables 使用 ) 匹配時,該模組也可以自動載入,如果同時使用和physdev時不小心,這可能會巧妙地改變整個防火牆行為。ebtables``iptables

注意:(nftables以及iptables-nft)也會受到影響。目前狀態被認為有點混亂(因為分層違規的額外複​​雜性)並且進行了一些重組以在橋路徑中直接支持conntrackbr_netfilter而不再使用:因為核心 5.3 Linux 提供了nf_conntrack_bridge允許nftables直接處理連接跟踪的核心模組在橋接層沒有到達ip(也不是ip6inet)家族:對 bridge 的連接跟踪支持

引用自:https://unix.stackexchange.com/questions/499756