Skip to content

Instantly share code, notes, and snippets.

@emrivero
Created February 16, 2022 17:22
Show Gist options
  • Save emrivero/6d4bccfa1e91c3ed13c6dabff8f54c91 to your computer and use it in GitHub Desktop.
Save emrivero/6d4bccfa1e91c3ed13c6dabff8f54c91 to your computer and use it in GitHub Desktop.
Apuntes
FTP (File Transfer Protocol - Protocolo de Transferencia de Archivos) es un programa que se
utiliza para transferir información, almacenada en ficheros, de una máquina remota a otra local,
o viceversa (RFC 959). Para poder realizar esta operación es necesario conocer la dirección IP (o
el "nombre") de la máquina a la que nos queremos conectar para realizar algún tipo de
transferencia.
El Servicio FTP es ofrecido por la capa de Aplicación del
modelo de capas de red TCP/IP al usuario, utilizando
normalmente el puerto de red 20 y el 21. Un problema
básico de FTP es que está pensado para ofrecer la
máxima velocidad en la conexión, pero no la máxima
seguridad, ya que todo el intercambio de información,
desde el login y password del usuario en el servidor
hasta la transferencia de cualquier archivo, se realiza en
texto plano sin ningún tipo de cifrado, con lo que un
posible atacante puede capturar este tráfico, acceder al
servidor, o apropiarse de los archivos transferidos.
Para solucionar este problema son de gran utilidad
aplicaciones como scp y sftp, incluidas en el paquete
SSH, que permiten transferir archivos pero cifrando
todo el tráfico.
En el modelo, el intérprete de protocolo (PI) de usuario, inicia la conexión de control en el puerto
21. Las órdenes FTP estándar las genera el PI de usuario y se transmiten al proceso servidor a
través de la conexión de control. Las respuestas estándar se envían desde el PI del servidor al PI
de usuario por la conexión de control como respuesta a las órdenes.
Estas órdenes FTP especifican parámetros para la conexión de datos (puerto de datos, modo de
transferencia, tipo de representación y estructura) y la naturaleza de la operación sobre el
sistema de archivos (almacenar, recuperar, añadir, borrar, etc.). El proceso de transferencia de
datos (DTP) de usuario u otro proceso en su lugar, debe esperar a que el servidor inicie la
conexión al puerto de datos especificado (puerto 20 en modo activo o estándar) y transferir los
datos en función de los parámetros que se hayan especificado.
Vemos también en el diagrama que la comunicación entre cliente y servidor es independiente
del sistema de archivos utilizado en cada computadora, de manera que no importa que sus
sistemas operativos sean distintos, porque las entidades que se comunican entre sí son los PI y
los DTP, que usan el mismo protocolo estandarizado: el FTP.
También hay que destacar que la conexión de datos es bidireccional, es decir, se puede usar
simultáneamente para enviar y para recibir, y no tiene por qué existir todo el tiempo que dura
la conexión FTP.
3.1 Modo Activo
En modo Activo, el servidor siempre crea el canal de datos en su puerto 20, mientras que en el
lado del cliente el canal de datos se asocia a un puerto aleatorio mayor que el 1024. Para ello,
el cliente manda un comando PORT al servidor por el canal de control indicándole ese número
de puerto, de manera que el servidor pueda abrirle una conexión de datos por donde se
transferirán los archivos y los listados, en el puerto especificado.
Lo anterior tiene un grave problema de seguridad, y es que la máquina cliente debe estar
dispuesta a aceptar cualquier conexión de entrada en un puerto superior al 1024, con los
problemas que ello implica si tenemos el equipo conectado a una red insegura como Internet.
De hecho, los cortafuegos que se instalen en el equipo para evitar ataques seguramente
rechazarán esas conexiones aleatorias. Para solucionar esto se desarrolló el modo Pasivo.
3.2 Modo Pasivo
Cuando el cliente envía un comando PASV sobre el canal de control, el servidor FTP le indica por
el canal de control, el puerto (mayor a 1023 del servidor. Ej: 2040 ) al que debe conectarse el
cliente. El cliente inicia una conexión desde el puerto siguiente al puerto de control (Ej: 1036)
hacia el puerto del servidor especificado anteriormente (Ej: 2040). [1]
Antes de cada nueva transferencia, tanto en el modo Activo como en el Pasivo, el cliente debe
enviar otra vez un comando de control (PORT o PASV, según el modo en el que haya conectado),
y el servidor recibirá esa conexión de datos en un nuevo puerto aleatorio (si está en modo
pasivo) o por el puerto 20 (si está en modo activo). En el protocolo FTP existen 5 tipos de
transferencia en ASCII y en binarios.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment