Deseo probar un subsistema que se comunica con otros subsistemas a través de TCP. He usado lo siguiente:
"iptables -A OUTPUT -p tcp --dport "+port_number" -j DROP"
detener el tráfico en un puerto para poder, mediante un script, enviar mis propios datos al sistema bajo prueba. Esto funcionó muy bien.
Sin embargo, ahora deseo reenviar el tráfico a mi script en lugar de simplemente descartarlo. Luego deseo manipular los datos en mi script antes de reenviarlos al subsistema bajo prueba.
¿Puedo hacer esto usando iptables? ¿Existe un mejor enfoque?
Respuesta1
Podrías probar esto (el tráfico entrante al puerto 1234
será redirigido 4321
al host local, donde podrías escuchar tu script):
iptables -I INPUT -p tcp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 4321 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 4321
Si también desea acceder al puerto 1234
desde la misma máquina, deberá agregar una OUTPUT
regla, ya que PREROUTING
la interfaz loopback no la utiliza:
iptables -t nat -I OUTPUT -p tcp -o lo --dport 1234 -j REDIRECT --to-ports 4321
Ahora, en el servidor, puedes intentar escuchar nc -l 4321
(aquí puedes usar tu propio script). En un cliente, intente nc server_host_name_or_ip 1234
escribir cualquier cosa para verificar que el servidor esté realizando la redirección correctamente.
¡No olvides guardar la iptables
configuración!