FTP conecta mas não lista pastas no servidor com CSF? Veja como liberar as portas passivas no CSF e no Pure-FTPd ou ProFTPD do cPanel.
Este guia é para quem administra o servidor. Se você é cliente de hospedagem e o FTP parou de conectar, o caso é outro: provavelmente o seu IP foi bloqueado. Veja FTP bloqueado pelo firewall: como liberar o seu IP.
Por que o FTP trava com o firewall ligado
O FTP usa duas conexões. A primeira, de controle, vai para a porta 21 e carrega o login e os comandos. Cada listagem de pasta ou transferência abre uma segunda conexão, de dados. No modo passivo, que é o padrão do FileZilla e de quase todo programa, essa segunda conexão entra no servidor por uma porta alta escolhida na hora pelo servidor de FTP.
O firewall só deixa essa porta passar se reconhecer que ela pertence a uma sessão de FTP. Esse reconhecimento é feito pelo módulo de rastreamento de FTP do kernel, que lê a resposta do servidor na porta 21. Com FTP sobre TLS (FTPS, que o FileZilla usa sempre que o servidor oferece), a conexão de controle é criptografada e o módulo não consegue ler nada. Nos kernels atuais, esse rastreamento automático também deixou de vir ligado por padrão. Resultado: o login funciona e a listagem trava.
A solução confiável é a mesma em todos os casos: definir uma faixa fixa de portas passivas no servidor de FTP e abrir exatamente essa faixa no CSF.
Como identificar o problema
No FileZilla, o registro mostra o login aceito, o comando de listagem e depois uma espera longa. Com o programa em inglês, termina assim (em português a mensagem é a tradução dessas linhas):
Command: MLSD
Error: Connection timed out after 20 seconds of inactivity
Error: Failed to retrieve directory listing
Se aparece 530 Login authentication failed, o problema é usuário ou senha. Se o programa nem chega a conectar na porta 21, o IP do cliente provavelmente está bloqueado pelo lfd (confira com csf -g IP-DO-CLIENTE).
Antes de começar
- Acesso root pelo SSH ao servidor.
- CSF instalado e fora do modo de teste (veja como instalar o CSF).
- Saber qual servidor de FTP está em uso: WHM » Service Configuration » FTP Server Selection mostra se é Pure-FTPd, ProFTPD ou se o FTP está desativado (é assim que ele vem nas instalações novas do cPanel, porque o FTP sem TLS manda a senha sem criptografia).
Como liberar o FTP passivo no CSF (Pure-FTPd)
- Descubra a faixa passiva que o servidor já usa. Nas versões atuais, o cPanel configura o Pure-FTPd com a faixa
49152a65534. Confira:
A resposta esperada égrep -i '^PassivePortRange' /etc/pure-ftpd.confPassivePortRange 49152 65534. Se a linha não existir ou estiver comentada, defina a faixa no passo 4. - Abra a mesma faixa no CSF. Em WHM » Plugins » ConfigServer Security & Firewall » Firewall Configuration, acrescente
,49152:65534ao fim de TCP_IN (e de TCP6_IN, se usa IPv6). Clique em Change. No arquivo, a linha fica parecida com:TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,853,993,995,2077,2078,2079,2080,2082,2083,2086,2087,2095,2096,8443,49152:65534" - Reinicie o firewall: clique em Restart csf+lfd ou rode
csf -ra. - Só se precisar mudar a faixa. Edite a configuração local do cPanel, e não o
/etc/pure-ftpd.confdireto (ele é regravado pelo cPanel):
Use portas acima de 1024 e uma faixa larga: cada cliente transferindo arquivos ocupa uma porta.echo "PassivePortRange: 49152 65534" >> /var/cpanel/conf/pureftpd/local /usr/local/cpanel/scripts/setupftpserver pure-ftpd --force - Teste com o FileZilla em modo passivo, de preferência com a criptografia em FTP explícito sobre TLS. A listagem deve aparecer na hora.
Como liberar o FTP passivo com ProFTPD
A lógica é a mesma. Confira a faixa com grep -i '^PassivePorts' /etc/proftpd.conf e abra no CSF a faixa que aparecer. Para mudar de forma permanente, use o arquivo local do cPanel para o ProFTPD:
echo "PassivePorts: 49152 65534" >> /var/cpanel/conf/proftpd/local
/usr/local/cpanel/scripts/setupftpserver proftpd --force
ForcePassiveIP no mesmo arquivo /var/cpanel/conf/pureftpd/local. Sem isso, o servidor manda o cliente conectar num IP interno.Problemas comuns
Abri a faixa e continua travando
A faixa do CSF e a do servidor de FTP não batem. Compare a saída do grep do passo 1 com o TCP_IN. Confira também se o provedor ou a rede tem outro firewall na frente do servidor (o do painel de nuvem, por exemplo) que precise da mesma liberação.
421 Too many connections
Não é o firewall. É o limite de conexões simultâneas por IP do Pure-FTPd, que aparece quando o programa abre muitas transferências ao mesmo tempo. Diminua o número de transferências simultâneas no FileZilla (Editar » Configurações » Transferências) ou ajuste Maximum Connections Per IP Address em WHM » Service Configuration » FTP Server Configuration.
Funciona em FTP comum, mas não com TLS
É exatamente o caso deste guia: sem a faixa passiva aberta, o FTP comum às vezes passa pelo rastreamento do kernel e o FTPS nunca passa. Abra a faixa em vez de desligar o TLS. Sem TLS, usuário e senha trafegam sem criptografia.
O cliente do FTP não conecta de jeito nenhum
Muitas senhas erradas fazem o lfd bloquear o IP (opção LF_FTPD). Procure com csf -g IP-DO-CLIENTE e desbloqueie com csf -dr (permanente) ou csf -tr (temporário).