Redireccion de puertos con iptables

por | 3 abril, 2020

Nunca viene mal una pequeña ayuda en cuanto a este tema

Si bien iptables tiene un sin fin de opciones para personalizar los flujos de paquetes en esta ocasión vamos simplemente a redirigir desde un puerto A, ya sea tcp o udp hacia un puerto B.

Esto es útil por ejemplo si queremos dejar un servicio escuchando por 2 puertos distintos simultáneamente , claro también esta la opción de que el mismo programa nos permita esta configuración, o levantar 2 veces el mismo servicio con nombres distintos pero hablando genéricamente y de la forma mas fácil creo que jugar con iptables es lo mejor.

Para lograr esto recordemos que iptables cuenta con 3 tablas distintas, siendo la tabla filter la mas conocida y utilizada. Las otras 2 corresponden a nat y mangle

En esta ocasión haremos uso de la tabla nat por lo que la sintaxis del comando empezaría así

iptables -t nat -A 

con la opción -t hacemos el llamado a la tabla especifica, la opción -A indica que se agregara la regla al final de las reglas existentes, también tenemos la opción -I donde podemos especificar un n° de regla e insertara la regla antes de la regla que contenga el n° que indiquemos y si no especificamos un n° insertara la regla al principio del listado de reglas existentes.

Al igual que la tabla filter, la tabla nat cuenta con 3 cadenas por defecto, PREROUTING, POSTROUTING y FORWARD.

En este caso haremos uso de la cadena PREROUTING por lo que el comando estaría quedando así

iptables -t nat -A PREROUTING

para este ejemplo lo que quiero hacer es que, el trafico que llegue por el puerto UDP/53 (dns) sea redirigido al puerto UDP/1194 (openvpn).
Una nota importante que me gustaría hacer aquí, es que esta redirección solo funciona con el mismo protocolo de entrada y salida, no se puede mezclar tcp con udp o viceversa

Por lo que en la regla definimos que el trafico entrante que vaya dirigido al puerto 53 usando UDP coincida

iptables -t nat -A PREROUTING -p udp --dport 53

con la sintaxis anterior logramos esto, y ahora definimos que hará iptables una vez que un paquete haga match con la regla, en este caso usaremos REDIRECT

iptables -t nat -A PREROUTING -p udp --dport 53 -J REDIRECT

ya definido que hacer tenemos que finalmente indicar a donde hacer la redireccion, en este caso al puerto UDP 1194 (openvpn) y eso lo hacemos agregando –to-ports 1194

iptables -t nat -A PREROUTING -p udp --dport 53 -J REDIRECT --to-ports 1194

y con esto ya logramos que un programa escuche por 2 puertos distintos como comente al principio tenemos muchas opciones con iptables y las distintas configuraciones las podemos ver en la documentación de netfilter o el siempre querido y amando man iptables-extensions y man iptables

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *