En FTP, ¿cuáles son las diferencias entre los modos pasivo y pasivo extendido?


17

¿Alguien puede simplemente explicar las diferencias entre el modo pasivo FTP (PASV) y el modo pasivo extendido FTP (EPSV)?


2
@DavidPostill Lo siento, realmente solo estaba interesado en PASV vs EPSV.
CGCampbell

Respuestas:


20

La única diferencia es que PORT/PASVestán limitados a IPv4 , mientras EPRT/EPSVfuncionan con cualquier protocolo de red (aunque solo se usa IPv6 en la práctica).

Los comandos estándar PORT(activo) y PASV(pasivo) en el protocolo de control FTP intercambian la dirección y la información del puerto como seis decimales de 1 byte , desde los cuales el otro extremo debe reconstruir una dirección IP de cuatro bytes y un número de puerto TCP de dos bytes.

PORT <address[4]>,<port[2]>

PORT 132,235,1,2,24,131

Pero luego comenzaron a aparecer otros protocolos. IPv4 estaba a punto de ser reemplazado por "IPng", que tenía bastantes propuestas de reemplazo de la competencia (OSI CLNP, TUBA, SIP, SIPP, CATNIP, en varios momentos de la historia), algunas con tamaños de dirección de host más cortos, más largos e incluso variables , hasta que finalmente se definió IPv6 con direcciones de 16 bytes.

Simplemente enviar más bytes no hubiera funcionado: no se podía esperar que los servidores y los clientes conocieran el protocolo correcto basado únicamente en la longitud de la dirección. (Por ejemplo, ¿qué sucede si tiene un protocolo con dirección de 16 bytes + puerto de 4 bytes, otro con dirección de 12 bytes + puerto de 12 bytes?)

Además, a pesar de que esto era menos importante hace 20 años, en la actualidad hay millones de dispositivos NAT en Internet, que inspeccionan y destrozan las conexiones de control FTP para que el host "externo" solo vea las direcciones IPv4 globales, incluso si el "interior" El host envió un RFC1918 local. Incluso sin NAT, los firewalls con estado a menudo observan los comandos de control para permitir automáticamente una conexión de datos sin reglas manuales.

Básicamente, esto significa que simplemente enviar más números con PORTo PASVestá garantizado para romper para muchas personas. Quizás algunos firewalls malinterpretarían silenciosamente algunos bytes de dirección como el puerto y descartarían silenciosamente el resto; otros pueden desconectar la conexión o simplemente bloquearse.

Para evitar varios problemas como el anterior, se tuvieron que introducir nuevos comandos para la compatibilidad con múltiples protocolos en FTP.

En 1993, RFC 1639 (originalmente RFC 1545 ) introdujo la "dirección larga" LPRTy losLPSV comandos, que eran como PORT& PASVpero con una longitud de dirección variable ; también incluyeron el identificador de tipo de protocolo. (Sin embargo, no cambió la sintaxis: dirección IPv6: el puerto simplemente se enviaría como 21 números en lugar de seis).

LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>

LPRT 4,4,132,235,1,2,2,24,131

LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162

Sin embargo, eso todavía no solucionó algunos de los problemas, como pedirle a un servidor que use un protocolo diferente al de la conexión de control. El RFC también se desactualizó rápidamente; cuando IPv6 salió solo un año después, no se pudo usar con LPRT porque no tenía asignado un identificador de protocolo LPRT (solo para las diversas propuestas iniciales).

Para solucionar esto, RFC 2428 en 1998 agregó EPRTy EPSV, también conocido como "puerto extendido" y "pasivo extendido" , que también tenía un método para negociar un protocolo que admite ambos extremos. Los comandos "extendidos" también envían direcciones en forma legible para humanos, para IPv6, eso significa usar la notación hexadecimal y dos puntos, en lugar de una serie de números decimales separados.

EPRT x<protocol>x<address>x<port>x

EPRT |1|132.235.1.2|6275|

EPRT |2|1080::8:800:200C:417A|5282|

En conclusión, el soporte de IPv6 es la única diferencia.


Wow, todos los sitios que leí y no hicieron clic hasta este. Gracias por eso. Lo aceptaré (probablemente) en una o dos horas, quiero ver si alguien más lo hace diferente. Además, la razón por la que solicité Active también fue que debido a que el etiquetado funciona bien con Google, esta pregunta / respuesta se encontrará en las búsquedas. Si nadie agrega a la respuesta (haciéndola más completa para una respuesta de Google), editaré mi pregunta y mi cuerpo originales para reflejar el contenido de su respuesta, esencialmente ajustando mi pregunta a su respuesta.
CGCampbell

3
Otra diferencia es que la EPSVrespuesta no incluye la dirección IP (qué PASVrespuesta sí). Esto es para evitar un problema común cuando el servidor FTP ubicado detrás de un NAT no sabe que es una dirección IP externa y confunde al cliente FTP enviándole su dirección interna.
Martin Prikryl

Para agregar a lo que dice @MartinPrikryl, otra razón es cuando se utiliza FTP sobre TLS, el firewall / NAT no puede interceptar la dirección IP en el comando PASV para reescribirla (al menos sin MITMing la conexión de control). La gente del mundo Unix generalmente usa SFTP en lugar de FTP sobre TLS, FTP sobre TLS se usa comúnmente con mainframes de IBM, ya que FTP admite archivos orientados a registros (STRU R, MODE B), mientras que SFTP solo admite transmisión orientada archivos
Simon Kissane

1

La diferencia entre activo y pasivo ya está respondida. La pasiva extendida (EPSV) es solo pasiva con IPv4 e IPv6, porque la sintaxis de la respuesta a PASV era específica de IPv4 y, por lo tanto, se necesitaba un nuevo comando para IPv6. Lo mismo con EPTR vs. PUERTO en modo activo. Hay un comportamiento ligeramente diferente con EPRT y EPSV en que solo pueden contener el puerto, no IP y el puerto como PUERTO y PASV. Por lo tanto, la transferencia de datos solo se puede hacer entre los sistemas que tienen la conexión de control. Con PORT y PASV es posible crear una conexión de datos entre otros sistemas (aunque hoy en día esto se considera un mal diseño y un riesgo de seguridad).


2
Este era el tipo de respuesta que no quería. Me dice exactamente todo lo que pude encontrar en otro lugar, que es que EPSV fue creado para IPv6, pero no explica por qué. (es decir, no acepto tu razón como una explicación lo suficientemente buena) Te estoy diciendo esto con la esperanza de que quizás puedas mejorar tu respuesta.
CGCampbell

Respuesta editada para dejar en claro que la respuesta al comando PASV no admite IPv6 y, por lo tanto, se necesitaba un nuevo comando.
Steffen Ullrich
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.