Alguém me pode dizer qual é a diferença entre FTP activo e passivo? Qual delas é preferível?
Activo e passivo são os dois modos em que o FTP pode funcionar.
Para fundo, o FTP utiliza na realidade dois canais entre cliente e servidor, os canais de comando e de dados, que são na realidade separar as ligações TCP.
O canal de comando é para comandos e respostas enquanto o canal de dados é para a transferência efectiva de ficheiros.
Esta separação de informação e dados de comando em canais separados é uma forma elegante de poder enviar comandos para o servidor sem ter de esperar que a transferência de dados actual termine. De acordo com o RFC, isto só é obrigatório para um subconjunto de comandos, tais como desistir, abortar a transferência actual, e obter o estado.
No modo activo, o cliente estabelece o canal de comando mas o servidor é responsável por estabelecer o canal de dados. Isto pode na realidade ser um problema se, por exemplo, a máquina cliente estiver protegida por firewalls e não permitir pedidos de sessão não autorizados de partes externas.
No modo passivo, o cliente estabelece ambos canais. Já sabemos que estabelece o canal de comando em modo activo e que faz o mesmo aqui.
No entanto, pede então ao servidor (no canal de comando) para começar a escutar numa porta (ao critério dos servidores) em vez de tentar estabelecer uma ligação de volta para o cliente.
Como parte disto, o servidor também devolve ao cliente o número de porta que seleccionou para ouvir, para que o cliente saiba como se ligar a ele.
Quando o cliente souber disso, pode então criar com sucesso o canal de dados e continuar.
Mais detalhes estão disponíveis no RFC: https://www.ietf.org/rfc/rfc959.txt
Encontrei-me recentemente com esta questão no meu local de trabalho, por isso penso que deveria dizer algo mais aqui. Vou usar a imagem para explicar como funciona o FTP como uma fonte adicional para resposta anterior.
Modo activo:
Modo passivo:
Numa configuração de modo activo, o servidor tentará ligar-se a uma porta aleatória do lado do cliente. Assim, é provável que essa porta não't seja uma dessas portas pré-definidas. Como resultado, uma tentativa de ligação a ela será bloqueada pela firewall e nenhuma ligação será estabelecida.
Uma configuração passiva não terá este problema, uma vez que será o cliente a iniciar a ligação. É claro que é possível que o lado do servidor também tenha uma firewall. No entanto, como se espera que o servidor receba um maior número de pedidos de ligação em comparação com um cliente, então seria apenas lógico que o administrador do servidor se adaptasse à situação e abrisse uma selecção de portas para satisfazer configurações de modo passivo.
Assim, seria melhor para si configurar o servidor para suportar o modo FTP passivo. No entanto, o modo passivo tornaria o seu sistema vulnerável a ataques porque os clientes devem, supostamente, ligar-se a portas aleatórias do servidor. Assim, para suportar este modo, não só o seu servidor teria de ter várias portas disponíveis, a sua firewall também deveria permitir a passagem de ligações a todas essas portas!
Para mitigar os riscos, uma boa solução seria especificar uma gama de portas no seu servidor e depois permitir apenas essa gama de portas na sua firewall.
Para mais informações, leia por favor o documento oficial.
Versão adaptada do meu artigo Modos de Ligação FTP (Activo vs. Passivo):
O modo de ligação FTP (activo ou passivo), determina como é estabelecida uma ligação de dados. Em ambos os casos, um cliente cria uma ligação de controlo TCP a uma porta de comando de servidor FTP 21. Esta é uma ligação padrão de saída, como com qualquer outro protocolo de transferência de ficheiros (SFTP, SCP, WebDAV) ou qualquer outra aplicação cliente TCP (por exemplo, navegador web). Assim, normalmente não há problemas ao abrir a ligação de controlo.
Onde o protocolo FTP é mais complicado em comparação com os outros protocolos de transferência de ficheiros são as transferências de ficheiros. Enquanto os outros protocolos utilizam a mesma ligação tanto para o controlo da sessão como para as transferências de ficheiros (dados), o protocolo FTP utiliza uma ligação separada para as transferências de ficheiros e listagens de directórios.
No modo activo, o cliente começa a ouvir numa porta aleatória para ligações de dados de entrada do servidor (o cliente envia o comando FTP PORT
para informar o servidor em que porta está a ouvir). Hoje em dia, é típico que o cliente esteja por detrás de uma firewall (por exemplo, firewall Windows incorporado) ou router NAT (por exemplo, modem ADSL), incapaz de aceitar ligações TCP de entrada.
Por esta razão, foi introduzido o modo passivo e é hoje em dia utilizado na sua maioria. A utilização do modo passivo é preferível porque a maioria da configuração complexa é feita apenas uma vez do lado do servidor, por um administrador experiente, e não individualmente do lado do cliente, por (possivelmente) utilizadores inexperientes.
No modo passivo, o cliente utiliza a ligação de controlo para enviar um comando PASV
ao servidor e depois recebe do servidor um endereço IP do servidor e um número de porta do servidor, que o cliente utiliza depois para abrir uma ligação de dados ao endereço IP do servidor e o número de porta do servidor recebido.
Com o modo passivo, a maior parte da carga de configuração está do lado do servidor. O administrador do servidor deve configurar o servidor como descrito abaixo.
A firewall e o NAT no lado do servidor FTP têm de ser configurados não só para permitir/encaminhar as ligações de entrada na porta FTP 21, mas também uma gama de portas para as ligações de entrada de dados. Normalmente, o software do servidor FTP tem uma opção de configuração para configurar uma gama de portas, o servidor irá utilizar. E o mesmo intervalo tem de ser aberto/encaminhado na firewall/NAT.
Quando o servidor FTP está por detrás de um NAT, precisa de o conhecer's endereço IP externo, para que o possa fornecer ao cliente numa resposta ao comando PASV
.
Com o modo activo, a maior parte da carga de configuração está do lado do cliente.
A firewall (por exemplo, firewall do Windows) e NAT (por exemplo, regras de encaminhamento de modem ADSL) do lado do cliente têm de ser configuradas para permitir/encaminhar uma gama de portas para as ligações de dados de entrada. Para abrir as portas no Windows, vá para Control Panel > System and Security > Windows Firewall > Advanced Settings > Inbound Rules > New Rule. Para encaminhar as portas no NAT (se houver), consulte a sua documentação.
Quando há's NAT na sua rede, o cliente FTP precisa de saber o seu endereço IP externo que o WinSCP precisa de fornecer ao servidor FTP utilizando o comando PORT
. Para que o servidor se possa ligar correctamente ao cliente para abrir a ligação de dados. Alguns clientes FTP são capazes de autodetectar o endereço IP externo, outros têm de ser configurados manualmente.
Algumas firewalls/NATs tentam abrir/fechar automaticamente as portas de dados inspeccionando a ligação de controlo FTP e/ou traduzir os endereços IP da ligação de dados no tráfego da ligação de controlo.
Com uma tal firewall/NAT, a configuração acima não é necessária para um simples FTP não encriptado. Mas isto não pode funcionar com o FTPS, uma vez que o tráfego da ligação de controlo é encriptado e a firewall/NAT não pode inspeccioná-lo nem modificá-lo.