Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

04 - Protocolo FTP

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Protocolo FTP

1. Visão Geral e Posicionamento Histórico

O File Transfer Protocol (FTP) é um dos protocolos de aplicação mais antigos ainda em operação na Internet contemporânea. Publicado originalmente como RFC 114 em 1971 por Abhay Bhushan, foi reformulado em 1985 pela RFC 959, versão ainda vigente como referência normativa. Pertencente à camada de aplicação do modelo TCP/IP, o FTP provê um serviço orientado à transferência confiável de arquivos entre sistemas heterogêneos, utilizando o TCP como protocolo de transporte para garantir entrega ordenada e sem perdas.

Diferente de protocolos modernos como HTTP/2 ou HTTP/3, o FTP mantém um design de estado de sessão (stateful), característica que o torna eficiente para operações encadeadas (navegação em diretórios, retomada de uploads), mas problemático para ambientes de alta escala e balanceamento de carga. Sua presença é obrigatória em qualquer estudo aprofundado de redes, pois ilustra trade-offs fundamentais entre simplicidade, performance e segurança.


2. Características Técnicas Fundamentais

Atributo Valor
RFC principal 959 (1985), com atualizações em 2228, 2428, 4217
Porta de controle TCP 21
Porta de dados (ativo) TCP 20
Porta de dados (passivo) TCP efêmera (acordada em runtime)
Protocolo de transporte TCP (obrigatório, não opera sobre UDP)
Codificação de comandos ASCII de 7 bits, terminados por CRLF
Modelo de estado Stateful (sessão persistente)
Modos de transferência Stream, Block, Compressed
Tipos de dados ASCII (A), EBCDIC (E), Image (I), Local (L)

O FTP impõe uma divisão arquitetural rigorosa entre Protocol Interpreter (PI), que manipula comandos e respostas, e Data Transfer Process (DTP), responsável pela movimentação efetiva dos bytes. Essa separação reflete-se em duas conexões TCP distintas, mantidas simultaneamente durante a sessão ativa.


3. O Modelo de Duas Conexões TCP

A peculiaridade mais marcante do FTP é a utilização de dois canais paralelos de comunicação:

Canal de Controle (PI)

Estabelecido na porta TCP 21 do servidor. Permanece aberto durante toda a sessão, transportando exclusivamente comandos textuais e respostas numéricas. Por aqui transitam USER, PASS, CWD, TYPE I, PASV, RETR, STOR, LIST, QUIT, entre outros. Cada comando é composto por quatro letras maiúsculas, seguidas de argumentos opcionais e terminados por CRLF (\r\n).

Canal de Dados (DTP)

Aberto apenas durante operações de transferência ou listagem. Após o envio do arquivo, é fechado, mantendo-se apenas o canal de controle aguardando o próximo comando. Esse isolamento permite que um operador canule uma transferência gigante via comando ABOR sem precisar derrubar a sessão inteira.


4. Modos de Operação do Canal de Dados

Modo Ativo (Active Mode)

O cliente informa, via comando PORT h1,h2,h3,h4,p1,p2, qual endereço IP e porta ele está ouvindo. O servidor origina uma conexão TCP a partir da porta 20 em direção ao cliente. Esse modo quebra-se em ambientes com NAT, pois o servidor não consegue alcançar IPs privados do cliente.

Modo Passivo (Passive Mode)

Introduzido formalmente pela RFC 959 e estendido pela RFC 2428 (EPSV para IPv6). O cliente envia PASV; o servidor responde com IP e porta em que está aceitando conexão de dados; o cliente então abre a conexão. Esse modo tornou-se o padrão de facto em clientes modernos por ser compatível com NAT, firewalls residenciais e containers em cloud.


5. Comandos Principais e Respostas

Comandos de Controle Comuns

Comando Função
USER <nome> Identifica o usuário
PASS <senha> Envia a senha de acesso
SYST Consulta o sistema operacional do servidor
PWD Exibe o diretório atual
CWD <dir> Altera o diretório de trabalho
TYPE I Define transferência binária
TYPE A Define transferência ASCII
PASV Entra em modo passivo
LIST Lista arquivos do diretório atual
RETR <arq> Baixa (download) um arquivo
STOR <arq> Envia (upload) um arquivo
DELE <arq> Remove um arquivo
MKD <dir> Cria um diretório
RNFR / RNTO Renomeia arquivos em duas etapas
REST <offset> Define ponto de retomada de transferência
QUIT Encerra a sessão

