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

02 - Modos Ativo e Passivo

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

Modos Ativo e Passivo do FTP

1. Definição

O FTP (File Transfer Protocol, RFC 959) é um protocolo assimétrico de dupla conexão: utiliza uma conexão TCP persistente para controle (porta 21) e conexões TCP separadas e efêmeras para transferência de dados. A forma como a conexão de dados é estabelecida define os dois modos operacionais do FTP:

  • Modo Ativo (PORT): o servidor inicia a conexão de dados em direção ao cliente.
  • Modo Passivo (PASV): o cliente inicia a conexão de dados em direção ao servidor.

Essa dualidade existe porque o FTP foi projetado em 1971 (RFC 114) e reformulado em 1985 (RFC 959), quando a topologia típica era cliente com IP público se conectando diretamente a servidor com IP público — sem NAT, sem firewall pessoal, sem CGNAT. A proliferação de NAT e firewalls stateful a partir dos anos 1990 tornou o modo ativo problemático, e o modo passivo tornou-se o padrão de fato em clientes modernos.

Comparação Rápida

Característica Modo Ativo Modo Passivo
Comando PORT PASV
Quem inicia dados Servidor → Cliente Cliente → Servidor
Porta dados (servidor) 20 (fixa) Alta efêmera
Porta dados (cliente) Informada no comando Aleatória local
Atravessa NAT cliente Não (na maioria) Sim
Atravessa firewall servidor Sim Requer config de range
Padrão em clientes Não Sim

2. Modo Ativo (PORT)

No modo ativo, o cliente FTP envia o comando PORT informando o endereço IP e porta em que está escutando. O servidor então abre uma conexão TCP de sua porta 20 em direção àquele endereço/porta do cliente.

Sintaxe do Comando PORT

O formato é PORT h1,h2,h3,h4,p1,p2, onde h1.h2.h3.h4 é o IP e a porta é p1*256 + p2:

C: PORT 192,168,0,10,4,1
S: 200 PORT command successful

Isso informa: "estou escutando em 192.168.0.10:1025" (4*256+1=1025). O servidor conectará de sua porta 20 para 192.168.0.10:1025.

Fluxo da Conexão (Modo Ativo)

Cliente (192.168.0.10)              Servidor (203.0.113.5)
   | -- TCP SYN --> 203.0.113.5:21 ---->|
   |<-- SYN-ACK (controle estabelecido) |
   | -- USER, PASS, PORT 192,168,0,10,4,1 -->|
   |<-- 200 PORT command successful     |
   |<-- TCP SYN da porta 20 p/ 1025 ----|  (servidor inicia dados)
   |<-- ACK (canal de dados estabelecido)|
   |<-- dados do arquivo (LIST, RETR) ---|

Problemas do Modo Ativo

  • NAT no cliente: o cliente informa seu IP privado (192.168.0.10), inválido na internet. NATs com ALG (Application Layer Gateway) podem reescrever o comando PORT, mas é frágil.
  • Firewall no cliente: deve aceitar conexões TCP entrantes em portas altas (1024-65535). Em estações Windows/Mac com firewall pessoal, requer regra explícita.
  • Incompatível com CGNAT: o cliente atrás de CGNAT do provedor (comum em 4G/5G) nunca é alcançável do exterior.
  • Inseguro: o cliente abre portas em escuta, expondo superfície de ataque.

3. Modo Passivo (PASV)

No modo passivo, o cliente envia PASV e o servidor responde com o IP e porta em que ele próprio está escutando. O cliente então abre a conexão de dados em direção ao servidor.

Sintaxe da Resposta PASV

C: PASV
S: 227 Entering Passive Mode (203,0,113,5,195,80).

Isso indica: "conecte-se em 203.0.113.5:50000" (195*256+80=50000). O cliente abre conexão TCP de uma porta local aleatória para 203.0.113.5:50000.

Fluxo da Conexão (Modo Passivo)

Cliente (192.168.0.10)              Servidor (203.0.113.5)
   | -- TCP SYN --> 203.0.113.5:21 ---->|
   | -- USER, PASS, PASV -------------->|
   |<-- 227 (203,0,113,5,195,80)        |
   | -- TCP SYN --> 203.0.113.5:50000 ->|  (cliente inicia dados)
   |<-- ACK (canal de dados estabelecido)|
   | -- RETR arquivo.txt --------------->|
   |<-- dados do arquivo ----------------|

Vantagens do Modo Passivo

  • Compatível com NAT no cliente: o cliente só faz conexões saintes, que NATs stateful permitem naturalmente.
  • Funciona em CGNAT: o cliente só precisa de conectividade sainte (HTTP-like), sem portas entrantes.
  • Padrão moderno: todos os clientes (FileZilla, lftp, curl, browsers) usam passivo por padrão.

Desafios no Servidor

