O Protocolo de Transferência de Arquivos (FTP) é um dos métodos mais comuns para a movimentação de dados, adequado para diversas aplicações.
O FTP possui variantes seguras, como FTPS e SFTP, que apresentam diferenças significativas em seu funcionamento. Estas diferenças abrangem a forma como os dados são trocados, o nível e tipo de segurança na comunicação, e as considerações de firewall.
Compreender o funcionamento desses protocolos e suas diferenças pode auxiliar na escolha do mais adequado para cada necessidade.
FTP
O FTP é um protocolo de transferência de arquivos com décadas de existência, originalmente definido na RFC 114 e posteriormente atualizado para o padrão RFC 959, que é utilizado atualmente.
O FTP opera utilizando dois canais para troca de informações: um para comandos e outro para dados. Isso exige duas portas para o funcionamento do FTP: a porta para comandos e a porta para dados.
O canal de comandos utiliza a porta 21, que aceita conexões de clientes e é responsável pelo envio de comandos. Este canal permanece ativo durante toda a sessão FTP, até que o cliente envie o comando QUIT ou o servidor desconecte a sessão por inatividade ou outros motivos.
O canal de dados utiliza uma porta temporária, que pode ser aberta no servidor (modo passivo) ou no cliente (modo ativo). Este canal é usado para a transferência de dados propriamente ditos entre o servidor e o cliente, como listas de diretórios e arquivos.
Ao contrário do canal de comando, o canal de dados permanece aberto apenas durante a transferência de arquivos, sendo fechado ao término da mesma. Para transferências simultâneas de vários arquivos ou listagens de diretório, várias portas de canal de dados são necessárias.
O FTP é um protocolo inerentemente inseguro, uma vez que os canais de comando e dados transferem informações sem criptografia, tornando-as vulneráveis à interceptação por meio de ataques “man-in-the-middle”.
Como mencionado, o FTP requer uma conexão de entrada na porta 21/tcp no servidor para o canal de comando. Para transferências de arquivos e listagens de diretórios, é definido um intervalo de portas passivas que permite conexões de entrada. Esse processo pode variar dependendo do servidor FTP em uso; consulte a documentação específica. No lado do cliente, a conexão de saída na porta 21/tcp deve ser permitida, juntamente com o intervalo de portas passivas configurado no servidor.
Autenticação em FTP
As informações de autenticação FTP são transmitidas pelo canal de comando durante o estabelecimento da conexão inicial. O FTP pode utilizar um nome de usuário e senha para autenticação, ou permitir acesso anônimo ao servidor.
Modos FTP Ativo e Passivo
O FTP utiliza os modos Ativo e Passivo para configurar as conexões.
No modo Ativo, o cliente se conecta a partir de uma porta aleatória à porta 21/tcp do servidor, e envia o comando PORT, especificando a porta do cliente para onde o servidor deve se conectar. Esta porta será utilizada para o canal de dados.
O servidor, por sua vez, se conecta da porta 20/tcp à porta do cliente especificada anteriormente com o comando PORT. Este canal de dados é utilizado para a transferência de arquivos entre o servidor e o cliente.
No modo Passivo, o cliente se conecta a partir de uma porta aleatória à porta 21/tcp do servidor, e envia o comando PASV. O servidor responde com uma porta aleatória que deve ser utilizada para o canal de dados. O cliente, então, usa outra porta aleatória para se conectar à porta indicada pelo servidor. Esta conexão de canal de dados é utilizada para a transferência de arquivos.
Dessa forma, no modo Ativo, a solicitação de conexão inicial é feita pelo cliente, enquanto a conexão do canal de dados é iniciada pelo servidor.
Por outro lado, no modo Passivo, tanto a conexão inicial quanto a do canal de dados são iniciadas pelo cliente em direção ao servidor. Esta diferença sutil pode afetar a forma como um firewall permite ou bloqueia solicitações de FTP devido à direção das conexões de entrada/saída.
FTPS
Mesmo que o usuário esteja disposto a correr os riscos associados ao FTP, como a transmissão de dados não criptografados e ataques “man-in-the-middle”, as exigências do setor impõem o uso de alternativas mais seguras, como FTPS e SFTP, que oferecem uma proteção superior.
Em 1990, com o aumento das preocupações com segurança, a Netscape criou o protocolo SSL (Secure Sockets Layer), agora conhecido como TLS, para proteger a comunicação em redes. O SSL foi aplicado ao FTP, resultando no FTPS (File Transfer Protocol Secure). O FTPS geralmente utiliza a porta 990/tcp, mas pode também ser encontrado na porta 21/tcp. De forma similar, a porta 989/tcp é comummente usada para o canal de dados do FTPS. Se a porta de comando for 21/tcp, espera-se que sua porta de dados seja 20/tcp.
Assim como o FTP, o FTPS utiliza dois canais para comunicação: um para comandos e outro para dados. O canal de dados pode ser criptografado no FTPS, ou ambos, canais de comando e dados, podem ser criptografados para maior segurança.
O FTPS, como o FTP, utiliza múltiplas portas para os canais de comando e dados. A porta 21/tcp é usada para a conexão inicial e a transmissão das informações de autenticação. Posteriormente, portas adicionais são necessárias para configurar os canais de dados para cada solicitação de transferência de arquivos ou listagem de diretórios do cliente. Assim, assim como o FTP, o FTPS necessita de um intervalo de portas liberadas no firewall.
Autenticação em FTPS
A autenticação no FTPS utiliza um nome de usuário e senha, juntamente com um certificado de servidor para criptografia. Quando um cliente FTPS se conecta a um servidor, ele verifica se o certificado do servidor é confiável para continuar a conexão. Este certificado pode ser solicitado tanto pelo cliente quanto pelo servidor.
SFTP
Ao contrário do FTP e do FTPS, o SFTP (SSH File Transfer Protocol) é um protocolo completamente diferente, construído sobre o SSH (Secure Shell). O SFTP, por padrão, opera na porta 22/tcp, a mesma do SSH, embora possa ser configurado para usar uma porta personalizada no servidor.
O SFTP é um protocolo de transferência de arquivos seguro que utiliza SSH para enviar e receber arquivos. Como o SSH é totalmente criptografado, o SFTP é um método robusto e seguro para transferir arquivos em uma rede.
O SFTP, diferentemente do FTP e do FTPS, utiliza um único canal de comunicação para transferir comandos e dados, todos transmitidos de forma criptografada, incluindo a autenticação inicial.
Autenticação em SFTP
A autenticação no SFTP pode ser realizada por meio de um nome de usuário e senha, mas, diferentemente do FTP, todas as informações, incluindo detalhes de autenticação, são transmitidas de forma criptografada pela rede.
O SFTP também suporta a autenticação por meio de um par de chaves SSH, combinando uma chave privada e pública. O cliente fornece a chave privada para o usuário especificado, e o servidor deve possuir a chave pública correspondente para que a autenticação seja bem-sucedida. Esta opção é mais segura do que a combinação de nome de usuário/senha. É possível autenticar um mesmo usuário usando senha e chaves SSH, se ambos os métodos forem configurados no servidor SFTP.
Resumo
Este artigo resume as características essenciais dos protocolos de transferência de arquivos populares, como FTP, FTPS e SFTP, destacando as diferenças sutis e principais entre eles. Ele aborda as portas que precisam ser liberadas em um firewall para configurar um servidor FTP/FTPS/SFTP funcional, enfatizando a importância de migrar para protocolos mais seguros, como FTPS e SFTP.
Ao utilizar o termo “FTP” neste artigo, refiro-me a qualquer protocolo discutido. Isso se deve ao fato de que o FTP possui décadas de existência, e mesmo as versões seguras mais recentes são frequentemente chamadas de FTP, em vez de seus nomes específicos.
Você também pode ter interesse em conhecer os melhores softwares de servidor FTP e clientes FTP/SFTP.