我有一個應用程式在連接埠 7162 上偵聽 SNMP 陷阱。陷阱到達連接埠 162,因此我的 iptables 中有此重定向:
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 7162
我是否還需要明確允許傳入連接到連接埠 162
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
有時它只適用於第一行,有時則不然,所以我試圖找出原因。
答案1
第一條規則應該足夠了 - 除非您以INPUT
某種方式限制對鏈中連接埠 7162 的存取。
事實上,您的 UDP 封包甚至不應該透過INPUT
目標連接埠設定為 162 的鏈,至少根據下圖是如此:https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
此外,你的INPUT
規則似乎太複雜了。 UDP 是一種無狀態協議,因此您要處理 netfilter 內某種形式的狀態。我什至還沒有找到關於這些狀態與 UDP 一起使用時的含義的正確文件。
嘗試使用程式監視兩個連接埠tcpdump
以獲取線索(注意:如果您在它只能看到連接埠 162 上的傳入資料包,即使偵聽環回也不會顯示重新導向)。PREROUTING
鏈中丟棄任何資料包,tcpdump 將看不到它們
編輯:您不會在單一機器內嘗試連線規則,對吧?PREROUTING
不會在僅限本機的連線上遍歷。