Как перенаправить порт 162 на настроенный порт, который выше 1024 для ловушки snmp?
Я написал несколько фрагментов кода для прослушивания на 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? Или есть другие способы сделать это?
Я сбит с толку. Пожалуйста, дайте мне несколько предложений. Спасибо!
1 ответ
Вы должны правильно настроить iptables для пересылки всех входящих UDP-пакетов из порта 162
на определенный пользователем порт (>1024
).
sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 162 -j REDIRECT --to-port 5678
Вы должны заменить enp0s3
с правильным именем сетевого интерфейса. Используйте ifconfig, чтобы узнать имя вашего интерфейса Ethernet. Обычно - eth0
, В этом примере все входящие UDP-пакеты из порта 162
будет перенаправлен на порт UDP 5678
,