Redirección de puertos

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá qué es la redirección de puertos y cómo utilizarla.

Imagine que vive en una dirección donde recibe correo. Después se muda a una habitación nueva y quiere que todo el correo enviado al número de su habitación anterior (la habitación 80) se entregue automáticamente en el nuevo número (la habitación 8080). No quiere pedir a todo el mundo que actualice su agenda de direcciones; solo quiere que el administrador del edificio se encargue de redirigirlo.

La redirección de puertos forma parte de la NAT (Network Address Translation, traducción de direcciones de red). Esta técnica reescribe el tráfico entrante para que las solicitudes que llegan a un puerto se redirijan a otro destino.

Esto significa que el firewall hace algo más que permitir o bloquear el tráfico. También transforma activamente la información de destino de los paquetes para que un punto de entrada de servicio visible externamente pueda conducir a un destino interno diferente.

El escenario:

Tiene un servidor web ejecutándose en el puerto 8080. Sin embargo, los navegadores web estándar buscan los sitios web en el puerto 80. En lugar de cambiar el servidor web, indicará al firewall: «Si alguien llama al puerto 80, envíelo directamente al puerto 8080».

En este laboratorio, usted:

  1. Preparará el firewall para gestionar el tráfico (enmascaramiento).
  2. Creará una regla para redirigir el puerto 80 al 8080.
  3. Probará y comprenderá el comportamiento de la redirección de puertos.

Habilitar el enmascaramiento

Antes de que firewalld pueda redirigir puertos, necesita permiso para modificar los paquetes de red. Esta función se denomina enmascaramiento (Masquerading).

El enmascaramiento es una forma de traducción de direcciones. En muchos entornos reales, permite que un firewall o una puerta de enlace se sitúe entre el origen y el destino, y haga que el tráfico parezca proceder de un contexto de direcciones diferente al original.

Puede pensar en el enmascaramiento como un permiso para que el firewall actúe como intermediario y reescriba las etiquetas de dirección de los paquetes para que lleguen al lugar correcto.

Nota: En este entorno de laboratorio, utilizamos la zona trusted como zona activa para garantizar que su terminal web mantenga la conexión.

Primero, compruebe qué zona está activa actualmente.

sudo firewall-cmd --get-active-zones

Probablemente verá trusted junto con su interfaz de red, por ejemplo, eth0.

Ahora, habilite el enmascaramiento en la zona trusted.

sudo firewall-cmd --zone=trusted --add-masquerade

Compruebe que está habilitado.

sudo firewall-cmd --zone=trusted --query-masquerade

Si la salida es yes, puede continuar.

Crear la regla de redirección

Ahora creará la regla de redirección.

Las reglas de redirección son útiles cuando necesita mantener un comportamiento externo estable sin modificar la aplicación. El firewall actúa como una capa de traducción entre lo que esperan los clientes y el lugar donde escucha realmente el servicio.

La regla indicará lo siguiente: «Para la zona trusted, tome cualquier tráfico TCP dirigido al puerto 80 y rediríjalo al puerto 8080».

Ejecute este comando:

sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080

Veamos qué significa cada opción:

  • port=80: el destino original (la habitación anterior).
  • proto=tcp: el protocolo utilizado (el tráfico web usa TCP).
  • toport=8080: el nuevo destino (la habitación nueva).

Compruebe que la regla se haya añadido correctamente.

sudo firewall-cmd --zone=trusted --list-forward-ports

La regla debería aparecer en la salida.

Probar la redirección

Durante la configuración, iniciamos un servidor web sencillo en el puerto 8080. Primero, confirme que funciona accediendo directamente a él.

curl http://127.0.0.1:8080

Debería ver lo siguiente: «Hello from Port 8080! Port Forwarding is working.»

Ahora pruebe la redirección accediendo a su propia dirección IP a través del puerto 80.

Obtenga su dirección IP:

MY_IP=$(hostname -I | awk '{print $1}')
echo "My IP is: $MY_IP"

Intente conectarse al puerto 80 mediante esta dirección IP.

curl http://$MY_IP:80

Nota sobre las pruebas: En muchos entornos Linux, incluido este laboratorio, puede aparecer el error Connection refused. Se trata de una limitación conocida denominada NAT Loopback. A menudo, el kernel impide que una máquina se conecte a su propia IP externa para aplicar reglas NAT.

Conviene recordar esta limitación porque diferencia la corrección de la configuración del comportamiento de las pruebas locales. En ocasiones, la regla es válida aunque las pruebas realizadas desde la misma máquina puedan resultar engañosas.

En un escenario real, un visitante procedente de otro equipo se redirigiría correctamente. El hecho de que el comando list-forward-ports del paso anterior mostrara la regla es la verdadera prueba de que la configuración se realizó correctamente.

Eliminar la regla

Es recomendable limpiar los cambios realizados. Elimine la regla de redirección para que el tráfico vuelva a comportarse con normalidad.

La limpieza es importante en la administración de firewalls porque las reglas antiguas pueden modificar silenciosamente la exposición de una aplicación mucho tiempo después de que se haya olvidado la prueba original.

Para eliminar una regla, utilice --remove-forward-port con exactamente los mismos detalles que empleó para añadirla.

sudo firewall-cmd --zone=trusted --remove-forward-port=port=80:proto=tcp:toport=8080

Compruebe que la regla haya desaparecido.

sudo firewall-cmd --zone=trusted --list-forward-ports

La salida debería estar vacía.

Resumen

En este laboratorio, aprendió a redirigir el tráfico de red mediante la redirección de puertos. Usted:

  1. Habilitó el enmascaramiento para permitir que el firewall reescribiera los paquetes.
  2. Creó una regla para redirigir el tráfico del puerto 80 al puerto 8080.
  3. Aprendió qué es NAT Loopback y por qué las pruebas locales pueden resultar complicadas en algunos casos.
  4. Eliminó la regla para restaurar el estado original.

Esta es una técnica muy útil que suele emplearse para exponer servicios internos, como bases de datos o aplicaciones personalizadas, en puertos públicos estándar.