Tabla de Contenidos

09 - FTP

La transferencia de ficheros es un proceso fundamental en las redes informáticas, ya que permite el intercambio de datos entre diferentes dispositivos conectados. En un entorno de red, los usuarios y sistemas necesitan mover archivos de un lugar a otro, ya sea para compartir información, realizar copias de seguridad o mantener sistemas sincronizados.

Para facilitar este intercambio, existen varios protocolos de comunicación que permiten transferir archivos de manera eficiente y segura. Uno de los protocolos más utilizados para la transferencia de ficheros en redes TCP/IP es el File Transfer Protocol (FTP).

FTP es un protocolo de red estándar utilizado para la transferencia de archivos entre un cliente y un servidor a través de una red, generalmente Internet. FTP se basa en el modelo cliente-servidor, donde el cliente FTP envía comandos para interactuar con el servidor FTP, permitiendo así la descarga y subida de archivos de forma bidireccional.

FTP se diseñó inicialmente en 1971 y ha sido uno de los métodos más confiables para la transferencia de ficheros en Internet, aunque en sus primeras versiones no se implementaba ninguna encriptación de los datos, lo que plantea problemas de seguridad.

El funcionamiento de FTP se basa en una conexión de dos canales entre el cliente y el servidor:

Además de la transferencia de archivos, FTP permite realizar operaciones sobre el sistema de archivos del servidor, como listar directorios, crear nuevos directorios o borrar archivos. A pesar de ser muy utilizado, FTP transmite los datos, incluidas las credenciales de acceso (usuario y contraseña), en texto plano, lo que representa un riesgo de seguridad. Para contrarrestar esto, existen variantes más seguras como FTPS y SFTP, que utilizan encriptación

Tipos de conexión

El protocolo FTP utiliza dos tipos de conexiones principales: el modo activo y el modo pasivo. Ambos se diferencian en cómo se establece la conexión para la transferencia de datos, mientras que la conexión de control (por el puerto 21 del servidor) se mantiene igual.

Modo Activo

En el modo activo, el cliente inicia la comunicación abriendo una conexión al puerto 21 del servidor. A través de esta conexión, el cliente envía comandos y recibe respuestas del servidor. Cuando el cliente necesita transferir datos, ya sea para descargar un archivo, subirlo o listar un directorio, le indica al servidor que abra una conexión de datos.

El cliente informa al servidor qué puerto local tiene abierto para recibir la conexión de datos. El servidor entonces establece una conexión activa desde su puerto 20 hacia el puerto especificado en el cliente.

Este modo requiere que el cliente esté disponible para aceptar conexiones entrantes, lo cual puede ser un problema si está detrás de un firewall o un router con NAT, ya que estas configuraciones suelen bloquear conexiones externas.

ClientServerClient DataClient DataClient ControlClient ControlServer Control (21)Server Control (21)Server Data (20)Server Data (20)Conexión al puerto 21Respuesta en el canal de controlPORT <client-ip:port>200 Command okayConexión al puerto especificadoTransferencia del archivo

Modo Pasivo

En el modo pasivo, el cliente inicia la comunicación abriendo una conexión al puerto 21 del servidor. Este canal se utiliza para enviar comandos y recibir respuestas. Cuando el cliente necesita transferir datos, solicita al servidor que entre en modo pasivo mediante el comando PASV.

En respuesta, el servidor abre un puerto aleatorio para la transferencia de datos y le informa al cliente qué puerto está escuchando. El cliente, entonces, inicia una conexión a ese puerto para transferir los datos.

Este modo es útil cuando el cliente está detrás de un firewall o un router con NAT, ya que evita la necesidad de aceptar conexiones entrantes.

ClientServerClient DataClient DataClient ControlClient ControlServer Control (21)Server Control (21)Server Data (random)Server Data (random)Conexión al puerto 21Respuesta en el canal de controlPASV227 Entering Passive ModeConexión al puerto especificadoTransferencia del archivo

Tipos de FTP

FTP cuenta con varias variantes diseñadas para cubrir diferentes necesidades, especialmente en cuanto a seguridad:

FTP estándar

El protocolo original no incluye mecanismos de encriptación. Todas las comunicaciones, incluidas las credenciales, se transmiten en texto plano, lo que lo hace vulnerable a ataques como el sniffing. Aunque su uso ha disminuido por razones de seguridad, sigue siendo útil en redes cerradas o entornos controlados.

FTPS (FTP Secure)

Añade cifrado mediante SSL/TLS para proteger las credenciales y los datos durante la transferencia. Se basa en los mismos comandos que el FTP estándar, pero con encriptación.

SFTP (SSH File Transfer Protocol)