Códigos de Resposta (Três Dígitos)

  • 1xx: Resposta preliminar positiva (ex.: 150 — abertura de canal de dados).
  • 2xx: Resposta de conclusão positiva (ex.: 226 — transferência concluída).
  • 3xx: Resposta intermediária positiva (ex.: 331 — aguardando senha).
  • 4xx: Erro transitório (ex.: 421 — serviço indisponível).
  • 5xx: Erro permanente (ex.: 530 — falha de autenticação).

6. Modelos de Segurança: FTP, FTPS e SFTP

A separação conceitual entre as três variantes é uma das fontes mais comuns de confusão em equipes de operação.

Variante RFC Transporte Portas Criptografia
FTP 959 TCP 21 + 20/efêmera Nenhuma
FTPS (Implicit) 4217 TLS direto 990 + 989 TLS desde o handshake
FTPS (Explicit) 4217 TLS negociado 21 + efêmera TLS após AUTH TLS
SFTP 4251 Subsistema SSH 22 única SSH nativo

Importante: SFTP não é FTP sobre SSH. É um protocolo distinto, parte do conjunto SSH-2, que substitui integralmente a arquitetura dual-channel do FTP por um canal único cifrado. Empresas modernas tipicamente abandonam o FTP clássico em favor de SFTP por simplificação de firewall e segurança nativa.


7. Fluxo de Uma Sessão Típica

Abaixo, um exemplo de diálogo entre cliente e servidor FTP clássico (sem criptografia):

Cliente -> Servidor:  TCP SYN para porta 21
Servidor -> Cliente:  220 Service ready for new user
Cliente -> Servidor:  USER anonymous
Servidor -> Cliente:  331 User name ok, need password
Cliente -> Servidor:  PASS guest@
Servidor -> Cliente:  230 User logged in
Cliente -> Servidor:  PWD
Servidor -> Cliente:  257 "/" is current directory
Cliente -> Servidor:  TYPE I
Servidor -> Cliente:  200 Type set to I
Cliente -> Servidor:  PASV
Servidor -> Cliente:  227 Entering Passive Mode (192,168,1,10,4,1)
Cliente -> Servidor:  [TCP SYN para porta 1025 do servidor]
Cliente -> Servidor:  RETR backup.tar.gz
Servidor -> Cliente:  150 Opening data connection
Servidor -> Cliente:  [fluxo de bytes do arquivo]
Servidor -> Cliente:  226 Transfer complete
Cliente -> Servidor:  QUIT
Servidor -> Cliente:  221 Goodbye

8. Aplicações Práticas e Limitações

Cenários em que FTP ainda é empregado

  • Distribuição de mirrors públicos de software (ex.: ftp.gnu.org, ftp.ripe.net).
  • Troca de EDI (Electronic Data Interchange) entre bancos e varejistas.
  • Publicação de conteúdo em hospedagens compartilhadas (cPanel).
  • Cargas noturnas de batch em mainframes (z/OS).

Limitações Estruturais

  • Inseguro por padrão: credenciais e dados trafegam em texto claro.
  • Incompatível com HTTP CDN: não se beneficia de cache distribuído.
  • Difícil de balancear: sessões stateful exigem stickyness no load balancer.
  • Penoso para firewalls: o modo ativo exige liberação reversa; o modo passivo exige faixa de portas efêmeras acordadas.

9. Diagnóstico e Troubleshooting

# Sessão FTP interativa com logs detalhados
curl -v ftp://ftp.example.com/ --user user:pass

# Captura do canal de controle para análise de comandos
tcpdump -i any -A 'tcp port 21' -w ftp_control.pcap

# Teste de modo passivo com lftp
lftp -d -c "open -u user,pass ftp.example.com; set ftp:passive-mode on; ls"

# Download com retomada (Resume) a partir do byte 1048576
curl -C 1048576 -o bigfile.iso ftp://ftp.example.com/bigfile.iso

10. Conclusão

O Protocolo FTP, apesar de sua idade avançada, permanece como uma peça fundamental do ecossistema de redes. Compreender sua arquitetura dual-channel, os modos ativo/passivo, os códigos de resposta e as variações modernas (FTPS, SFTP) é imprescindível para qualquer profissional de infraestrutura. Domine a sua norma RFC 959, identifique quando substituí-lo por SFTP por questões de segurança e audite constantemente as transferências anômalas para garantir que os dados da organização se movam com precisão, performance e conformidade regulatória.