Para qué sirven FTPS, FTPES y SFTP: Diferencias entre estos protocolos

Cuando queremos transferir carpetas y archivos a través de la red local o Internet, el protocolo FTP es ampliamente utilizado. La mayoría de routers con puerto USB, y todos los servidores NAS, disponen de este protocolo para facilitar la transferencia de archivos, sin embargo, FTP no cifra ni la autenticación con usuario/clave ni tampoco los datos transferidos, por lo que cualquiera podría capturar la información transmitida. FTPS, FTPES y SFTP son protocolos que nos permiten transferir datos de manera segura, y hoy en RedesZone os vamos a explicar sus principales características y en qué se diferencian.

Protocolo FTP

El protocolo FTP (File Transfer Protocol), o también conocido como protocolo de transferencia de ficheros, es un protocolo de la capa de aplicación que utiliza el protocolo TCP en la capa de transporte. FTP utiliza una arquitectura cliente-servidor, por lo que desde uno o varios equipos cliente nos podremos conectar a un mismo servidor. El puerto por defecto que utiliza FTP es el TCP 21 para control, por este puerto se gestiona el establecimiento de la conexión, pero no se transfieren datos a través de este puerto. Dependiendo del modo de funcionamiento de FTP, utilizará unos puertos u otros con el fin de transmitir la información. FTP tiene dos modos de funcionamiento:

  • Modo activo: en este modo de funcionamiento el servidor FTP crea el canal de datos en el puerto TCP 20, mientras que en el lado del cliente se elige un puerto aleatorio superior al puerto TCP 1024. En este modo de funcionamiento es obligatorio que el cliente FTP tenga abierto los puertos superiores al 1024, algo peligroso si estamos conectados a Internet, y que también presenta problemas si estamos detrás de NAT. Para solucionar este problema se desarrolló el modo pasivo (PASV), el cual es el más utilizado actualmente.
  • Modo pasivo: en este modo de funcionamiento, a través del puerto 21 de control, el servidor FTP le dice al cliente FTP a qué puerto externo debe conectarse para transferir la información. De esta forma, el cliente establecerá una conexión desde el puerto que le haya indicado. De esta manera, el servidor FTP deberá tener un puerto TCP 21 para el canal de control, y un rango de puertos TCP a elegir por el propio administrador.

En ambos modos de funcionamiento, la autenticación y la transferencia de datos se realiza sin ningún tipo de cifrado. Esto significa que, si hay «alguien» escuchando el canal de comunicación, no solamente podría capturar las credenciales de acceso a nuestro servidor FTP, sino también los datos que estemos transmitiendo.

Protocolos FTPS y FTPES

Para solucionar el problema de la confidencialidad (cifrado de los datos) en la autenticación y en la transferencia de datos, se decidió añadir una capa de seguridad SSL/TLS al propio protocolo FTP. FTPS y FTPES también se conocen como FTP over TLS/SSL, y están basados en el propio protocolo FTP.

FTPS se conoce como FTPS Implícito, es una forma antigua de proporcionar seguridad y privacidad al protocolo FTP. En este protocolo el cliente FTP se conecta a un puerto distinto al puerto TCP 21, por defecto, se hace uso del puerto TCP 990 para realizar la conexión. En este caso, el canal de datos hace uso del protocolo TCP 989. Antes de intercambiar ninguna información con el servidor FTP, se realiza una negociación TLS/SSL para asegurar todo el canal de comunicación, por tanto, la autenticación y la transferencia de archivos está asegurada con TLS.

FTPES se conoce como FTPS Explícito, y es el protocolo que se utiliza actualmente cuando queremos activar la seguridad en FTP. En este modo de funcionamiento, el cliente FTPS debe pedir explícitamente seguridad en el servidor, y luego pasar a un método de cifrado compatible por ambos. Lo primero que hará el cliente FTPES es conectarse al puerto TCP 21 del servidor FTP, si el cliente está configurado para requerir obligatoriamente seguridad, y si el servidor FTP tiene habilitado el protocolo FTPES, entonces se establecerá una comunicación cifrada con TLS antes de autenticarnos y transferir información. Si nos interesa proporcionar siempre la máxima seguridad a los clientes FTPES en todas las conexiones, deberemos activar en el servidor FTP que solamente queremos permitir conexiones FTP over TLS/SSL, rechazando cualquier conexión FTP normal, de esta forma, solamente se podrá utilizar el protocolo FTPES. El protocolo FTPES no requiere la apertura de ningún puerto adicional en el servidor, ni tampoco en el cliente, simplemente usará el puerto TCP 21 de control y un puerto aleatorio (entre un determinado rango de puertos) para transferir la información.