Basado en el protocolo SSH, utiliza un único canal cifrado para comandos y datos, proporcionando seguridad y autenticación robusta. Aunque comparte funciones similares con FTP, es un protocolo diferente que no requiere múltiples conexiones y resulta más eficiente y seguro en la mayoría de los casos.

Clientes FTP

Para interactuar con servidores FTP, se utilizan clientes que permiten realizar conexiones, enviar comandos y transferir archivos. Estos clientes pueden clasificarse en dos tipos principales:

Clientes de terminal

La mayoría de los sistemas operativos incluyen un cliente FTP básico que permite conectarse a servidores y realizar operaciones mediante comandos:

Si el cliente no está disponible en el sistema, puede instalarse desde los repositorios o configurarse con herramientas adicionales. Estas herramientas resultan especialmente útiles en entornos minimalistas o de administración remota.

Clientes con interfaz gráfica

Para quienes prefieren una experiencia visual, aplicaciones como Filezilla ofrecen una interfaz intuitiva. Estas aplicaciones simplifican las transferencias de archivos mediante características como:

El uso de clientes gráficos es ideal para usuarios no técnicos o cuando se trabaja con una gran cantidad de archivos y directorios.

Ambos tipos de clientes son compatibles con servidores FTP estándar y variantes seguras como FTPS y SFTP, permitiendo elegir la herramienta adecuada según las necesidades.

Conexión a un servidor FTP

Para probar la conexión a un servidor FTP, utilizaremos el servicio gratuito proporcionado por dlptest.com, que permite realizar pruebas de transferencia. Las credenciales necesarias para la conexión están disponibles en la propia página web.

Terminal

Abre una terminal y escribe el siguiente comando:

ftp ftp.dlptest.com

Cuando se conecte, deberías ver un mensaje de bienvenida del servidor y la opción de ingresar el usuario y la contraseña:

Conectado a ftp.dlptest.com.
220 Welcome to the DLP Test FTP Server
200 Always in UTF8 mode.
Usuario (ftp.dlptest.com:(none)): dlpuser
331 Please specify the password.
Contraseña:

Una vez autenticado, la terminal cambiará a modo interactivo FTP (ftp>).

FileZilla

Abre Filezilla y configura una nueva conexión:

Haz clic en Conexión rápida. Una vez conectado, podrás explorar los directorios y transferir archivos mediante la interfaz gráfica.

Este servidor de prueba no es seguro para datos sensibles. No lo uses para archivos confidenciales. Además, los archivos que subas a los 10 minutos.

Comandos FTP

Una vez estamos conectados al servidor FTP podemos ejecutar una serie de comandos. Para saber el listado disponible podemos ejecutar el comando help:

ftp> help
Los comandos se pueden abreviar.  Comandos:

!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir
ftp>

Algunos de los más utilizados son:

Comando Descripción
open Conecta al servidor FTP especificado.
close Cierra la conexión con el servidor FTP.
!expresión Ejecuta un comando del sistema local (en la terminal).
quit Cierra la sesión FTP y sale del cliente.
ls Lista los archivos y directorios en el directorio actual.
cd Cambia al directorio especificado.
mkdir Crea un nuevo directorio en el servidor FTP.
delete Elimina un archivo del servidor FTP.
rename Renombra un archivo en el servidor FTP.
get Descarga un archivo del servidor al cliente.
put Sube un archivo desde el cliente al servidor FTP.
pwd Muestra el directorio actual en el servidor FTP.
Es importante tener en cuenta que en ciertos entornos de red, como en centros educativos, empresas o redes que utilizan un proxy o un firewall, algunos comandos de FTP pueden no funcionar correctamente, especialmente aquellos que dependen de la conexión directa. Esto es debido a que los proxies o firewalls pueden bloquear puertos o impedir las conexiones de entrada, afectando la transferencia de archivos y otros comandos FTP.
Los clientes FTP con interfaz gráfica, como FileZilla, ejecutan los comandos de FTP de manera transparente al usuario. Esto significa que, aunque no sea necesario escribir los comandos manualmente, como ls, get o put, estos se ejecutan automáticamente en segundo plano al interactuar con la interfaz. Estos programas simplifican el uso de FTP al ofrecer una experiencia visual más accesible, pero siguen utilizando los mismos comandos que se emplearían en un cliente de terminal.

Ejercicios

Ejercicio 1

Ejercicio 2

Haz el ejercicio anterior usando FileZilla pero no elimines el archivo ni el directorio

Ejercicio 3

Intenta subir un archivo desde un cliente FTP en terminal (como ftp o lftp) al directorio creado en el ejercicio 2 ¿Por qué no te deja?

Ejercicio 4

Ejercicio 5