Por que o modo passivo de FTP requer um intervalo de portas em oposição a apenas uma porta?

32

Estou lutando para entender com por que todos os servidores FTP exigem o uso de intervalo de portas para canais de dados de modo passivo, em vez de usar apenas uma porta de dados para todas as conexões de canal de dados de entrada.

Os servidores FTP lidam com muitos clientes conectados simultaneamente na porta 21. Os servidores da Web gerenciam muitos clientes conectados simultaneamente na porta 80. Etc.

Então, por que um servidor FTP não pode usar apenas uma porta de canal de dados para todas as conexões de dados passivos de entrada (e ainda conseguir lidar com muitos clientes conectados simultaneamente nessa porta, digamos, porta 1024)?

Ou pode?

Estou interessado em conhecer os detalhes técnicos de por que isso não é possível ou não é recomendado.

    
por Kurt 17.05.2011 / 23:10

6 respostas

20

a clear and technical explanation with regards to the multiple concurrent FTP sessions issue when locking the data port to only one port is what I am most interested in knowing in depth. When can it work, when will it not work, why it may not be recommended, etc.

Este será um palpite, já que eu não testei, você deve tentar por si mesmo e ver se há outros problemas que eu possa ter perdido.

Suponho que você pode limitar o intervalo de portas passivas a uma única porta . Na verdade, você pode ver em esta questão que intervalos de porta pequenos são usados na prática . Teoricamente, para suportar múltiplas conexões simultâneas, você só precisa dos 4 valores: IP local, porta local, IP remoto, porta remota para ser único. É assim que você discerne entre diferentes conexões.

Se você bloquear a porta em seu servidor para um único valor, a única variável restante será a porta usada pelo cliente. Isso não é um problema, desde que o cliente tenha um pool grande o suficiente de portas efémeras gratuitas escolher a partir de. A menos que esteja fazendo algum NAT pesado, você não precisa se preocupar com isso. Agora, esteja avisado que isso será puramente material teórico : se você usou várias portas em seu servidor, você poderia multiplicar o número de conexões simultâneas hipotéticas ativando number of ports in range conexões por uma porta do lado do cliente. Mas isso não acontecerá na prática, pois duvido que exista qualquer implementação de um cliente FTP que suporte isso (porque não faz muito sentido). Além disso, se o cliente tiver que compartilhar seus portos efêmeros dessa maneira e não puder simplesmente abrir um novo, ele terá problemas muito mais sérios para lidar. Então, dessa perspectiva, você deve estar totalmente seguro usando uma única porta.

Vamos pensar por que uma única porta pode não ser suficiente .

Primeiro de tudo, eu poderia chegar a uma situação em que uma implementação de servidor FTP realmente buggy usa apenas o número da porta local, como forma de identificar a transferência de dados do cliente. Mais uma vez, eu não acho que qualquer FTPd decente faria isso.

O problema real ( sim, você pode desconsiderar todos os acima como uma grande digressão ;-)) é que o intervalo de portas passivas está em um nível não privilegiado intervalo .

Isto significa que o seu número de porta selecionado não está reservado per se , e de fato qualquer processo do usuário (não precisa de privilégios root ) pode pegá-lo antes do seu servidor FTP. Se você tiver um pool abundante de portas para selecionar, basta pegar um aleatório livre. Se você for obrigado a usar o único e já estiver sendo usado, não será capaz de lidar com as transferências corretamente.

Desculpe, se a resposta parece um pouco especulativa demais. Para ser honesto, eu tentei arduamente encontrar uma razão por que você não deveria usar uma única porta e, além do último bit, eu não conseguia pensar em nenhuma evidência strong contra ela. No entanto, uma questão interessante e desafiadora você coloca.

    
por 18.05.2011 / 11:40
4

O FTP depende de duas conexões separadas, uma para o fluxo de controle ou de comando e outra para passar os arquivos de dados e outras informações, como listagens de diretórios. O fluxo de controle é transportado por uma conexão TCP tradicional. O cliente se conecta a uma porta alta sem privilégios e envia uma solicitação de conexão ao servidor FTP, que é ligado à porta 21. Essa conexão é usada para passar comandos.

Na porta ou no modo ativo, o cliente informa ao servidor qual porta secundária e sem privilégios ele irá escutar. O servidor então inicia a conexão de dados da porta 20 para a porta sem privilégios especificada pelo cliente.

O modo passivo, um mecanismo mais recente, é o padrão quando o cliente é um navegador da web. Em vez de estar vinculado à porta 20, o servidor informa ao cliente qual porta alta deve ser usada para transferência de dados. Os dados são então transmitidos através de portas não privilegiadas entre o cliente e o servidor.

Para mais detalhes, consulte:

link

EDITAR

