Iptables

我應該用 iptables 對 nat 表進行狀態匹配嗎?

  • November 14, 2021

我經常看到 iptables 的鏈中有一些狀態匹配規則,例如 INPUT。

我知道他們在做什麼,我對此很感興趣

我應該對錶 NAT 的鏈執行相同的操作嗎?

例如,在我家的路由器中,我希望它接受 ssh,並且還充當 NAT 路由器。

如果我們有:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

為了獲得更好的性能,我應該遵循以下操作嗎?

-t nat -A POSTROUTING -m state --state RELATED,ESTABLISHED -j MASQUERADE

-t nat -A POSTROUTING -s 192.168.1.0/24 -o wan0 -m state --state NEW -j MASQUERADE

我想我不應該POSTROUTING 鏈做同樣的事情,而應該對 FORWARD 做同樣的事情。

謝謝!

不,你不需要那個。

動態 NAT 規則始終使用 conntrack 表。所以這是沒用的(也是錯誤的)。該nat表僅由連接的第一個數據包遍歷,因此它只會看到--ctstate NEW數據包。它永遠不會看到--ctstate ESTABLISHED數據包,因為它們不會遍歷規則。如果在連接跟踪器 nat 表中找到數據包,則應用記錄的轉換並繼續下一個表。

連接狀態考慮似乎在FORWARD鏈中有用,而不是在PREROUTINGorPOSTROUTING中,所以在FORWARD filterorFORWARD mangle表中使用它。

附加說明:state匹配模組已過時並從核心中刪除。實際匹配是用conntrack模組實現的。在我看來,最好明確地使用它,所以最好總是使用-m conntrack --ctstate ...而不是-m state.

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