FTPES utiliza los protocolos TLS 1.0, 1.1, 1.2 e incluso TLS 1.3 si lo permite el servidor y el cliente. Debido a la utilización del protocolo TLS/SSL, deberemos configurar en el servidor un certificado RSA o similar, con su clave pública y su clave privada, para poder levantar correctamente el servicio de FTP.

En la siguiente imagen podéis ver la configuración del servidor FTP en el sistema operativo XigmaNAS. Podremos habilitar las conexiones TLS, y deberemos indicar un certificado y también la clave privada asociada. Por último, nos permite habilitar solamente las conexiones TLS, rechazando las conexiones FTP «normales» sin cifrar.

Al conectarnos con un cliente FTPES como por ejemplo FileZilla, podremos ver la negociación TLS que hemos realizado. Nosotros actualmente estamos negociando con el último protocolo TLS 1.3, tal y como podéis ver:

Dependiendo del software del servidor FTPES y de la configuración, podremos negociar con diferentes protocolos TLS, diferentes suites de cifrado simétrico, intercambio de claves e incluso diferentes algoritmos de clave pública. Esto dependerá de la configuración que hayas realizado.

Gracias a este protocolo FTPES, todas nuevas comunicaciones con el servidor FTP estarán cifradas y autenticadas, tanto a la hora de autenticarnos como en la transferencia de ficheros.

Protocolo SFTP

El protocolo SFTP (SSH File Transfer Protocol) o también conocido como transferencia de ficheros SSH, es un protocolo que no tiene nada que ver con el protocolo FTP. SFTP no es la versión segura del protocolo FTP, ya que está basado en el protocolo SSH por completo. Este protocolo SFTP nos permite autenticarnos y realizar transferencia de ficheros entre equipos como si fuera un servidor FTPES, pero utilizando criptografía del protocolo SSH que tengamos instalado en el servidor de archivos. SFTP tampoco es un protocolo donde FTP utilice SSH para asegurar la conexión, es un protocolo completamente nuevo basado en SSH y no en FTP.

El protocolo SFTP hace uso del puerto TCP 22 por defecto, el mismo que el protocolo SSH. Si en nuestro servidor de archivos tenemos un servidor SSH para ejecutar comandos CLI, también tendremos la opción de habilitar el SFTP para conectarnos con clientes SFTP como FileZilla, y comenzar a transferir archivos. La autenticación de SFTP es exactamente la misma que en SSH, es decir, si en SSH utilizamos clave pública, en SFTP también deberemos hacer uso de esta criptografía de clave pública.

Si nos metemos en la sección de servidor SSH de XigmaNAS, podemos ver la siguiente configuración, donde usamos el puerto TCP 22 y la configuración con autenticación usuario/clave y no utilizando clave pública.

En el cliente FileZilla si ponemos en la barra de dirección sftp://ip podremos acceder directamente con este protocolo de transferencia de archivos basado en SSH. También podremos ver qué algoritmos de intercambio de claves estamos utilizando, cuál es la clave del servidor, así como la huella digital, y también el cifrado simétrico AES-256-GCM.

Si quieres utilizar el protocolo SFTP, debes recordar que depende del servidor SSH y no del servidor FTP, por lo que deberás configurar adecuadamente los permisos de usuarios en función del nivel de acceso vía SSH.

¿Qué protocolo es más seguro para transferir ficheros?

Actualmente el protocolo FTPS (Implícito) no se utiliza en la mayoría de los casos, a favor del protocolo FTPES (Explícito) tal y como os hemos explicado. SFTP se utiliza ampliamente para transferir datos a servidores dedicados, servidores VPS e incluso a nuestro hosting, ya que, si tenemos instalado el servidor SSH, también tendremos el protocolo SFTP disponible, sin necesidad de instalar software adicional como ProFTPd, vsFTPd u otros.

En cuanto a la seguridad, tanto FTPES como SFTP son seguros, el primero está basado en el protocolo TLS (Transport Layer Security), y el segundo está basado en el propio protocolo SSH. En el caso de FTPES deberemos crear una Infraestructura de Clave Pública (PKI) incorporando el certificado de la CA (Autoridad de Certificación) y su correspondiente clave privada, sin embargo, en SSH esto no es necesario y facilita enormemente la configuración. Tal y como habéis visto en las capturas del cliente, la principal diferencia entre ellos es cómo establecemos la conexión segura, pero una vez establecida la conexión, la transferencia de los datos se realiza con AES-256-GCM en ambos.