Quanto ao bloqueio do servidor a uma única porta específica, isso pode ser possível em alguns servidores. Por exemplo, no vsftpd, você tem as seguintes opções de configuração.

   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)

Se você definir as duas portas como as mesmas, por exemplo pasv_max_port = 12345, pasv_min_port = 12345, você pode conseguir o que procura depois. Eu suspeito que isso limitará o número de sessões FTP simultâneas que o servidor suportará. Por favor, teste para ter certeza.

    
por 17.05.2011 / 23:24
0

Um servidor FTP pode ser capaz de fazer a conexão da porta de dados do cliente com a conexão Control Port, baseada apenas no IP de origem, em vez de se basear no número de porta usado.

Isso quebraria FXP (o que pode não ser uma coisa ruim) onde o cliente se conecta a dois servidores (um em modo passivo), depois de receber as informações PORT do servidor passivo, passa para o servidor de modo ativo como um comando PORT para que o servidor de modo ativo se conecte ao servidor de modo passivo.

Eu suspeito que muitos servidores não criam o soquete de dados até que o cliente solicite o modo passivo. Nesse caso, se dois clientes solicitassem o modo passivo ao mesmo tempo, os soquetes criados precisariam de números de porta exclusivos.

EDIT : pensou em outro motivo pelo qual os servidores FTP não fazem isso: o servidor não pode informar vários usuários com o mesmo endereço IP.

    
por 17.05.2011 / 23:47
0

Nas portas 21 ou 80 (como em todas as portas conhecidas), há um protocolo definido, que o cliente usa para dizer o que deseja. Desta forma, o servidor sabe o que você está conectando. Na porta de conexão de dados, não há protocolo. Tudo o que o servidor sabe - a única coisa que é única sobre essa conexão - é o número da porta à qual você se conecta.

Se você se conectasse à mesma porta toda vez, o servidor não seria capaz de dizer para qual arquivo você está se conectando. O número da porta serve como um link entre uma solicitação de transferência na conexão de controle e uma conexão de dados.

Se dois clientes solicitarem uma transferência ao mesmo tempo, quando o servidor aceitar uma conexão em uma única porta, o servidor não poderá informar qual arquivo transferir. É claro que o servidor poderia usar um IP cliente para a decisão (na verdade, muitos servidores FTP validam que o IP do cliente corresponde ao IP usado na conexão de controle, por segurança).

Mas isso não funcionaria para:

  • Várias conexões da mesma máquina (a maioria dos clientes FTP suporta transferências / filas paralelas).
  • Conexão de diferentes máquinas dentro da mesma rede (corporativa), pois elas têm o mesmo IP externo.

Veja também reutilização de conexões de dados FTP .

    
por 02.08.2016 / 07:19
-1

Eu não vi isso mencionado aqui, então vou jogá-lo. A atribuição de intervalo de porta era para ser um tipo de recurso de segurança, onde você não podia monitorar uma porta para tráfego de dados, os dados eram enviados em um porta aleatória no intervalo, que não poderia ser facilmente determinada. Segurança através da obscuridade.

    
por 12.09.2018 / 20:41
-2

Parece que você já conhece portas de controle e portas de dados, então vou direto ao assunto. Portas de controle são comunicação de burst por natureza, assim como a porta 80 para sites. eles podem lidar com muitos pedidos diferentes (não simultaneamente, mas perto porque eles são tão rápidos para concluir). portas de dados, por outro lado, são onde a mágica acontece com o FTP. Se você se limitar a uma única porta de dados, apenas uma transferência de dados ocorrerá de cada vez. considere uma grande transferência de arquivos. Com uma única porta de dados aberta, nenhum outro dado pode ser movido até que a transferência esteja completa. Isso significa que, durante a transferência, um segundo usuário nem poderá listar o conteúdo do diretório da pasta ftp. Claro que eles conseguirão fazer o login com sucesso, mas o comportamento deles será o mesmo que se as portas de dados não estivessem abertas. Se você está bem com isso, uma única porta funcionará muito bem para você. Tenha em mente que alguns clientes ftp (eu posso pensar em 1 logo de cara), por padrão, configurar várias conexões dentro de uma única sessão para download. Portanto, para esse cliente, em um cenário de porta única, considere uma transferência em lote de 1 arquivo grande e 4 arquivos pequenos.

O cliente inicia a transferência para o primeiro arquivo grande, todo bonitinho. Então, enquanto essa transferência está indo, inicia um segundo arquivo. Sem dados. Então o terceiro, também zilch (termo técnico). No final, o log deve mostrar 1 transferências bem sucedidas e 4 com falha. A solução seria limitar o cliente a uma única conexão por sessão e você seria bom para ir (supondo que alguém não tenha o pé na porta o microssegundo uma transferência completa e outra ainda não começou. )

    
por 27.04.2016 / 21:07