martes, 12 de enero de 2010

FTP ACTIVO vs FTP PASIVO

Como ya sabemos, en toda transferencia ftp interviene un programa servidor y otro cliente. El servidor se ejecuta donde se encuentran almacenados los ficheros que se desean descargar (o donde se almacenan aquellos que son subidos) y el cliente es el programa ftp usado desde la máquina local para descargar o subir los ficheros deseados.

En este proceso de comunicación entre el cliente y el servidor, el cliente puede actuar de dos maneras diferentes: modo ACTIVO o modo PASIVO.

MODO ACTIVO

Dicho modo es el habitual por defecto. Cuando usamos ftp de esta forma, se establecen dos conexiones distintas. En primer lugar se establece una conexión para la transmisión de comandos desde cualquier puerto de nuestro ordenador, inferior al 1024 hacia el puerto 21 del servidor. A través de esta misma conexión, mediante un comando PORT se indica al servidor cual será el puerto de nuestra máquina que se colocará a la escucha de datos.

De esta forma, si nos disponemos a descargar un fichero, es el servidor quien inicia la transferencia de los datos, desde su puerto 20 al puerto que se le ha sido indicado. Debido a esto, es por lo que se conoce como modo ACTIVO.
EJEMPLO 1. El puerto de control del cliente (1026) se conecta al puerto de control del servidor (21) y le envía el numero del puerto de datos (1027).

2. El servidor responde con un ACK al puerto de control del cliente.

3. El servidor inicia una conexión entre su puerto de datos (20) y el puerto de datos del cliente (1027).

4. El cliente responde con un ACK al servidor.

MODO PASIVO

Por el contrario, en modo pasivo es siempre el programa cliente quien inicia la conexión con el servidor. Al abrir una conexión ftp, se abre primeramente una conexión de control desde un puerto inferior a 1024 de la máquina local al puerto 21 del servidor. El cliente pasa a modo pasivo enviando el comando PASV y pidiendo un puerto abierto al servidor. Tras recibir la respuesta, será el cliente quien establezca la conexión de datos con el servidor a través del puerto que le ha sido enviado.

EJEMPLO

1. El puerto de control del cliente (1026) se conecta al puerto de control del servidor (21) y envía PASV.

2. El servidor responde al cliente con el puerto 2024, puerto aleatorio de datos abierto para conexiones de datos.

3. El cliente inicia una conexión desde su puerto de datos (1027) al puerto de datos del servidor (2024).

4. Finalmente, el servidor envía de vuelta un ACK al puerto de datos del cliente.


Como resumen podríamos decir, que en el modo pasivo las conexiones son siempre abiertas por el cliente, mientras que en el modo activo son abiertas por aquel que envía los datos, es decir, el servidor si se trata de descargar archivos a la máquina local y el cliente si de lo que se trata es de subir archivos al servidor.

PROBLEMA CONEXIÓN MODO ACTIVO

Como ya se ha comentado, en el modo activo se abre una conexión para datos desde el servidor hacia el cliente, es decir, una conexión desde fuera hacia dentro, lo que podría provocar que si el cliente estuviera protegido con un cortafuegos, éste filtrara o bloqueara la conexión entrante, al considerarlo un proceso desconocido. Debido a esto, surge el modo pasivo, en el cual es el cliente quien inicia ambas conexiones, tanto control como datos, con lo que el contafuegos ya no tiene ninguna conexion entrante que filtrar o bloquear.

15 comentarios:

  1. Me parece un esquema muy claro.
    ¡Gracias!

    ResponderEliminar
  2. Buen artículo solo un pequeño detalle
    según se me enseña en clase los puertos siempre son superiores a 1024, salu2

    ResponderEliminar
    Respuestas
    1. A mí también me están enseñando en clase que son superiores al puerto 1024.
      Excelente aporte.

      Eliminar
    2. Hola amigos, yo también noté este detalle, pero creo que es un error de redacción ya que en los ejemplos sí se están utilizando puertos arriba de 1024.

      Eliminar
    3. El FTP usa el puerto 20 y 21. Los puertos arriba del 1024 son para el usuario

      Eliminar
  3. Bien explicado, sali de dudas gracias

    ResponderEliminar
  4. coincido, los puertos creo que deben ser superiores a 1024, es mas, en los ejemplos usa el 1027..

    ResponderEliminar
  5. Gracias por el artículo. Una pregunta, en modo pasivo, cuando el servidor le da un nuevo puerto al cliente para la transferencia, este puerto debería estar también mapeado en el router apuntando al servidor??

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Acá dice que en FTP Pasivo utiliza otros puertos:

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd421710(v=ws.10)

    ResponderEliminar
  8. Simple y con imágenes de ejemplo... excelente artículo.

    ResponderEliminar