Cómo funciona el protocolo FTP y cómo resolver problemas relacionados con él

El Protocolo de Transferencia de Archivos (FTP) es uno de los protocolos más populares, pero también uno de los más malentendidos, que se utiliza en la actualidad. A diario, recibo muchas preguntas de administradores de enrutadores y firewalls que se preguntan por qué no funciona una configuración específica de cliente o servidor FTP. Si estos administradores entendieran cómo funciona el FTP y cómo los firewalls típicos mejoran las demandas de seguridad a veces complicadas del protocolo, podrían resolver fácilmente los problemas relacionados con el FTP que encuentran.

Índice de Contenido
  1. ¿Cómo funciona el FTP?
    1. Modo PORT (también conocido como modo Normal o Activo)
    2. Modo PASV (también conocido como modo Pasivo)
  2. Firewalls y FTP
    1. Firewall del lado del cliente en modo PORT
    2. Firewall del lado del servidor en modo PORT
    3. Firewall del lado del cliente en modo PASV
    4. Firewall del lado del servidor en modo PASV
  3. Resolviendo el problema del FTP
  4. Resumen

¿Cómo funciona el FTP?

El FTP es un protocolo complicado porque requiere múltiples conexiones, a veces en ambas direcciones. Cómo se realizan estas conexiones por parte de tus clientes y servidores depende del modo FTP utilizado. Hay dos modos FTP:

Modo PORT (también conocido como modo Normal o Activo)

El modo de FTP tradicional se conoce como modo PORT (o Normal o Activo). La secuencia de eventos para una conexión de FTP en modo PORT es la siguiente:

  1. Cliente FTP: Abre puertos de respuesta aleatorios en el rango de números altos. (Para este ejemplo, asumiremos los puertos TCP 6000 y TCP 6001).
  2. Cliente FTP: Envía una solicitud para abrir un canal de comandos desde su puerto TCP 6000 al puerto TCP 21 del servidor FTP.
  3. Servidor FTP: Envía un "OK" desde su puerto TCP 21 al puerto TCP 6000 del cliente FTP (el enlace del canal de comandos). En este punto se establece el canal de comandos.
  4. Cliente FTP: Envía una solicitud de datos (comando PORT) al servidor FTP. El cliente FTP incluye en el comando PORT el número de puerto de datos que ha abierto para recibir datos. En este ejemplo, el cliente FTP ha abierto el puerto TCP 6001 para recibir los datos.
  5. Servidor FTP: El servidor FTP abre una nueva conexión de entrada hacia el cliente FTP en el puerto indicado por el cliente FTP en el comando PORT. El puerto de origen del servidor FTP es el puerto TCP 20. En este ejemplo, el servidor FTP envía datos desde su propio puerto TCP 20 al puerto TCP 6001 del cliente FTP.

En esta conversación, se establecieron dos conexiones: una conexión de salida iniciada por el cliente FTP y una conexión de entrada establecida por el servidor FTP. Cabe destacar que la información contenida en el comando PORT (enviado a través del canal de comandos) se guarda en la parte de datos del paquete.

Modo PASV (también conocido como modo Pasivo)

La implementación de FTP más popular es el modo Pasivo o PASV. Las conexiones de FTP en modo PASV son las predeterminadas en la mayoría de los navegadores populares. Una de las principales ventajas del modo PASV es que el servidor no necesita crear una nueva conexión de entrada hacia el cliente FTP. Como veremos más adelante, esto hace que el FTP en modo PASV sea más compatible con firewalls.

Una secuencia de eventos de FTP en modo PASV sería la siguiente:

Microsoft lanza servicio gratuito de almacenamiento en la nube para usuarios de Windows
  1. Cliente FTP: Abre puertos de respuesta aleatorios en el rango de números altos. (Para este ejemplo, asumiremos los puertos TCP 6000 y TCP 6001).
  2. Cliente FTP: Envía una solicitud para abrir un canal de comandos desde su puerto TCP 6000 al puerto TCP 21 del servidor FTP.
  3. Servidor FTP: Envía un "OK" desde su puerto TCP 21 al puerto TCP 6000 del cliente FTP. El canal de comandos ahora está establecido.
  4. Cliente FTP: Envía un comando PASV solicitando que el servidor FTP abra un número de puerto al que el cliente FTP pueda conectarse para establecer el canal de datos.
  5. Servidor FTP: Envía a través del canal de comandos el número de puerto TCP al que el cliente FTP puede iniciar una conexión para establecer el canal de datos. En este ejemplo, el servidor FTP abre el puerto 7000.
  6. Cliente FTP: Abre una nueva conexión desde su propio puerto de respuesta TCP 6001 al canal de datos TCP 7000 del servidor FTP. La transferencia de datos se realiza a través de este canal.

