¿Cuál es la diferencia entre FTP activo y pasivo?

Resuelto karthik asked hace 14 años • 5 respuestas

¿Alguien puede decirme cuál es la diferencia entre FTP activo y pasivo?
¿Cuál es preferible?

karthik avatar Nov 09 '09 11:11 karthik
Aceptado

Activo y pasivo son los dos modos en los que se puede ejecutar FTP.

En segundo plano, FTP en realidad utiliza dos canales entre el cliente y el servidor, los canales de comando y de datos, que en realidad son conexiones TCP separadas .

El canal de comando es para comandos y respuestas, mientras que el canal de datos es para transferir archivos.

Esta separación de información de comandos y datos en canales separados es una forma ingeniosa de poder enviar comandos al servidor sin tener que esperar a que finalice la transferencia de datos actual. Según RFC, esto solo es obligatorio para un subconjunto de comandos, como salir, cancelar la transferencia actual y obtener el estado.


En modo activo , el cliente establece el canal de comando pero el servidor es responsable de establecer el canal de datos. En realidad, esto puede ser un problema si, por ejemplo, la máquina cliente está protegida por firewalls y no permite solicitudes de sesión no autorizadas de partes externas.

En modo pasivo , el cliente establece ambos canales. Ya sabemos que establece el canal de comando en modo activo y aquí hace lo mismo.

Sin embargo, luego solicita al servidor (en el canal de comando) que comience 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, de modo 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 están disponibles en el RFC: https://www.ietf.org/rfc/rfc959.txt

paxdiablo avatar Nov 09 '2009 04:11 paxdiablo

Recientemente me encontré con esta pregunta en mi lugar de trabajo, así que creo que debería decir algo más aquí. Usaré la imagen para explicar cómo funciona el FTP como fuente adicional para la respuesta anterior.

Modo activo:

modo activo


Modo pasivo:

ingrese la descripción de la imagen aquí


En una configuración de modo activo, el servidor intentará conectarse a un puerto aleatorio del lado del cliente. Entonces, lo más probable es que ese puerto no sea uno de esos puertos predefinidos. Como resultado, el firewall bloqueará cualquier intento de conectarse y no se establecerá ninguna conexión.

ingrese la descripción de la imagen aquí


Una configuración pasiva no tendrá este problema ya que será el cliente quien inicie la conexión. Por supuesto, es posible que el lado del servidor también tenga un firewall. Sin embargo, dado que se espera que el servidor reciba una mayor cantidad de solicitudes de conexión en comparación con un cliente, entonces sería lógico que el administrador del servidor se adapte a la situación y abra una selección de puertos para satisfacer las configuraciones del modo pasivo.

Por lo tanto, sería mejor que configure el servidor para que admita FTP en modo pasivo. Sin embargo, el modo pasivo haría que su sistema sea vulnerable a ataques porque se supone que los clientes deben conectarse a puertos de servidor aleatorios. Por lo tanto, para admitir este modo, su servidor no solo debe tener múltiples puertos disponibles, sino que su firewall también debe permitir el paso de conexiones a todos esos puertos.

Para mitigar los riesgos, una buena solución sería especificar un rango de puertos en su servidor y luego permitir solo ese rango de puertos en su firewall.

Para obtener más información, lea el documento oficial .

Yuantao avatar Dec 10 '2013 21:12 Yuantao

Versión redactada de mi artículo Modos de conexión FTP (activo frente a 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 a un puerto de comando 21 del servidor FTP. Esta es una conexión saliente estándar, como con cualquier otro protocolo de transferencia de archivos (SFTP, SCP, WebDAV) o cualquier otra aplicación de cliente TCP (por ejemplo, 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 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 sesiones como para las transferencias de archivos (datos), el protocolo FTP utiliza una conexión independiente para las transferencias de archivos y los listados de directorios.

En el modo activo , el cliente comienza a escuchar en un puerto aleatorio las conexiones de datos entrantes desde el servidor (el cliente envía el comando FTP PORTpara informar al servidor en qué puerto está escuchando). Hoy en día, es típico que el cliente esté detrás de un firewall (por ejemplo, un firewall integrado en Windows) o un enrutador NAT (por ejemplo, un módem ADSL), incapaz de aceptar conexiones TCP entrantes.

Por esta razón se introdujo el modo pasivo y se utiliza principalmente hoy en día. Es preferible usar el modo pasivo porque la mayor parte de la configuración compleja se realiza solo una vez en el lado del servidor, por parte de un administrador experimentado, en lugar de hacerlo individualmente en el lado del cliente, por parte de usuarios (posiblemente) sin experiencia.

En el modo pasivo , el cliente usa la conexión de control para enviar un PASVcomando al servidor y luego recibe una dirección IP del servidor y un número de puerto del servidor, que luego el cliente usa para abrir una conexión de datos con la dirección IP del servidor y el servidor. número de puerto recibido.

Configuración de red para modo pasivo

Con el modo pasivo , la mayor parte de la carga de configuración recae en el lado del servidor. El administrador del servidor debe configurar el servidor como se describe a continuación.

El firewall y NAT en el lado del servidor FTP deben configurarse no solo para permitir/enrutar las conexiones entrantes en el puerto FTP 21, sino también una variedad de puertos para las conexiones de datos entrantes. Normalmente, el software del servidor FTP tiene una opción de configuración para configurar una variedad de puertos que utilizará el servidor. Y el mismo rango debe abrirse/enrutarse en el firewall/NAT.

Cuando el servidor FTP está detrás de una NAT, necesita saber su dirección IP externa, para poder proporcionársela al cliente en respuesta a un PASVcomando.

Configuración de red para modo activo

Con el modo activo , la mayor parte de la carga de configuración recae en el lado del cliente.

El firewall (por ejemplo, el firewall de Windows) y NAT (por ejemplo, las reglas de enrutamiento del módem ADSL) en el lado del cliente deben configurarse para permitir/enrutar una variedad 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 la NAT (si corresponde), consulte su documentación.

Cuando hay NAT en su red, el cliente FTP necesita conocer su dirección IP externa que WinSCP debe proporcionar al servidor FTP mediante el PORTcomando. Para que el servidor pueda volver a conectarse correctamente con el cliente para abrir la conexión de datos. Algunos clientes FTP son capaces de detectar automáticamente la dirección IP externa, otros deben configurarse manualmente.

Firewalls/NAT inteligentes

Algunos firewalls/NAT intentan abrir/cerrar puertos de datos automáticamente inspeccionando la conexión de control FTP y/o traduciendo las direcciones IP de la conexión de datos en el tráfico de conexión de control.

Con dicho firewall/NAT, la configuración anterior no es necesaria para un FTP simple y sin cifrar. Pero esto no puede funcionar con FTPS, ya que el tráfico de la conexión de control está cifrado y el firewall/NAT no puede inspeccionarlo ni modificarlo.

Martin Prikryl avatar Jan 07 '2015 13:01 Martin Prikryl