O servidor precisa abrir portas altas entrantes para o cliente conectar. Exige configurar range de portas passivas (pasv_min_port=40000, pasv_max_port=50000 no vsftpd), abrir esse range no firewall do servidor e, em NAT do servidor, configurar pasv_address para o IP público e encaminhar o range de portas. Em firewalls stateful, FTP ALG pode reescrever IPs do PASV, mas isso quebra com FTPS/SFTP.

Configuração típica no vsftpd:

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pasv_address=203.0.113.5
pasv_addr_resolve=NO

4. Modo Passivo Estendido (EPSV)

Definido na RFC 2428, EPSV (Extended Passive Mode) é a versão IPv6-friendly do PASV. Em vez de incluir o IP na resposta (problemático para IPv6 e NAT), usa formato simplificado que pressupõe o mesmo IP do canal de controle:

C: EPSV
S: 229 Entering Extended Passive Mode (|||50000|)

Os separadores | indicam que o endereço é o mesmo da conexão de controle. Companheiro do EPRT (Extended PORT) para modo ativo em IPv6, suportado por todos os servidores e clientes modernos.

5. Tabelas de Fluxo Comparativo

Conexões Envolvidas

Modo Conexão dados (origem) Conexão dados (destino)
Ativo Servidor:20 Cliente:porta_informada no PORT
Passivo Cliente:porta_alta Servidor:porta_alta (do range)

Cenários e Recomendação

Cenário Modo Motivo
Cliente atrás de NAT residencial Passivo Cliente só faz conexões saintes
Cliente em rede 4G/5G (CGNAT) Passivo CGNAT não permite conexões entrantes
Servidor em datacenter com IP público Passivo Mais simples para clientes externos
Servidor atrás de NAT (raro) Ativo ou Passivo com ALG Requer encaminhamento de portas
Cliente Unix via CLI legado Ativo ftp tradicional assume ativo
Cliente moderno (FileZilla, lftp) Passivo (padrão) Compatibilidade universal

6. Configuração por Cliente

FileZilla

Configurações → Conexão → FTP → Modo de transferência: Passivo (recomendado).

lftp (~/.lftp/rc)

set ftp:passive-mode on
set ftp:use-mdtm off

curl

curl -P - ftp://servidor/arquivo.txt      # Forçar ativo
curl ftp://servidor/arquivo.txt           # Passivo (padrão)
curl --ftp-method singlecwd ftp://[2001:db8::1]/arquivo   # EPSV (IPv6)

Cliente ftp BSD/Linux legado

ftp> passive
Passive mode: on; fallback to active mode: off.
ftp> ls

wget usa modo passivo por padrão desde a versão 1.8.

7. Diagnóstico de Problemas Comuns

Sintoma Causa Provável Solução
Login OK, mas ls trava Firewall bloqueando dados (ativo com NAT) Trocar para modo passivo
Conexão recusada em porta alta Range passivo fechado no firewall Abrir pasv_min_port-pasv_max_port
425 Can't open data connection Servidor não conecta ao cliente (ativo) Usar passivo
500 Invalid PORT command NAT não reescreveu IP privado Usar passivo ou configurar ALG
Lista em IPv4 mas falha em IPv6 Cliente envia PORT em vez de EPRT Forçar EPSV/EPRT

Inspeção com tcpdump e ALG

tcpdump -ni eth0 'port 21 or (port >= 40000 and port <= 50000)'
modprobe nf_conntrack_ftp
iptables -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -j ACCEPT

8. Boas Práticas

Prática Recomendação
Modo padrão cliente Passivo
Range passivo no servidor Limitar a 1000-2000 portas
NAT do servidor masquerade_address (ProFTPD) ou pasv_address (vsftpd) com IP público
ALG no firewall Desativar se FTPS/SFTP em uso (ALG quebra TLS)
Log de conexões xferlog_enable=YES, log_ftp_protocol=YES
Timeout dados data_connection_timeout=300
IPv6 Habilitar EPSV/EPRT em dual-stack
Substituição Migrar para SFTP/FTPS sempre que possível

9. Conclusão

A dualidade ativo/passivo do FTP é consequência direta do design de 1971, que pressupunha topologia sem NAT e IPs roteáveis globalmente. O modo ativo (PORT) obriga o servidor a conectar-se ao cliente, incompatível com NAT, CGNAT e firewalls pessoais modernos. O modo passivo (PASV) inverte a lógica — o cliente conecta-se ao servidor — e tornou-se o padrão universal em clientes modernos. Em ambientes IPv6 ou complexos, EPSV/EPRT (RFC 2428) oferecem versão limpa do protocolo. Ainda assim, a complexidade de dois canais TCP e a dificuldade de firewalls stateful rastrearem a porta dinâmica tornam o FTP cada vez mais obsoleto frente ao SFTP (porta 22, canal único SSH) e HTTPS.