【问题标题】:How to redirect 162 port to a customized port which above 1024 for snmp trap?如何将 162 端口重定向到 1024 以上的自定义端口以进行 snmp 陷阱?
【发布时间】:2016-11-10 10:52:42
【问题描述】:

我写了一些代码来监听 162 端口。它看起来像以下

listenAddress = GenericAddress.parse(System.getProperty("snmp4j.listenAddress", "udp:0.0.0.0/162"));
TransportMapping transport;
if (listenAddress instanceof UdpAddress) {
    transport = new DefaultUdpTransportMapping((UdpAddress) listenAddress);
} else {
    transport = new DefaultTcpTransportMapping((TcpAddress) listenAddress);
}
snmp = new Snmp(dispatcher, transport);
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
snmp.listen();

但是代码只能由非root用户启动。所以当我运行程序时,我得到了一个错误。 java.net.bindexception permission denied.

我想将 162 端口重定向到 16200。在我的代码中,我可以这样称呼它

listenAddress = GenericAddress.parse(System.getProperty("snmp4j.listenAddress", "udp:0.0.0.0/16200"));

然后我修改了/etc/sysconfig/iptables,但是没有用。以下是 iptables 配置。

*nat
:PREROUTING ACCEPT [1379:235423]
:POSTROUTING ACCEPT [6:680]
:OUTPUT ACCEPT [6:680]
-A PREROUTING -p udp  -m udp --dport 162 -j REDIRECT --to-ports 16200
COMMIT
# Completed on Thu Nov 10 18:07:25 2016
# Generated by iptables-save v1.3.5 on Thu Nov 10 18:07:25 2016
*filter
:INPUT ACCEPT [38534:3129869]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2052:284032]
-A INPUT -p tcp -m tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 16200 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 16200 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 161 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 162 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 162 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 161 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 162 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 162 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 16200 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 16200 -m state --state ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Nov 10 18:07:25 2016
# Generated by iptables-save v1.3.5 on Thu Nov 10 18:07:25 2016
*mangle
:PREROUTING ACCEPT [39240:3206748]
:INPUT ACCEPT [38535:3129909]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2052:284032]
:POSTROUTING ACCEPT [2052:284032]
COMMIT

如何配置 iptables 以便我可以在 16200 端口上获取陷阱消息?或者有没有其他方法可以做到这一点?

我很困惑。请给我一些建议。谢谢!

【问题讨论】:

    标签: linux permissions snmp iptables privileges


    【解决方案1】:

    您必须正确配置 iptables 以将所有传入的 UDP 数据包从端口 162 转发到用户定义的端口 (>1024)。

    sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 162 -j REDIRECT --to-port 5678
    

    您应该将enp0s3 替换为正确的网络接口名称。使用 ifconfig 找出您的以太网接口的名称。通常 - eth0。在此示例中,来自端口 162 的所有传入 UDP 数据包都将转发到 UDP 端口 5678

    【讨论】:

    • 是的,在我的测试环境中,一切正常。但在我的 usrs environment which is the Double Network Card Binding, it doesnt 工作。我想我应该为 iptables 命令添加“-i bound0”。下周 usr 的环境可用时我会尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多