我是否需要在我的 iptables 配置中添加此行来进行重定向?

我是否需要在我的 iptables 配置中添加此行来进行重定向?

我有一个应用程序在端口 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以寻找线索(注意:如果你丢弃PREROUTING链中的任何数据包,tcpdump 将不会看到它们它只能看到端口 162 上的传入数据包,即使在环回上监听也不会显示重定向)。

编辑:您没有尝试使用单台机器内的连接规则,对吗?PREROUTING不会在仅限本地主机的连接上进行遍历。

相关内容