Observa que el cliente FTP en modo PASV inicia todas las conexiones. El servidor FTP nunca necesita crear una nueva conexión de retorno hacia el cliente FTP.

Firewalls y FTP

Los modos FTP representan desafíos de seguridad distintos, dependiendo de si eres el administrador de un firewall del lado del cliente o del lado del servidor.

Firewall del lado del cliente en modo PORT

¿Cómo puedes manejar las solicitudes en modo PORT realizadas por tus clientes FTP? Debes permitir tanto conexiones de salida como de entrada para admitir las solicitudes de clientes FTP en modo PORT desde detrás de tu firewall:

Salida: Puerto TCP 21

Entrada: Puertos TCP 1025 y superiores

Como puedes ver, los filtros de paquetes necesarios para admitir clientes FTP en modo PORT no conducen a una configuración de firewall/router muy segura simplemente porque se dejan abiertos a todo el mundo un amplio rango de puertos. Otro problema importante es que debes permitir que las nuevas conexiones de entrada (paquetes no ACK) tengan acceso a la red interna. Permitir nuevas conexiones de entrada no solicitadas en un rango tan amplio de puertos representa un peligro de seguridad definido.

Cómo evitar que el archivo de registro de transacciones en SQL Server crezca demasiado grande

Una forma de abordar este problema es permitir conexiones de entrada solo desde el puerto de origen TCP 20 a los puertos de número alto. Al usar este enfoque, limitas el acceso a lo que se supone que es el puerto de datos del servidor FTP. Sin embargo, hay varias herramientas disponibles que permiten a los administradores y hackers configurar el puerto de origen manualmente. Por lo tanto, no puedes asegurarte de que las conexiones entrantes desde el puerto TCP 20 realmente se originen desde un servidor FTP.

Puedes mejorar en cierta medida estas restricciones limitando el acceso de entrada a los puertos de número alto solo desde el puerto TCP 20 y desde un número limitado de direcciones IP de servidores FTP confiables. La mayor desventaja de este enfoque es que debes poder identificar las direcciones IP de los servidores FTP confiables de antemano, y aún así debes preocuparte por posibles direcciones IP falsificadas y números de puerto manipulados.

Firewall del lado del servidor en modo PORT

¿Y si eres el administrador del firewall/router que debe manejar un servidor FTP detrás de tu dispositivo? En este caso, debes abrir los siguientes puertos:

Salida: Puertos TCP 1025 y superiores

Entrada: Puerto TCP 21

Esta situación es un poco menos peligrosa que la que debe manejar el administrador del firewall/router del lado del cliente. Sin embargo, permitir un conjunto tan amplio de puertos de salida solo para admitir una aplicación de servidor es una práctica de seguridad deficiente. Cualquier cliente de la red interna puede tener acceso a servicios de red en Internet que utilizan los puertos TCP de número alto para una conexión principal.

Debería su organización migrar a Google Apps desde Microsoft Exchange

Puedes mejorar un poco la seguridad al permitir el acceso de salida a los puertos de número alto solo cuando el puerto de origen es el TCP 20. De esta manera, puedes asumir de manera segura que solo los servidores FTP pueden conectarse a estos puertos de número alto en Internet. Podrías fortalecer este enfoque aún más limitando el acceso del puerto TCP 20 a los puertos de número alto a un número limitado de direcciones IP en tu red interna. Sin embargo, aún debes lidiar con problemas de direcciones IP falsificadas y números de puerto manipulados.

Firewall del lado del cliente en modo PASV

Si eres el administrador del firewall/router en el lado del cliente en modo PASV, deberás abrir los siguientes puertos:

Salida: Puerto TCP 21 y puertos TCP 1025 y superiores

Entrada: Puertos TCP 1025 y superiores

Observa que el cliente FTP en modo PASV requiere acceso de salida a los puertos TCP 1025 y superiores. Aunque esto no parece una gran diferencia en comparación con los requisitos del cliente FTP en modo PORT, desde el punto de vista de la seguridad es una diferencia significativa. Para permitir que el cliente FTP en modo PASV se conecte al servidor FTP, debes permitir que estos clientes tengan acceso de salida a todos los puertos de número alto. Dado que no tienes forma de determinar de antemano qué puerto de número alto asignará el servidor FTP para el canal de datos, debes abrir todos los puertos de número alto.

