FTP vs FTPS vs SFTP

FTP (Fie Transfer Protocol)

O FTP é um protocolo bastante antigo, com uns 40 anos de idade.

Comunicação

O protocolo FTP utiliza dois canais de comunicação independentes: um pada comandos e outro para dados.

Por padrão, o canal de comando utiliza a porta 21/TCP no servidor e é responsável pelo recebimento da conexão dos clientes e o tratamento dos comandos recebidos do mesmos. Como exemplo, os comandos USER e PASS são utilizados para autenticação do usuário. O canal de comando permanece estabelecido até que o cliente envie o comando QUIT para desconectar, ou até que o servidor force a desconexão por qualquer outra razão.

O canal de dados utiliza portas temporárias alocadas sob demanda pelo servidor (modo passivo) ou no cliente (modo ativo). O canal de dados é responsável pela troca de dados na forma de listagens de diretórios e transferência de arquivos. Ao contrário do canal de comandos, que permanece aberto (conectado) durante toda a sessão so usuário, o canal de dados é fechado assim que a transferência de dados é finalizada.

Segurança

No FTP, ambos os canais de comunicação (comandos e dados) trafegam em texto em claro, isto é, não possuem nenhuma proteção. Quaisquer dados enviados por estes canais podem ser interceptados e interpretados. Técnicas simples de roubos de dados, tais como ataques do tipo MITM (man-in-the-middle) usando ARP poisoning (envenenamento de ARP) ou até mesmo um simples sniffer de rede podem ser utilizadas para a captura e interpretação dos dados trafegados entre o cliente e o servidor.

Firewall

No servidor, deve ser liberado o acesso para conexões à porta 21. No modo ativo, deve ser liberada uma faixa de portas para as conexões dos canais de dados (conexões realizadas do servidor para o cliente) e, no modo passivo, será necessário liberar o acesso à conexões entrantes (do cliente para o servidor) numa faixa específica de portas. Consulte a documentação do servidor para obter a faixa de portas utilizada no modo passivo.

No cliente, o firewall deve permitir conexões de saída para a porta 21 e para as portas definidas pelo servidor no modo passivo. Alguns firewalls possuem recursos de análise de conexão que avaliam as conexões e permitem a configuração das portas definidas na conexão FTP de uma forma bastante simples. No entanto, observe que este tratamento de conexões consome recursos do firewall, motivo pelo qual não gosto muito do FTP (além da falta de segurança do protocolo).

FTPS (File Transfer Protocol over SSL)

Quando o FTP foi desenvolvido, a segurança não era uma preocupação. Desde então, muita coisa mudou e o envio de dados pela Internet sem nenhum tipo de proteção é considerado um risco enorme e proibitivo em muitos casos. Normas reguladoras como, por exemplo, o PCI_DSS e o HIPAA contém requisitos que exigem a proteção criptográfica dos dados em trânsito.

Para contornar esta fraqueza do protocolo FTP, foi criado um mecanismo de protação so FTP através da criptografia dos dados usando SSL (Security Socket Layer), conforme descrito na RFC2228.

Comunicação

No FTPS a troca de dados ocorre da mesma forma que no FTP original.

Segurança

Há dois modos de operação do FTPS: com SSL implícito e com SSL explícito.

FTPS com SSL implícito

No modo SSL implícito, a sessão SSL é estabelecida entre o cliente e o servidor antes de qualquer troca de dados. Como o nome sugere, o SSL é implícito e qualquer tentativa de conexão realizada pelo cliente sem usar SSL é rejeitada pelo servidor. Os serviços FTPS com SSL implícito geralmente são executados na porta 990. Apesar de ainda ser utilizado, o FTPS com SSL implícito é considerado por muitos como sendo obsoleto em favor do FTPS com SSL explícito.

FTPS com SSL explícito

No modo SSL explícito, o cliente e o servidor negociam o nível de proteção a ser utilizado. Isto é útil por permitir que o servidor suporte sessões criptografadas ou não numa mesma porta.

Numa sessão com SSL explícito, o cliente estabalece uma conexão não criptografada com o serviço FTP e, antes de enviar as credenciais de uauário (autenticação), o cliente solicita ao servidor que comute o canal de comando para um canal cifrado com SSL através do envio do comando AUTH SSL ou AUTH TLS. Uma vez que o canal cifrado tenha sido estabelecido, o cliente envia as credenciais de usuário para o servidor.

De maneira similar ao mecanismo de proteção do canal de comandos, o canal de dados pode ser protegido através da negociação entre o cliente e o servidor através do comando PROT.

Firewall

No servidor, devem ser permitidas conexões entrantes (para o servidor) nas portas 21 e/ou 990, permitir conexões de saída na faixa de portas configuradas no servidor para o modo ativo, e permitir conexões de entrada para a faixa de portas configuradas no servidor para o modo ativo.

No cliente, devem ser permitidas conexões de saída para a porta 21 dos servidores e a faixa de portas definidas pelo servidor.

SFTP (Secure File Transfer Protocol)

SFTP é, muitas vezes, confundido com o FTPS e vice-versa mas, na verdade, excetuando-se o fato de que estes protocolos permitem a transferência segura de arquivos, eles não têm nanhuma relação um com o outro.

O SFTP é baseado no protocolo SSH (Secure Shell) que, por sua vez, é mais conhecido pelo seu uso no acesso remoto seguro à contas de usuários em servidores remotos. Quem usa sistemas Unix e Linux já deve tê-lo usado.

Comunicação

Ao contrário do FTPS, o SFTP não utiliza canais exclusivos para comandos e dados. Tanto comandos como dados são transferidos em pacotes especialmente formatados através de uma única conexão.

Segurança

Todos os dados enviados entre cliente e servidor são cifrados usando uma cifra acordada no processo de conexão. As sessões SFTP também podem ser protegidas através do uso de chaves assimétricas (chaves públicas e privadas), que é conhecida como autenticação de chave pública. Este método pode ser usado como alternativa ou em conjunto com a autenticação tradicional de usuário e senha.

Firewall

No servidor, o firewall deve permitir conexões de entrada à porta 22/TCP.

No cliente, deve ser liberada a saída de conexões com destino à porta 22/TCP.