Noticia Redireccionar tráfico de una IP y puerto hacia otra IP y puerto

Algo muy común cuando administramos servidores es redireccionar tráfico.

Supongamos que tenemos un servidor con determinados servicios funcionando, pero por cualquier razón cambiamos uno de esos servicios (no sé, por ejemplo pop3 que es el puerto 110) hacia otro servidor. Lo normal y más frecuente sería simplemente cambiar la IP en el registro DNS, no obstante si alguien estaba usando la IP en vez del subdominio se verá afectado.

¿Qué hacer? … simple, redireccionar el tráfico que reciba ese servidor por ese puerto hacia otro servidor con el mismo puerto.



¿Cómo empezamos a redireccionar tráfico?


Lo primero será que debemos tener habilitado el forwarding en el servidor, para ello pondremos lo siguiente:

echo "1" > /proc/sys/net/ipv4/ip_forward

Todos los comandos que se muestran en este tutorial deben ser ejecutados con privilegios de administración, recomiendo que sean ejecutados directamente con el usuario root.

También pueden usar este otro comando, en caso de que el anterior no les funcione (me sucedió así en un CentOS):
sysctl net.ipv4.ip_forward=1
Luego reiniciaremos la red:

service networking restart

En distros RPM como CentOS y otras, sería:

service nertwork restart

Ahora pasaremos a lo importante, indicarle al servidor mediante iptables qué redireccionar:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

O sea y siguiendo el ejemplo que mencioné, supongamos que deseamos redireccionar todo el tráfico que recibe nuestro servidor por el puerto 110 hacia otro servidor (ej: 10.10.0.2), que igual recibirá ese tráfico por el 110 (pues se trata del mismo servicio):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

El servidor 10.10.0.2 verá que todos los paquetes o peticiones vienen desde la IP del cliente, en caso de que quieran natear las peticiones, o sea, que el 2do servidor vea que las peticiones llegan con la IP del 1er servidor (y en el cual aplicamos la redirección), sería poner además esta segunda línea:

iptables -t nat -A POSTROUTING -j MASQUERADE

Algunas preguntas y respuestas


En el ejemplo usé el mismo puerto en ambas ocasiones (el 110), no obstante pueden redireccionar tráfico de un puerto a otro sin problemas. Por ejemplo, supongamos que deseo redireccionar el tráfico del puerto 80 al 443 en otro servidor, para ello sería:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

Esto es iptables, pueden usar todos los otros parámetros que conocemos, por ejemplo, si solo deseamos redireccionar tráfico de una IP en específica, sería agregando -s <ip> … por ejemplo redireccionaré solo el tráfico que venga desde 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

O bien una red entera (/24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

También podemos especificar la interfaz de red con -i <interfaz>:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Fin!


Esto como dije ya, es iptables, pueden aplicar lo ya conocido para que el servidor haga exactamente lo que quieran que haga ;)

Saludos!




9n_IlhA0TIo


Continúar leyendo...