FTP ativo x FTP passivo

Uma sessão FTP é composta de duas conexões: Uma de dados (porta 20) e outra de controle (porta 21), sendo esta a primeira a ser estabelecida e aquela a última. Normalmente, usamos o FTP ATIVO assim:

  1. O cliente, através de uma porta alta, estabelece a conexão de controle na porta 21 do servidor
  2. O servidor estabelece a conexão de dados a partir de sua porta 20 para uma porta alta do cliente. Aqui foi o servidor quem tomou a iniciativa de estabelecimento da conexão de dados, ou seja, “o servidor virou cliente e o cliente virou servidor”.
  3. Está estabelecida a sessão FTP

Um dos problemas que justificou a adoção do FTP passivo foi o uso do NAT – Network Address Translation.

Resumidamente, podemos dizer que quando aplicamos NAT,
os pacotes destinados à rede externa têm o endereço de origem substituído por outro endereço configurado no NAT. Quando o pacote retorna, NAT consulta uma tabela interna e desfaz a substituição do endereço, entregando o pacote à verdadeira origem.

O problema da adoção do esquema ATIVO quando usamos NAT é que no passo “2”, logo acima citado, o servidor tentará estabelecer de volta a conexão de dados NÃO na verdadeira máquina de origem (que está por trás do NAT), mas sim na máquina que implementa esse serviço de substituição de endereços.

Dessa forma temos o seguinte cenário no FTP PASSIVO:

  1. O cliente, através de uma porta alta, estabelece a conexão de controle na porta 21 do servidor
  2. O cliente, novamente, estabelece a conexão de dados a partir de outra porta alta na porta 20 do servidor.
  3. Está estabelecida a sessão FTP

Resumo: No FTP ativo, tanto o cliente quanto o servidor tomam iniciativa de estabelecer uma das duas conexões, já no FTP passivo é o cliente quem toma as duas iniciativas, haja vista o servidor permanecer PASSIVO.

»crosslinked«

Você pode gostar...

8 Resultados

  1. Junior disse:

    Ótimo artigo, bem explicado e simples de entender, mas tenho uma duvida sobre o firewall, ainda não compreendi direito por que o firewall bloqueia as conexões ativas. E uma ultima duvida, é: quais os comandos que posso usar para usar o modo passivo e ativo?
    Desde já, agradeço a atenção.

    • Gustavo disse:

      O problema é o NAT, não o firewall. No processo de tradução, como o pacote fez um “pit-stop” na máquina que implementa NAT para troca de endereços, sob a óptica do servidor, quem fez a solicitação foi a máquina NAT, e não o cliente por trás dele. Dessa forma, o servidor tentará se conectar com a máquina NAT e não com o cliente verdadeiro. Esse é o problema.

      Uma vez estabelecida a conexão, usamos comoando como PUT, GET, OPEN, RESET, MPUT ETC….

  2. Pedro disse:

    Gustavo,
    Obrigado pela explicação. No material que eu encontrei, a única parte que fala sobre FTP passivo é a seguinte:  “FTP PASSIVO – o servidor informa ao cliente uma porta alta através do comando PORT. O cliente por sua vez abre uma conexão de uma porta alta nesta porta informada pelo servidor. A porta 20 não é utilizada.”
    Pelo jeito a afirmação é forte demais né?
    []s
     

    • Gustavo Vilar - p3r1t0f3d3r4l disse:

      Quando se tem um firewall filtrando o serviço, é natural que este somente libere somente as portas 20 e 21, padronizando as regras de filtragem dos acessos passivos e ativos.
      Agora, caso minha intenção seja passar por um filtro de pacotes que esteja bloqueando a porta 20, uso outra.
      De qualquer maneira, independentemente da porta a ser usada, o importante é a forma pela qual a sessão é estabelecida: Duas conexões iniciadas pelo cliente.

  3. Pedro disse:

    Gustavo, achei um material na internet que dizia que no FTP passivo, a porta 20 não era utilizada,  faz sentido isso?
     
    Grato

    • Gustavo Vilar - p3r1t0f3d3r4l disse:

      Pedrão,

      A melhor resposta que posso te dar é: Depende.

      Uma porta deve ser usada para controle e outra porta deve ser usada para dados. Se vai ser a 20 ou a 45678 dependerá do contexto. Normalmente se usa o padrão, mas a possibilidade de uso de uma solução alternativa é possível.

      Se você puder disponibilizar o URL do material para que eu veja o contexto da afirmação eu te respondo com mais propriedade.

      []s

  4. Diego disse:

    Parabéns pelo artigo. Excelente explicação. Como tem que ser: simples e direta, mas sem deixar dúvidas.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *