¿Por qué el modo pasivo FTP utiliza un rango de puertos efímeros en lugar de un solo puerto conocido? [cerrado]

9

En el modo pasivo FTP, leí que el servidor envía un número de puerto aleatorio al cliente donde puede establecer un canal de datos.
Luego, el cliente establece un canal de datos desde su número de puerto aleatorio a este número de puerto enviado por el servidor.

Mi pregunta es ¿por qué el servidor envía un número de puerto aleatorio al cliente? ¿Por qué el cliente no puede establecer directamente un canal de datos al puerto número 20 en el lado del servidor?

Céfiro
fuente
2
Pensé que esto estaba fuera de tema.
Desafortunadamente, las preguntas sobre protocolos por encima de OSI layer-4 están fuera de tema aquí.
Ron Maupin

Respuestas:

13

Así fue diseñado el protocolo FTP para funcionar en modo pasivo. Probablemente no fue una buena idea, ya que no creo que este modelo se haya vuelto a repetir en ningún otro protocolo (y eso es aún más cierto sobre el modo activo FTP).


En el puerto de conexión de datos, no hay protocolo. Todo lo que el servidor sabe, lo único que contiene información en esa conexión, es el número de puerto al que se conecta.

Si tuviera que conectarse al mismo puerto cada vez, el servidor no podría decir para qué archivo se está conectando. El número de puerto sirve como enlace entre una solicitud de transferencia en la conexión de control y una conexión de datos; el número de puerto está contenido en la respuesta al PASVcomando.

Si dos clientes solicitaran una transferencia al mismo tiempo, cuando el servidor acepta una conexión en un solo puerto, el servidor no podría decir qué archivo transferir. Por supuesto, el servidor podría usar una IP del cliente para la decisión (en realidad, muchos servidores FTP validan que la IP del cliente coincida con la IP utilizada en la conexión de control, por seguridad).

Pero esto no funcionaría para:

  • Múltiples conexiones desde la misma máquina (la mayoría de los clientes FTP admiten transferencias / colas paralelas y en realidad puede ejecutar múltiples clientes FTP diferentes en una máquina);
  • Conexión desde diferentes máquinas dentro de la misma red (corporativa), ya que tienen la misma IP externa.

Parcialmente copiado de mi respuesta a ¿Por qué el modo pasivo FTP requiere un rango de puertos en lugar de un solo puerto? en la falla del servidor.

Martin Prikryl
fuente
El número de puerto utilizado en el lado del servidor también puede ser 20 ¿verdad? En cada respuesta, el número de puerto en el lado del servidor es distinto de 20
Zephyr
Mi respuesta explica por qué el número de puerto debe ser único para cada conexión / transferencia. Por lo tanto, no se puede fijar a 20.
Martin Prikryl
Sí, no se puede arreglar, pero uno de ellos puede ser 20 ¿verdad?
Zephyr
1
Sí, pero todos los demás puertos deben estar por encima de 1024. Y desde un punto de vista práctico, un rango de puertos contiguos es mejor. La mayoría de los cortafuegos / NAT admiten reglas basadas en rangos. No desea agregar una regla especial para el puerto 20 aislado. Además, la mayoría de los servidores FTP solo admiten un rango contiguo de puertos.
Martin Prikryl
1
@ Zac67 no, el cliente abrirá una nueva conexión (aparte de la conexión de control) para recuperar el archivo en modo pasivo, por lo que el servidor no puede usar el número de puerto de origen (cliente) para distinguir entre las conexiones del cliente. Además, NAT a menudo destrozará el puerto de origen del cliente (y / o la dirección IP) haciendo que ese enfoque sea inutilizable en la práctica.
jjmontes
4

Por lo general, el servidor no envía un puerto aleatorio, sino uno libre de un rango / grupo definido (por instalación); para el cliente, esto parece aleatorio. Este puerto debe reenviarse al firewall que requiere definir un rango.

Desafortunadamente, FTP es antiguo. Supongo que los servidores antiguos no podían distinguir las sesiones de datos de varios clientes excepto por puerto. En general, es mejor pasar a protocolos más actualizados donde todo está perfectamente empaquetado dentro de una sola sesión de socket.

Zac67
fuente
Entonces puede ser 20 también, ¿verdad? En cada sitio web, el número de puerto del servidor para datos es distinto de 20.
Zephyr
20 es el puerto de salida del servidor para FTP activo (que ya no se usa mucho).
Zac67
No era que los servidores antiguos tuvieran problemas, es que los diseñadores de protocolos todavía estaban tratando de encontrar la mejor manera de hacer cosas más complicadas que la primitiva respuesta de solicitud.
Mark