En redes informáticas , el reenvío o mapeo de puertos es una aplicación de la traducción de direcciones de red (NAT) que redirige una solicitud de comunicación de una combinación de dirección y número de puerto a otra mientras los paquetes atraviesan una puerta de enlace de red, como un enrutador o un cortafuegos . Esta técnica se utiliza con mayor frecuencia para hacer que los servicios de un host que reside en una red protegida o enmascarada (interna) estén disponibles para los hosts en el lado opuesto de la puerta de enlace (red externa), reasignando la dirección IP de destino y el número de puerto de la comunicación a un host interno. [1] [2]
El reenvío de puertos facilita la conexión de computadoras remotas, por ejemplo, hosts de Internet , a una computadora o servicio específico dentro de una red de área local (LAN). [3]
En una red residencial típica, los nodos obtienen acceso a Internet a través de un módem DSL o de cable conectado a un enrutador o traductor de direcciones de red (NAT/NAPT). Los hosts de la red privada están conectados a un conmutador Ethernet o se comunican a través de una LAN inalámbrica . La interfaz externa del dispositivo NAT está configurada con una dirección IP pública. Por otro lado, las computadoras detrás del enrutador son invisibles para los hosts en Internet, ya que cada uno se comunica solo con una dirección IP privada.
Al configurar el reenvío de puertos, el administrador de red reserva un número de puerto en la puerta de enlace para uso exclusivo de comunicación con un servicio en la red privada, ubicado en un host específico. Los hosts externos deben conocer este número de puerto y la dirección de la puerta de enlace para comunicarse con el servicio interno de la red. A menudo, los números de puerto de servicios de Internet conocidos, como el puerto número 80 para servicios web (HTTP), se utilizan en el reenvío de puertos, de modo que se puedan implementar servicios de Internet comunes en hosts dentro de redes privadas.
Las aplicaciones típicas incluyen las siguientes:
Los administradores configuran el reenvío de puertos en el sistema operativo de la puerta de enlace. En los núcleos Linux , esto se logra mediante reglas de filtrado de paquetes en los componentes del núcleo iptables o netfilter . Los sistemas operativos BSD y macOS anteriores a Yosemite (OS 10.10.X) lo implementan en el módulo Ipfirewall (ipfw), mientras que los sistemas operativos macOS a partir de Yosemite lo implementan en el módulo Packet Filter (pf).
Cuando se utiliza en dispositivos de puerta de enlace, se puede implementar un reenvío de puerto con una sola regla para traducir la dirección y el puerto de destino. (En los núcleos de Linux , esta es la regla DNAT). La dirección y el puerto de origen, en este caso, no se modifican. Cuando se utiliza en máquinas que no son la puerta de enlace predeterminada de la red, la dirección de origen debe cambiarse para que sea la dirección de la máquina traductora, o los paquetes pasarán por alto el traductor y la conexión fallará.
Cuando un proceso proxy implementa un reenvío de puerto (como en los firewalls de capa de aplicación, firewalls basados en SOCKS o mediante servidores proxy de circuito TCP), en realidad no se traducen paquetes, solo se transfieren datos. Esto generalmente da como resultado que la dirección de origen (y el número de puerto) se cambien a los de la máquina proxy.
Generalmente, solo uno de los hosts privados puede usar un puerto reenviado específico a la vez, pero a veces es posible configurarlo para diferenciar el acceso según la dirección de origen del host de origen.
Los sistemas operativos tipo Unix a veces utilizan el reenvío de puertos, donde los números de puerto menores a 1024 solo pueden ser creados por software que se ejecuta como usuario root. Ejecutar con privilegios de superusuario (para vincular el puerto) puede ser un riesgo de seguridad para el host, por lo tanto, el reenvío de puertos se utiliza para redirigir un puerto de número bajo a otro puerto de número alto, de modo que el software de aplicación pueda ejecutarse como un usuario común del sistema operativo con privilegios reducidos.
El protocolo Universal Plug and Play (UPnP) proporciona una función para instalar automáticamente instancias de reenvío de puertos en puertas de enlace de Internet residenciales. UPnP define el Protocolo de dispositivo de puerta de enlace de Internet (IGD), que es un servicio de red mediante el cual una puerta de enlace de Internet anuncia su presencia en una red privada a través del Protocolo simple de descubrimiento de servicios (SSDP). Una aplicación que proporciona un servicio basado en Internet puede descubrir dichas puertas de enlace y utilizar el protocolo UPnP IGD para reservar un número de puerto en la puerta de enlace y hacer que esta reenvíe paquetes a su socket de escucha .
El reenvío de puertos se puede distinguir por los siguientes tipos específicos: reenvío de puertos local, remoto y dinámico. [4]
El reenvío de puertos locales es el tipo más común de reenvío de puertos. Se utiliza para permitir que un usuario se conecte desde el equipo local a otro servidor, es decir, para reenviar datos de forma segura desde otra aplicación cliente que se ejecuta en el mismo equipo que un cliente Secure Shell (SSH). Al utilizar el reenvío de puertos locales, se pueden eludir los cortafuegos que bloquean determinadas páginas web. [5]
Las conexiones desde un cliente SSH se reenvían, a través de un servidor SSH, al servidor de destino previsto. El servidor SSH está configurado para redirigir datos desde un puerto específico (que es local para el host que ejecuta el cliente SSH) a través de un túnel seguro a un host y puerto de destino específicos. El puerto local está en la misma computadora que el cliente SSH, y este puerto es el "puerto reenviado". En la misma computadora, cualquier cliente que desee conectarse al mismo host y puerto de destino puede configurarse para conectarse al puerto reenviado (en lugar de hacerlo directamente al host y puerto de destino). Una vez establecida esta conexión, el cliente SSH escucha en el puerto reenviado y dirige todos los datos enviados por las aplicaciones a ese puerto, a través de un túnel seguro al servidor SSH. El servidor descifra los datos y luego los redirecciona al host y puerto de destino. [6]
Algunos usos del reenvío de puertos locales:
Esta forma de reenvío de puertos permite que las aplicaciones del lado del servidor de una conexión Secure Shell (SSH) accedan a servicios que residen en el lado del cliente de SSH. [8] Además de SSH, existen esquemas de tunelización propietarios que utilizan el reenvío de puertos remotos para el mismo propósito general. [9] En otras palabras, el reenvío de puertos remotos permite a los usuarios conectarse desde el lado del servidor de un túnel, SSH u otro, a un servicio de red remoto ubicado en el lado del cliente del túnel.
Para utilizar el reenvío de puertos remotos, se deben conocer la dirección del servidor de destino (en el lado del cliente del túnel) y dos números de puerto. Los números de puerto elegidos dependen de la aplicación que se vaya a utilizar.
El reenvío de puertos remotos permite que otras computadoras accedan a aplicaciones alojadas en servidores remotos. Dos ejemplos:
Otro nombre: túnel SSH inverso. En términos simples, cuando su computadora portátil se conecta a una máquina remota de tal manera que las llamadas entrantes a la IP de esa máquina remota se transfieren a su computadora portátil y responden. [11]
El reenvío dinámico de puertos (DPF) es un método a pedido para atravesar un cortafuegos o NAT mediante el uso de agujeros de seguridad en el cortafuegos. El objetivo es permitir que los clientes se conecten de forma segura a un servidor de confianza que actúa como intermediario con el fin de enviar o recibir datos a uno o varios servidores de destino. [12]
El DPF se puede implementar configurando una aplicación local, como SSH, como un servidor proxy SOCKS, que se puede utilizar para procesar transmisiones de datos a través de la red o de Internet. Los programas, como los navegadores web, deben configurarse individualmente para dirigir el tráfico a través del proxy, que actúa como un túnel seguro hacia otro servidor. Una vez que el proxy ya no es necesario, los programas deben reconfigurarse a sus configuraciones originales. Debido a los requisitos manuales del DPF, no se utiliza con frecuencia. [6]
Una vez establecida la conexión, se puede utilizar DPF para proporcionar seguridad adicional a un usuario conectado a una red no confiable. Dado que los datos deben pasar por el túnel seguro a otro servidor antes de ser reenviados a su destino original, el usuario está protegido contra el rastreo de paquetes que puede ocurrir en la LAN. [13]
El DPF es una herramienta poderosa con muchos usos; por ejemplo, un usuario conectado a Internet a través de una cafetería, un hotel o cualquier otra red mínimamente segura puede querer utilizar el DPF como una forma de proteger los datos. El DPF también se puede utilizar para eludir los cortafuegos que restringen el acceso a sitios web externos, como en las redes corporativas.