32 votos

¿Por qué modo pasivo de FTP requiere un rango de puertos en comparación con sólo un puerto?

Estoy luchando para llegar a comprender con qué todos los servidores FTP requiere el uso de un rango de puertos para el modo pasivo canales de datos en comparación con sólo el uso de un puerto de datos para todos los datos de entrada canal de conexiones.

Los servidores FTP de manejar muchos clientes conectados simultáneamente en el puerto 21. Los servidores Web de manejar muchos clientes conectados simultáneamente en el puerto 80. Etc..

Entonces, ¿por qué no puede un servidor FTP utilice sólo un canal de datos de puerto para todos los pasivos de las conexiones de datos (y aún así ser capaz de manejar muchos clientes conectados simultáneamente en ese puerto, dicen que el puerto 1024)?

¿O sí?

Estoy interesado en conocer los detalles técnicos de por qué esto no es posible o no es recomendable.

19voto

Karol Piczak Puntos 1583

una clara y explicación técnica con respecto a la simultáneas con múltiples sesiones de FTP problema cuando el bloqueo del puerto de datos para un solo puerto es lo que yo estoy más interesado en conocer en profundidad. Cuando funciona, cuando no funcionará, ¿por qué no puede ser recomendado, etc.

Esta va a ser una conjetura, como yo no lo he probado, deberías probarlo por ti mismo y ver si hay algunos otros problemas que podría haber perdido.

Supongo que podría limitar el rango de puertos pasivos a un solo puerto. De hecho se puede ver en esta pregunta que los pequeños intervalos de puertos se utilizan en la práctica. Teóricamente, para el soporte de múltiples conexiones simultáneas sólo necesitas los 4 valores: IP local, puerto local, remoto IP, puerto remoto a ser único. Esta es la forma de discernir entre las diferentes conexiones.

Si usted bloquear el puerto de su servidor para un solo valor, entonces la única variable de la izquierda es el puerto utilizado por el cliente. Esto no es un problema, siempre y cuando el cliente tenga una gran piscina de libre efímero puertos para elegir. A menos que sea haciendo algo pesado NAT, usted no tiene que preocuparse acerca de esto. Ahora, se advierte que esto va a ser puramente teórica cosas: si utiliza varios puertos en el servidor, usted puede multiplicar el número de hipotéticas conexiones simultáneas permitiendo number of ports in range conexiones por el puerto del lado del cliente. Pero no sucederá en la práctica, ya que dudo que haya cualquier implementación de un cliente de FTP que apoyaría esto (porque no tiene mucho sentido). Además, si el cliente tiene que compartir sus puertos efímeros de esta manera y no puede simplemente abrir uno nuevo, entonces él tiene problemas mucho más graves que lidiar con. Así, desde esta perspectiva que debe de estar completamente seguro de usar un solo puerto.

Vamos a pensar por qué un único puerto puede no ser suficiente.

Primero de todo, yo podría llegar a una situación en la que realmente buggy servidor FTP implementación utiliza únicamente el número de puerto local como una manera de identificar al cliente de transferencia de datos. Una vez más, no creo que ninguna decente FTPd haría eso.

El verdadero problema (sí, usted puede hacer caso omiso de todo lo anterior como una de las principales digresión ;-)) es el rango de puertos pasivos no está en el rango privilegiado.

Esto significa que su seleccionado el número de puerto no está reservada per se, y de hecho en cualquier proceso de usuario (no necesita root privilegios) puede tomar antes de su servidor FTP. Si usted tiene un abundante grupo de puertos para seleccionar, se acaba de agarrar un azar de forma gratuita. Si usted está obligado a utilizar el único y ya está, usted no será capaz de manejar las transferencias correctamente.

Lo siento, si la respuesta parece un poco demasiado especulativo. Para ser honesto, me esforcé por encontrar una razón por qué no debería usar un solo puerto y, aparte de que el último bit, yo no podía pensar en ninguna prueba en contra de él. Sin embargo, un interesante y desafiante pregunta que te plantean.

4voto

dmourati Puntos 9454

FTP se basa en dos conexiones independientes, uno para el control o la secuencia de comandos, y uno para pasar los archivos de datos y otra información, tales como los listados de directorio. El control de flujo se realiza a través de una tradicional de la conexión TCP. El cliente se une a un alto privilegios del puerto y envía una solicitud de conexión al servidor FTP, que se enlaza con el puerto 21. Esta conexión se utiliza para pasar los comandos.

En el Puerto o el modo activo, el cliente le dice th servidor secundarios que, sin privilegios puerto de escucha en el. A continuación, el servidor inicia la conexión de datos desde el puerto 20 para los privilegios del puerto de el cliente especificado.

El modo pasivo, un nuevo mecanismo, que es el valor predeterminado cuando el cliente es un navegador web. En lugar de estar atado a puerto 20, el servidor indica al cliente que la alta puerto a utilizar para la transferencia de datos. Los datos se transmiten a través de privilegios puertos entre el cliente y el servidor.

Para obtener más detalles, consulte:

http://tools.ietf.org/html/rfc959

EDITAR

Como para bloquear el servidor a un determinado puerto, puede ser posible en algunos servidores. Por ejemplo, en el vsftpd, usted tiene las siguientes opciones de configuración.

   pasv_max_port
          The maximum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

   pasv_min_port
          The minimum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

Si configura los puertos de ambas a la misma, por ejemplo, pasv_max_port=12345, pasv_min_port=12345, usted puede ser capaz de conseguir lo que usted está después. Sospecho que esto va a limitar el número de concurrentes sesiones de FTP estás servidor. Por favor prueba para estar seguro.

1voto

DerfK Puntos 13616

Un servidor FTP podría ser capaz de hacer coincidir los Datos del cliente Puerto de conexión para su Control Puerto de conexión basado en la dirección IP de origen, en vez de basarse en el número de puerto utilizado.

Esto podría romper la FXP (que puede no ser una mala cosa) cuando el cliente se conecta a dos servidores (uno en modo pasivo), a continuación, después de recibir el pasivo de PUERTO del servidor de la información, pasa al modo activo como un servidor de comando de PUERTO para que active el modo de servidor se conecta a la pasiva, el modo de servidor.

Yo sospecho que muchos servidores no se cree los datos del socket hasta que el cliente solicita el modo pasivo. En ese caso, si dos clientes solicitado el modo pasivo, al mismo tiempo, los sockets creados necesitaría números de puerto único.

EDIT: pensaba en otra razón por la que los servidores de FTP no hacen esto: el servidor no podría decir a varios usuarios con la misma dirección IP de distancia.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: