Iptables

FORWARD 或 INPUT 鏈中的 iptables 過濾如何與 NAT 互動?

  • December 16, 2020

這個頁面似乎暗示,如果PREROUTING錶鍊中有一條規則nat將目標轉換1.2.3.4:8010.1.1.1:8080,那麼INPUTandFORWARD鏈中的規則應該匹配於10.1.1.1:8080,而不是1.2.3.4:80

如果一個人想要執行一個更像這裡概述的操作順序怎麼辦?即在NAT之前如何對數據包的特徵進行過濾?

一種可能性似乎是使用PREROUTING錶鍊raw。問題是 conntrack 在raw/PREROUTING(見註 1)中不可用,例如,非初始 UDP 片段不會與初始片段相關,並且會產生意外匹配。

請讓我知道我是否清楚地描述了這個困境,以及是否有任何解決方法。

注意 1:如果我錯了,請糾正我,但是當我嘗試在中使用 conntrack 時raw/PREROUTING,所有初始 SYN 數據包都被標記為“ INVALID”而不是“ NEW”。在 Netfilter 流程​​圖中,“conntrack”似乎也在raw/PREROUTING.

你不需要任何raw/PREROUTING規則。您可以使用conntrack匹配按原始(轉換前)目標/源地址/埠號過濾數據包。conntrack是舊state比賽的繼任者。conntrack entry它可以檢查與(和 NAT)相關的各種附加元數據。

幾個例子:

# allow any port-forwarded packets
iptables -t filter -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT

# check the original destination address of DNATed packets
iptables -t filter -A FORWARD -p tcp --dport 8080 -m conntrack --ctstate DNAT --ctorigdstport 80 --ctorigdst X.X.X.X --ctdir ORIGINAL -j ACCEPT

有關更多詳細資訊,請檢查 和 的iptables -m conntrack --help輸出man iptables-extensions

引用自:https://serverfault.com/questions/1046353