Hombre en el medio usando iptables

Hombre en el medio usando iptables

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 1234será redirigido 4321al 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 1234desde la misma máquina, deberá agregar una OUTPUTregla, ya que PREROUTINGla 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 1234escribir cualquier cosa para verificar que el servidor esté realizando la redirección correctamente.

¡No olvides guardar la iptablesconfiguración!

información relacionada