05 - Fundamentos
video: https://youtu.be/... no frontmatter da nota.Fundamentos do Protocolo FTP
O FTP (File Transfer Protocol) é o protocolo clássico da Camada de Aplicação para transferência de arquivos entre hospedeiros na internet. Definido pela RFC 95 (1971) e posteriormente pela RFC 959 (1985, FTP padrão atual), o FTP foi amplamente utilizado por décadas para publicação de sites, distribuição de softwares e troca de grandes volumes de dados. Com o tempo, foi perdendo espaço para alternativas mais seguras (SFTP, FTPS, HTTP), mas permanece relevante em ambientes legados, mainframes e integrações B2B.
1. Características Fundamentais
| Atributo | Valor |
|---|---|
| Camada OSI | 7 (Aplicação) |
| Protocolo de transporte | TCP |
| Portas padrão | 21 (controle) e 20 (dados, modo ativo) |
| Modelo | Cliente-Servidor com dois canais |
| Estado | Stateful (mantém sessão) |
| Codificação | Texto ASCII (comandos) + binário (dados) |
| RFCs principais | 959, 2228, 2428, 4217, 3659 |
2. Arquitetura de Dois Canais
Diferente da maioria dos protocolos de aplicação, o FTP usa duas conexões TCP simultâneas:
| Canal | Porta | Direção | Função |
|---|---|---|---|
| Controle (Control) | 21 | Cliente → Servidor | Comandos FTP e respostas de status |
| Dados (Data) | 20 (ativo) ou efêmera (passivo) | Variável | Transferência de arquivos e listagens de diretório |
O canal de controle permanece aberto durante toda a sessão, enquanto o canal de dados é aberto e fechado para cada transferência. Essa separação permite que o servidor envie respostas de status (incluindo aborts e progresso) durante uma transferência longa.
Exemplo de Sessão FTP (Resumo de Fluxo)
- TCP SYN (cliente → porta 21 do servidor).
USER anonymous→331 Please specify password.PASS user@exemplo.com→230 Login successful.PWD→257 "/".PASV→227 Entering Passive Mode (192,168,1,10,195,80)(IP e porta calculada como195*256+80=50000).- Novo TCP SYN para a porta de dados.
LIST→150 Here comes listing→ dados →226 Directory send OK.QUIT→221 Goodbye.
3. Modos de Transferência
O FTP define dois modos de estabelecer o canal de dados:
Modo Ativo (Active Mode, PORT)
- O cliente envia o comando
PORTinformando seu IP e porta onde ouvirá. - O servidor abre conexão TCP da porta 20 para o IP:porta do cliente.
- Problema: firewalls do lado do cliente costumam bloquear conexões entrantes, tornando o modo ativo problemático em redes NAT.
Modo Passivo (Passive Mode, PASV)
- O cliente envia o comando
PASVe o servidor responde com IP:porta onde está ouvindo. - O cliente abre conexão TCP para o servidor (típica de NAT — conexão que entra no cliente é a mesma que sai).
- Recomendado para clientes atrás de NAT ou firewall estrito.
- Exemplo de resposta:
227 Entering Passive Mode (192,168,1,10,195,80)onde IP=192.168.1.10 e Porta=195*256+80=50000.
4. Tipos de Transferência
| Tipo | Codificação | Uso |
|---|---|---|
| ASCII | Texto com conversão de fim de linha | Arquivos .txt, .html, .csv |
| Binário (Image) | Bytes preservados | Imagens, vídeos, executáveis, ZIP |
No modo ASCII, o FTP converte quebras de linha (LF no Unix, CRLF no Windows) entre sistemas diferentes. No modo binário, os bytes são transferidos sem alteração.
5. Comandos FTP Principais
| Categoria | Comandos |
|---|---|
| Autenticação | USER, PASS, QUIT |
| Navegação | PWD, CWD, CDUP, LIST, NLST, MLSD |
| Transferência | RETR (download), STOR (upload), APPE (append), REST (restart) |
| Manipulação | DELE, MKD, RMD, RNFR/RNTO (rename) |
| Modo | PASV, PORT a,b,c,d,p1,p2, TYPE A/I, MODE S/B/C |
| Info | SYST, FEAT, SIZE, MDTM, NOOP, HELP |
6. Códigos de Resposta
Os códigos seguem padrão similar ao HTTP/SMTP:
| Faixa | Significado |
|---|---|
| 1xx | Resposta preliminar (ação iniciada) |
| 2xx | Sucesso (ação completada) |
| 3xx | Resposta intermediária (precisa mais info) |
| 4xx | Erro temporário (tente novamente) |
| 5xx | Erro permanente (falhou) |
Exemplos: 220 Service ready, 230 Login successful, 226 Transfer complete, 530 Not logged in, 550 File unavailable.
7. Autenticação
FTP Anônimo (Anonymous FTP)
Histórico (RFC 1635), permitia acesso público com usuário anonymous e senha sendo o e-mail. Usado por repositórios de softwares, mirrors e instituições acadêmicas.
FTP com Usuário
Credenciais reais validadas no servidor (via PAM, /etc/passwd ou base própria). Senhas trafegam em texto puro pela rede — problema crítico de segurança.
8. Extensões Modernas
| RFC | Extensão | Função |
|---|---|---|
| 2228 | FTP Security (FTPSEC) | Autenticação e criptografia |
| 2428 | IPv6 e NAT traversal | Comandos EPRT e EPSV |
| 3659 | Extensions | SIZE, MDTM, REST, MLSD |
| 4217 | FTP over TLS (FTPS) | AUTH TLS |
| 5737 | IPv6 examples | Boas práticas para servidores |
FTPS (FTP over TLS)
Adiciona criptografia TLS ao FTP:
- Explicit FTPS (FTPES): na porta 21, cliente envia
AUTH TLSe o servidor promove para TLS. Permite servidor único atender FTP e FTPS. - Implicit FTPS: na porta 990, o TLS é obrigatório desde o início da conexão (obsoleto).
SFTP (SSH File Transfer Protocol)
Não confundir com FTPS. SFTP é um subsistema do SSH (RFC 4251-4254), não tem relação com o FTP original. Roda na porta 22, usa um único canal e é criptografado nativamente.
9. Servidores FTP Comuns
| Servidor | Sistema | Destaque |
|---|---|---|
| vsftpd | Linux | Segurança, performance, padrão em servidores |
| ProFTPD | Linux | Configurável estilo Apache |
| Pure-FTPd | Linux | Foco em segurança e virtual users |
| FileZilla Server | Windows | Interface gráfica, popular em TI pequena |
| IIS FTP | Windows | Integrado ao Active Directory |
| wu-ftpd | Linux (legado) | Histórico, abandonado por vulnerabilidades |
Exemplo: Configuração vsftpd
# /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
ssl_enable=YES
require_ssl_reuse=NO
ssl_tlsv1_2=YES
ssl_tlsv1_3=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
10. Vulnerabilidades e Segurança
Problemas do FTP Clássico
- Credenciais em texto puro: senhas capturadas com sniffers (tcpdump, Wireshark).
- Bounce Attack: servidor FTP usado como relay para port scan (CVE-1999-0017).
- Sem integridade: arquivos podem ser alterados no caminho sem detecção.
- PORT command spoofing: cliente mente IP, podendo redirecionar transferência para terceiro.
- Múltiplas portas: complexidade para firewalls (precisa abrir faixa PASV).
Mitigações
- Substituir FTP por SFTP ou FTPS em produção.
- Restringir
chroot_local_user=YESpara prevenir escape do diretório. - Usar fail2ban contra brute-force.
- Filtrar IPs por ACL (
tcp_wrappers). - Habilitar TLS 1.2+ e desabilitar SSLv3/TLS 1.0.
- Monitorar logs (
/var/log/vsftpd.log).
11. Auditoria e Diagnóstico
ftp ftp.exemplo.com # conexão interativa
curl -v -u usuario:senha ftp://ftp.exemplo.com/ # conexão com curl
lftp -u usuario,senha ftp.exemplo.com -e "ls; quit" # listagem com lftp
lftp -u usuario,senha ftps://ftp.exemplo.com/ # FTPS explicit TLS
sudo tcpdump -i eth0 -A port 21 # captura (senhas em claro!)
nc -v ftp.exemplo.com 21 # verificar banner
12. FTP Moderno vs Alternativas
| Recurso | FTP | FTPS | SFTP | HTTP/HTTPS |
|---|---|---|---|---|
| Portas | 21+20 | 21+990 | 22 | 80/443 |
| Canais | 2 (controle+dados) | 2 | 1 | 1 |
| Criptografia | Não | TLS | SSH (sempre) | TLS (HTTPS) |
| NAT-friendly | Não (ativo) | Não (ativo) | Sim | Sim |
| Firewall-friendly | Não | Não | Sim | Sim |
| Cenário moderno | Legado, B2B | Compatível | Padrão Linux | Web distribution |
13. Conclusão
O FTP é um protocolo histórico que ainda encontra utilidade em nichos como mainframes, EDI/B2B e integrações legadas. Seu design de dois canais e sua falta de criptografia nativa tornaram-no inseguro para a maioria dos cenários modernos, onde SFTP e FTPS são as escolhas recomendadas. Entender os fundamentos do FTP — arquitetura de dois canais, modos ativo/passivo, comandos e códigos de resposta — é essencial para administrar servidores de arquivo e diagnosticar problemas em ambientes mistos com legados.