¿Puede alguien decirme cuál es la diferencia entre el FTP activo y el pasivo? ¿Cuál es preferible?
Activo y pasivo son los dos modos en los que puede funcionar el FTP.
En realidad, FTP utiliza dos canales entre el cliente y el servidor, el canal de comandos y el de datos, que en realidad son conexiones TCP separadas.
El canal de comandos es para los comandos y las respuestas, mientras que el canal de datos es para la transferencia de archivos.
Esta separación de la información de los comandos y de los datos en canales separados es una forma ingeniosa de poder enviar comandos al servidor sin tener que esperar a que termine la transferencia de datos en curso. Según el RFC, esto sólo es obligatorio para un subconjunto de comandos, como salir, abortar la transferencia actual y obtener el estado.
En modo activo, el cliente establece el canal de comandos pero el servidor es responsable de establecer el canal de datos. Esto puede ser un problema si, por ejemplo, la máquina cliente está protegida por cortafuegos y no permite peticiones de sesión no autorizadas de partes externas.
En modo pasivo, el cliente establece ambos canales. Ya sabemos que establece el canal de comandos en modo activo y hace lo mismo aquí.
Sin embargo, entonces solicita al servidor (en el canal de comandos) que empiece a escuchar en un puerto (a discreción del servidor) en lugar de intentar establecer una conexión con el cliente.
Como parte de esto, el servidor también devuelve al cliente el número de puerto que ha seleccionado para escuchar, para que el cliente sepa cómo conectarse a él.
Una vez que el cliente lo sabe, puede crear con éxito el canal de datos y continuar.
Más detalles en el RFC: https://www.ietf.org/rfc/rfc959.txt
Hace poco me encontré con esta pregunta en mi trabajo, así que creo que debo decir algo más aquí. Utilizaré la imagen para explicar cómo funciona el FTP como fuente adicional para la respuesta anterior.
Modo activo:
Modo pasivo:
; En una configuración en modo activo, el servidor intentará conectarse a un puerto aleatorio del lado del cliente. Lo más probable es que ese puerto no sea uno de los predefinidos. Como resultado, un intento de conexión a él será bloqueado por el cortafuegos y no se establecerá ninguna conexión.
Una configuración pasiva no tendrá este problema ya que el cliente será el que inicie la conexión. Por supuesto, es posible que el lado del servidor también tenga un cortafuegos. Sin embargo, dado que se espera que el servidor reciba un mayor número de peticiones de conexión en comparación con un cliente, entonces no sería más que lógico que el administrador del servidor se adaptara a la situación y abriera una selección de puertos para satisfacer las configuraciones en modo pasivo.
Así que lo mejor sería que configuraras el servidor para que soporte el modo pasivo de FTP. Sin embargo, el modo pasivo haría que su sistema fuera vulnerable a los ataques, ya que los clientes deben conectarse a puertos aleatorios del servidor. Por lo tanto, para soportar este modo, no sólo su servidor debe tener múltiples puertos disponibles, su cortafuegos también debe permitir que las conexiones a todos esos puertos pasen.
Para mitigar los riesgos, una buena solución sería especificar un rango de puertos en tu servidor y luego permitir sólo ese rango de puertos en tu cortafuegos.
Para más información, lea el documento oficial.
Versión reeditada de mi artículo Modos de conexión FTP (activo vs. pasivo):
El modo de conexión FTP (activo o pasivo), determina cómo se establece una conexión de datos. En ambos casos, un cliente crea una conexión de control TCP al puerto 21 de comandos del servidor FTP. Se trata de una conexión saliente estándar, como la de cualquier otro protocolo de transferencia de archivos (SFTP, SCP, WebDAV) o cualquier otra aplicación cliente TCP (por ejemplo, un navegador web). Por lo tanto, normalmente no hay problemas al abrir la conexión de control.
Donde el protocolo FTP es más complicado en comparación con los otros protocolos de transferencia de archivos es en las transferencias de archivos. Mientras que los otros protocolos utilizan la misma conexión tanto para el control de la sesión como para las transferencias de archivos (datos), el protocolo FTP utiliza una conexión separada para las transferencias de archivos y los listados de directorios.
En el modo activo, el cliente comienza a escuchar en un puerto aleatorio para las conexiones de datos entrantes del servidor (el cliente envía el comando FTP PORT
para informar al servidor en qué puerto está escuchando). Hoy en día, es típico que el cliente esté detrás de un cortafuegos (por ejemplo, el cortafuegos integrado de Windows) o de un router NAT (por ejemplo, un módem ADSL), incapaz de aceptar conexiones TCP entrantes.
Por esta razón se introdujo el modo pasivo, que es el más utilizado hoy en día. Usar el modo pasivo es preferible porque la mayor parte de la compleja configuración se hace sólo una vez en el lado del servidor, por un administrador experimentado, en lugar de hacerlo individualmente en el lado del cliente, por usuarios (posiblemente) inexpertos.
En el modo pasivo, el cliente utiliza la conexión de control para enviar un comando PASV
al servidor y luego recibe una dirección IP y un número de puerto del servidor, que el cliente utiliza para abrir una conexión de datos a la dirección IP y el número de puerto del servidor recibidos.
Con el modo pasivo, la mayor parte de la carga de configuración está en el lado del servidor. El administrador del servidor debe configurarlo como se describe a continuación.
El cortafuegos y el NAT en el lado del servidor FTP tienen que ser configurados no sólo para permitir/enrutar las conexiones entrantes en el puerto FTP 21, sino también un rango de puertos para las conexiones de datos entrantes. Normalmente, el software del servidor FTP tiene una opción de configuración para establecer un rango de puertos que el servidor utilizará. Y el mismo rango tiene que ser abierto/enrutado en el firewall/NAT.
Cuando el servidor FTP está detrás de un NAT, necesita saber su dirección IP externa, para poder proporcionarla al cliente en una respuesta al comando PASV
.
Con el modo activo, la mayor parte de la carga de configuración está en el lado del cliente.
El cortafuegos (por ejemplo, el cortafuegos de Windows) y el NAT (por ejemplo, las reglas de enrutamiento del módem ADSL) en el lado del cliente tienen que ser configurados para permitir/enrutar un rango de puertos para las conexiones de datos entrantes. Para abrir los puertos en Windows, vaya a Panel de control > Sistema y seguridad > Firewall de Windows > Configuración avanzada > Reglas de entrada > Nueva regla. Para enrutar los puertos en el NAT (si lo hay), consulte su documentación.
Cuando hay NAT en su red, el cliente FTP necesita saber su dirección IP externa que el WinSCP necesita proporcionar al servidor FTP usando el comando PORT
. Para que el servidor pueda conectarse correctamente con el cliente para abrir la conexión de datos. Algunos clientes FTP son capaces de autodetectar la dirección IP externa, otros tienen que ser configurados manualmente.
Algunos firewalls/NATs intentan abrir/cerrar automáticamente los puertos de datos inspeccionando la conexión de control FTP y/o traducir las direcciones IP de la conexión de datos en el tráfico de la conexión de control.
Con este tipo de cortafuegos/NAT, la configuración anterior no es necesaria para un FTP simple sin cifrar. Pero esto no puede funcionar con FTPS, ya que el tráfico de la conexión de control está encriptado y el cortafuegos/NAT no puede inspeccionarlo ni modificarlo.