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

312

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

karthik
fuente

Respuestas:

474

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

Para el fondo, FTP en realidad usa dos canales entre el cliente y el servidor, el comando y los canales de datos, que en realidad son conexiones TCP separadas .

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

Esta separación de la información y los datos de los comandos 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 el RFC, esto solo 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 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 permitirá solicitudes de sesión no autorizadas de terceros.

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

Sin embargo, luego solicita al servidor (en el canal de comando) que comience a escuchar en un puerto (a discreción de los servidores) 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
fuente
1
No creo que la declaración sobre el puerto Y sea correcta, en modo activo el cliente no determina el puerto Y, el servidor intenta elegir aleatoriamente un número de puerto e intenta ver si el cliente permitiría la comunicación a través de ese puerto elegido . La razón por la que digo esto es que, si esto no es cierto (mi argumento), el lado del cliente, incluso si está detrás de un firewall, siempre puede crear dos reglas de firewall, una para la conexión saliente y otra para la conexión entrante.
arun.raj.mony
1
@arun, el cliente no tiene necesariamente el control del firewall. Ejemplo: en entornos corporativos, generalmente hay un firewall entre la red de toda la empresa y el mundo exterior, sobre el cual un cliente que ejecuta FTP no tiene energía.
paxdiablo
EN modo pasivo, ¿por qué el servidor envía al cliente un puerto aleatorio al cliente en lugar de que el cliente se conecte al puerto 20 del servidor directamente?
chengbo
@paxdiablo En modo pasivo, ¿por qué el servidor asigna un número de puerto aleatorio y lo envía al cliente para la conexión de datos? ¿Por qué el cliente no puede abrir directamente un canal de datos desde el puerto del cliente no al puerto no 20 en el lado del servidor?
Zephyr
1
Hice la pregunta aquí ahora networkengineering.stackexchange.com/q/43680/37406
Zephyr
166

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á un intento de conexión 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 el cliente será el que inicie la conexión. Por supuesto, también es posible que el lado del servidor 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 de modo pasivo.

Por lo tanto, sería mejor para usted configurar el servidor para admitir FTP en modo pasivo. Sin embargo, el modo pasivo haría que su sistema sea vulnerable a los ataques porque se supone que los clientes deben conectarse a puertos de servidor aleatorios. Por lo tanto, para admitir este modo, no solo su servidor debe tener múltiples puertos disponibles, ¡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 más información, lea el documento oficial .

Yuantao
fuente
Solo estoy adivinando cuál es el problema de seguridad. Si el servidor escucha el mismo puerto (20), entonces no puede entender qué cliente está hablando, por lo que elige un puerto aleatorio y lo envía al cliente, comenzando a escuchar ese puerto. Cuando el cliente se conecta a ese puerto, el servidor sabe a qué cliente pertenece. Pero es suficiente para que un MITM se conecte al mismo cliente. (bueno, el ataque mitm aquí es complicado de todos modos ...)
Daniele Cruciani
2
Gran respuesta, especialmente información sobre el problema del firewall
Anh Tuan
14

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 del servidor FTP 21. 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, generalmente 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 son las transferencias de archivos. Mientras que los otros protocolos usan la misma conexión para el control de sesión y las transferencias de archivos (datos), el protocolo FTP usa una conexión separada para las transferencias de archivos y las listas de directorios.

En el modo activo , el cliente comienza a escuchar en un puerto aleatorio las conexiones de datos entrantes del 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 de 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 usa principalmente en la actualidad. Es preferible utilizar el modo pasivo porque la mayor parte de la configuración compleja se realiza solo una vez en el lado del servidor, por un administrador experimentado, en lugar de hacerlo individualmente en el lado del cliente, por (posiblemente) usuarios 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 el cliente usa para abrir una conexión de datos a la dirección IP y al 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 está en el lado del servidor. El administrador del servidor debe configurar el servidor como se describe a continuación.

El cortafuegos 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 un rango de puertos para las conexiones de datos entrantes. Por lo general, el software del servidor FTP tiene una opción de configuración para configurar un rango 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 un NAT, necesita saber que es una dirección IP externa, por lo que puede proporcionarlo al cliente en respuesta al PASVcomando.

Configuración de red para modo activo

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 NAT (por ejemplo, las reglas de enrutamiento del módem ADSL) en el lado del cliente deben configurarse 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 corresponde), consulte su documentación.

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

Cortafuegos inteligentes / NAT

Algunos cortafuegos / NAT intentan abrir / cerrar automáticamente los puertos de datos mediante la inspección de la conexión de control FTP y / o traducir 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 sin cifrar. Pero esto no puede funcionar con FTPS, ya que el tráfico de conexión de control está encriptado y el firewall / NAT no puede inspeccionarlo ni modificarlo.

Martin Prikryl
fuente
11

Modo activo: -server inicia la conexión.

Modo pasivo: -client inicia la conexión.

Saeed Aliakbari
fuente
1

Modo activo: el cliente emite un comando PORT al servidor que indica que proporcionará "activamente" una IP y un número de puerto para volver a abrir la conexión de datos al cliente.

Modo pasivo: el cliente emite un comando PASV para indicar que esperará "pasivamente" a que el servidor proporcione una IP y un número de puerto, después de lo cual el cliente creará una conexión de datos al servidor.

Hay muchas buenas respuestas arriba, pero esta publicación de blog incluye algunos gráficos útiles y ofrece una explicación bastante sólida: https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -passive-ftp /

DaveW2122
fuente