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:

  • Canal de control (puerto 21): A través de este puerto, el cliente y el servidor se comunican para gestionar la sesión FTP, como la autenticación del usuario, la solicitud de archivos o directorios y la configuración de la conexión.
  • Canal de datos (puerto 20 en modo activo): Es el canal a través del cual se transfieren los archivos. Dependiendo del modo de operación (activo o pasivo), el cliente o el servidor son responsables de iniciar esta conexión.

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

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.

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

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

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.

  • Modo explícito: El cliente inicia una conexión no cifrada y solicita el uso de TLS/SSL antes de transmitir datos sensibles.
  • Modo implícito: Toda la conexión, desde el principio, está cifrada y suele emplear el puerto 990 en lugar del 21.

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.

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:

  • Linux/Unix: La herramienta `ftp` suele venir preinstalada y permite realizar operaciones básicas de transferencia de archivos. Alternativamente, `lftp` es una opción más avanzada, con soporte para FTPS/SFTP y funcionalidades como reintentos automáticos.
  • macOS: Incluye un cliente FTP nativo accesible desde la terminal, útil para tareas básicas.
  • Windows: Aunque versiones recientes no habilitan el comando `ftp` por defecto, sigue disponible como característica opcional. Además, se pueden usar herramientas más modernas como PowerShell para realizar operaciones FTP.

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:

  • Arrastrar y soltar archivos.
  • Gestión de conexiones (credenciales, direcciones, modos de conexión).
  • Visualización de logs en tiempo real para depurar errores.

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.

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.

  • Usuario: dlpuser
  • Contraseña: rNrKYTX9g7z3RgJRmxWuGHbeu

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:

  • Servidor: ftp.dlptest.com
  • Usuario: dlpuser
  • Contraseña: rNrKYTX9g7z3RgJRmxWuGHbeu
  • Protocolo: FTP (sin cifrado)
  • Puerto: 21 (si lo dejas en blanco, por defecto será ese puerto)

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.

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.

Ejercicio 1

  • Comprueba que puedes listar los archivos
  • Crea una carpeta en el servidor y accede a ella
  • Sube algún archivo al servidor ¿Cuánto tiempo permanece el archivo en el servidor?
  • Cambia el nombre del archivo
  • Descarga el archivo anterior a otra carpeta
  • Elimina el archivo y el directorio
  • Cierra la sesión

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

  • Configura una nueva conexión en FileZilla para conectarte al servidor ftp de test.rebex.net
  • Descárgate algún archivo a tu máquina
  • Intenta subir algún archivo al servidor ¿Por qué no te deja subir archivos?
  • Cierra la sesión

Ejercicio 5

  • Conéctate por terminal al servidor FTP de dlptest
  • Cambia a modo pasivo. Investiga el comando necesario para realizar este cambio y escribe el resultado
  • Busca el comando que permite listar los archivos del directorio actual en tu máquina local (sin cerrar la conexión)
  • Cambia de carpeta en tu máquina local sin salir de la conexión al servidor. Verifica tu nuevo directorio local
  • Desde el nuevo directorio local, selecciona un archivo cualquiera y súbelo al servidor FTP
  • Descarga el archivo subido previamente a otro directorio local diferente y verifica que se ha descargado correctamente
  • Finaliza la sesión
  • clase/smr/sr/2eval/ftp.txt
  • Última modificación: 2024/12/21 10:30
  • por cesguiro