No FTP, quais são as diferenças entre os modos passivo e passivo estendido?

17

Alguém pode simplesmente explicar as diferenças entre o FTP no modo passivo (PASV) e o FTP no modo passivo estendido (EPSV)?

CGCampbell
fonte
2
@DavidPostill Desculpe, eu estava realmente interessado apenas em PASV vs EPSV.
precisa saber é o seguinte

Respostas:

20

A única diferença é que eles PORT/PASVsão limitados ao IPv4 , enquanto EPRT/EPSVtrabalham com qualquer protocolo de rede (embora apenas o IPv6 seja usado na prática).

Os comandos padrão PORT(ativo) e PASV(passivo) no protocolo de controle FTP trocam informações de endereço e porta como seis casas decimais de 1 byte , das quais a outra extremidade precisa reconstruir um endereço IP de quatro bytes e um número de porta TCP de dois bytes.

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

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

Mas então outros protocolos começaram a aparecer. O IPv4 estava prestes a ser substituído pelo "IPng", que tinha várias propostas de substituição concorrentes (OSI CLNP, TUBA, SIP, SIPP, CATNIP - em vários momentos da história), algumas com tamanhos de endereço de host mais curtos, mais longos e até variáveis , até que o IPv6 com endereços de 16 bytes finalmente seja definido.

Apenas enviar mais bytes não teria funcionado - não se esperava que servidores e clientes conhecessem o protocolo certo com base apenas no tamanho do endereço. (Por exemplo, e se você tiver um protocolo com endereço de 16 bytes + porta de 4 bytes, outro com endereço de 12 bytes + porta de 12 bytes?)

Além disso - embora isso tenha sido menos importante há 20 anos - atualmente, existem milhões de dispositivos NAT na Internet, que inspecionam e gerenciam conexões de controle FTP para que o host "externo" veja apenas endereços IPv4 globais, mesmo que o "interno" host enviou um local RFC1918. Mesmo sem o NAT, os firewalls com estado geralmente assistem aos comandos de controle para permitir automaticamente uma conexão de dados sem regras manuais.

Basicamente, isso significa que simplesmente o envio de mais números com PORTou PASVé garantido para muitas pessoas. Talvez alguns firewalls silenciosamente interpretem mal alguns bytes de endereço como a porta e descartem silenciosamente o restante; outros podem interromper a conexão ou simplesmente travar.

Para evitar vários problemas como o acima, novos comandos tiveram que ser introduzidos para suporte a multiprotocolo no FTP.

Em 1993, a RFC 1639 (originalmente RFC 1545 ) introduziu o "endereço longo" LPRTe osLPSV comandos, que eram como PORT& PASVmas com um comprimento de endereço variável ; eles incluíram o identificador de tipo de protocolo também. (Porém, não mudou a sintaxe - endereço IPv6: a porta seria simplesmente enviada como 21 números em vez 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

No entanto, isso ainda não resolveu alguns dos problemas, como solicitar que um servidor use um protocolo diferente do da conexão de controle. A RFC também rapidamente ficou desatualizada; quando o IPv6 foi lançado apenas um ano depois, não pôde ser usado com o LPRT porque não havia um identificador de protocolo LPRT atribuído a ele (apenas para as várias propostas iniciais).

Para corrigir isso, o RFC 2428 em 1998 adicionou EPRTe EPSV, também conhecido como "porta estendida" e "passiva estendida" , que também possuía um método para negociar um protocolo que ambas as extremidades suportam. Os comandos "estendidos" também enviam endereços em formato legível por humanos - para IPv6, isso significa usar notação hexa e dois pontos, em vez de uma série de números decimais separados.

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

EPRT |1|132.235.1.2|6275|

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

Em conclusão, o suporte ao IPv6 é a única diferença.

user1686
fonte
Uau, todos os sites que li e não clicaram até este. Obrigado por isso. Aceito (provavelmente) em uma ou duas horas, quero ver se alguém faz diferente. Além disso, o motivo pelo qual solicitei o Active também foi que, devido ao bom funcionamento da tag no google, essa pergunta / resposta será encontrada nas pesquisas. Se ninguém adicionar à resposta (tornando-a mais completa para uma resposta do Google), editarei minha pergunta e corpo originais para refletir o conteúdo da sua resposta, ajustando-a essencialmente à sua resposta.
precisa saber é o seguinte
3
Outra diferença é que a EPSVresposta não inclui o endereço IP (que PASVresposta faz). Isso evita problemas comuns quando o servidor FTP localizado atrás de um NAT não sabe seu endereço IP externo e confunde o cliente FTP enviando seu endereço interno.
Martin Prikryl
Para adicionar o que o @MartinPrikryl diz, outro motivo é ao usar o FTP sobre TLS, o firewall / NAT não pode interceptar o endereço IP no comando PASV para reescrevê-lo (pelo menos sem MITMing na conexão de controle). As pessoas do mundo Unix geralmente usam SFTP em vez de FTP sobre TLS, FTP sobre TLS é comumente usado com mainframes IBM, pois o FTP suporta arquivos orientados a registros (STRU R, MODO B), enquanto o SFTP suporta apenas orientados a fluxo arquivos
Simon Kissane 30/10
1

A diferença entre ativo e passivo já está respondida. Passivo estendido (EPSV) é apenas passivo com IPv4 e IPv6, porque a sintaxe da resposta ao PASV era específica para o IPv4 e, portanto, era necessário um novo comando para o IPv6. Mesmo com EPTR vs. PORT no modo ativo. Existe um comportamento ligeiramente diferente com o EPRT e o EPSV, pois eles podem conter apenas a porta, não o IP e a porta como PORT e PASV. Assim, a transferência de dados só pode ser feita entre os sistemas que possuem a conexão de controle. Com o PORT e o PASV, é possível criar uma conexão de dados entre outros sistemas (embora hoje seja considerado um design ruim e um risco de segurança).

Steffen Ullrich
fonte
2
Esse era o tipo de resposta que eu não queria. Diz-me exatamente o que pude encontrar em outro lugar, que é que o EPSV foi criado para o IPv6, mas não explica o porquê. (ou seja, não aceito sua razão como uma explicação suficientemente boa). Estou lhe dizendo isso na esperança de que talvez você melhore ainda mais sua resposta.
precisa saber é o seguinte
Resposta editada para deixar claro que a resposta ao comando PASV para não oferecer suporte ao IPv6 e, portanto, era necessário um novo comando.
Steffen Ullrich