Esta configuración podría estar bien si tuvieras alguna forma de asegurar que solo los clientes FTP se están conectando a un servidor FTP en estos puertos. Desafortunadamente, no puedes controlar fácilmente qué aplicaciones pueden acceder a qué puertos. Incluso si limitaras solo a los clientes FTP a estos puertos, estarías bloqueando el acceso de otras aplicaciones a los puertos de número alto.

Google vs Microsoft: Quién ofrece el mejor almacenamiento en la nube

Para complicar aún más las cosas, también debes permitir el acceso de entrada a todos los puertos de número alto. El resultado es que debes permitir acceso de entrada y salida a todos los puertos de número alto. Como imaginarás, esta no es una configuración de seguridad sostenible.

Una forma de mejorar la situación del filtrado de paquetes es limitar el acceso al puerto TCP 21 en la salida solo desde ciertos clientes. Sin embargo, aún te enfrentas al problema de la falsificación de direcciones IP.

Firewall del lado del servidor en modo PASV

Estos son los puertos que debes abrir en el lado del servidor de la conexión en modo PASV:

Salida: Puertos TCP 1025 y superiores

Entrada: Puerto TCP 21 y puertos TCP 1025 y superiores

Esta es la otra cara de la configuración de filtrado de paquetes para el cliente en modo PASV. Debes abrir los puertos TCP 1025 y superiores para permitir el acceso de entrada y salida. Nuevamente, podrías tener cierto control limitando las direcciones IP que tienen acceso, pero te enfrentarás a los mismos problemas que con los clientes PASV.

Cómo cambiar y administrar la cuenta de Administrador local en Windows mediante Group Policy

Resolviendo el problema del FTP

Afortunadamente, la mayoría de nosotros utilizamos firewall/routers que tienen más inteligencia que solo filtrado de paquetes básico. Los firewall/routers con filtrado de paquetes con estado (stateful packet filtering) no requieren que abras rangos estáticos de puertos de respuesta porque incluyen mecanismos que leen la parte de datos de los paquetes FTP, que incluyen los detalles de los comandos PORT y PASV.

Por ejemplo, cuando el cliente FTP envía un comando en modo PORT al servidor FTP, el firewall/router puede abrir temporalmente un puerto de respuesta y permitir que el servidor FTP cree una nueva conexión (no ACK) en ese puerto. El puerto se cerrará después de que se complete la comunicación. Este enfoque evita la necesidad de abrir filtros de entrada estáticos para el rango de puertos alto en el firewall/router.

Otro ejemplo de mejora de la seguridad del firewall ocurre cuando el cliente PASV envía un comando PASV al servidor FTP. El firewall interceptará la información en el comando PASV y permitirá el acceso de salida al puerto de número alto en el servidor FTP desde el cliente FTP hasta que se complete la comunicación. Esto evita la necesidad de abrir acceso de salida a todos los puertos de número alto para clientes FTP en modo PASV.

Los cálculos se vuelven un poco más complejos cuando el firewall/router también realiza servicios de Traducción de Direcciones de Red por Puertos (Port Network Address Translation, PNAT) para clientes y servidores FTP. El firewall/router no puede usar la dirección IP y el número de puerto del cliente o servidor FTP (incluidos en los comandos PORT o PASV) porque estas direcciones no son enrutables directamente y el firewall/router no puede garantizar que el puerto en el comando PASV o PORT estará disponible en su interfaz externa (conexión a Internet). En el caso del firewall/router PNAT, el dispositivo debe recrear la comunicación (procesar la solicitud) y reemplazar la dirección IP y los puertos contenidos en los comandos PORT y PASV por aquellos que sean válidos en la interfaz externa del firewall/router. En efecto, el firewall/router se convierte en el cliente o servidor FTP en nombre del cliente o servidor FTP de la red interna. La mayoría de los firewalls y routers PNAT pueden realizar esta solicitud de FTP.

Resumen

El protocolo FTP es un protocolo algo complicado que definitivamente no fue diseñado teniendo en cuenta la seguridad de los firewalls. Los clientes FTP pueden usar uno de dos modos: modo PORT y modo PASV. Si bien el modo PORT ha existido durante más tiempo, el modo PASV es más popular porque no requiere que se haga una nueva conexión de entrada al cliente FTP desde el servidor FTP. Los firewalls y routers modernos tienen componentes que pueden manejar los detalles de las solicitudes de conexión contenidos en los comandos PORT y PASV para mejorar los problemas de seguridad relacionados con el FTP.

Cómo generar cadenas aleatorias únicas en una aplicación escalable

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Nube, allí encontraras muchos artículos similares a Cómo funciona el protocolo FTP y cómo resolver problemas relacionados con él , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.