Iptables
FORWARD 或 INPUT 鏈中的 iptables 過濾如何與 NAT 互動?
這個頁面似乎暗示,如果
PREROUTING
錶鍊中有一條規則nat
將目標轉換1.2.3.4:80
為10.1.1.1:8080
,那麼INPUT
andFORWARD
鏈中的規則應該匹配於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
。