Eu tenho um aplicativo escutando na porta 7162 traps SNMP. As armadilhas estão chegando na porta 162, então tenho esse redirecionamento no meu iptables:
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 7162
Também preciso permitir explicitamente conexões de entrada para a porta 162 com
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
Às vezes funciona apenas com a primeira linha, às vezes não, então estou tentando descobrir por que isso acontece.
Responder1
A primeira regra deve ser suficiente - a menos que você esteja limitando o acesso à porta 7162 em INPUT
cadeia de alguma forma.
Na verdade, seu pacote UDP não deveria nem passar pela INPUT
cadeia com a porta de destino definida como 162, pelo menos de acordo com o diagrama a seguir:https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
Além disso, sua INPUT
regra parece muito complicada. UDP é um protocolo sem estado, então você está lidando com algum tipo de estado dentro do netfilter. Eu nem encontrei documentação adequada sobre o que esses estados significam quando usados com UDP.
Tente monitorar ambas as portas com tcpdump
o programa em busca de pistas (nota:se você descartar algum pacote em ele pode ver apenas o pacote recebido na porta 162, mesmo a escuta no loop back não revelará o redirecionamento).PREROUTING
cadeia, o tcpdump não os verá
Editar:Você não está tentando a regra com conexões em uma única máquina, certo? PREROUTING
não é percorrido em conexões somente localhost.