Tengo una aplicación escuchando en el puerto 7162 capturas SNMP. Las trampas llegan al puerto 162, así que tengo esta redirección en mis iptables:
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 7162
¿También necesito permitir explícitamente las conexiones entrantes al puerto 162 con
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
A veces funciona solo con la primera línea, a veces no, así que estoy tratando de descubrir por qué podría ser así.
Respuesta1
La primera regla debería ser suficiente, a menos que esté limitando INPUT
de alguna manera el acceso al puerto 7162 en la cadena.
De hecho, su paquete UDP ni siquiera debería pasar a través de la INPUT
cadena con el puerto de destino configurado en 162, al menos según el siguiente diagrama:https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
Además, su INPUT
regla parece demasiado complicada. UDP es un protocolo sin estado, por lo que se trata de algún tipo de estado dentro del netfilter. Ni siquiera he encontrado documentación adecuada sobre lo que significan esos estados cuando se usan con UDP.
Intente monitorear ambos puertos con tcpdump
el programa en busca de pistas (nota:Si suelta algún paquete en solo puede ver el paquete entrante en el puerto 162, incluso escuchar en bucle no revelará la redirección).PREROUTING
la cadena, tcpdump no lo verá.
Editar:No estás probando la regla con conexiones dentro de una sola máquina, ¿verdad? PREROUTING
no se atraviesa en conexiones solo de host local.