Debugando pure-ftpd travado na mensagem de boas-vindas em cPanel/OVH
Voltar para blog

Debugando pure-ftpd travado na mensagem de boas-vindas em cPanel/OVH

07/06/2026 · 5 min · Infraestrutura

Debugando Pure-FTPd travado na mensagem de boas-vindas em cPanel/OVH#

Durante a manutenção de um servidor VPS sob cPanel utilizando o Pure-FTPd como daemon FTP, encontrei uma falha clássica de infraestrutura: o cliente FTP (como o FileZilla) estabelecia a conexão TCP inicial com sucesso, mas ficava travado indefinidamente na seguinte etapa:

Estado: Conexão estabelecida, esperando mensagem de boas-vindas...

Nesse cenário, o socket TCP é aberto corretamente (o handshake de três vias SYN -> SYN/ACK -> ACK é concluído), mas o banner de aplicação do protocolo (ex: 220 Welcome to Pure-FTPd) não alcança o cliente. Este artigo apresenta o diagnóstico sistemático por camadas, cobrando auditoria de serviço, logs, portas passivas, CSF, firewall de borda do provedor, TLS/SSL e rede local.


1) Backup preventivo das configurações#

Antes de realizar modificações nas configurações do Pure-FTPd ou regras do firewall CSF, faça backup das definições locais:

# Fazer backup das configurações locais do Pure-FTPd
cp /var/cpanel/conf/pureftpd/local /var/cpanel/conf/pureftpd/local.bak.$(date +%Y%m%d)

# Fazer backup das configurações do firewall CSF
cp /etc/csf/csf.conf /etc/csf/csf.conf.bak.$(date +%Y%m%d)

# OU criar um arquivo compactado tar com todos os arquivos críticos
tar czf /root/ftp-backup-$(date +%Y%m%d).tar.gz /var/cpanel/conf/pureftpd/ /etc/csf/csf.conf

2) Status do serviço e auditoria de logs#

Antes de analisar o firewall, valide se o Pure-FTPd está em execução, ouvindo nas portas padrão e respondendo localmente.

# 1. Verificar o status do daemon via systemd
systemctl status pure-ftpd

# 2. Obter a identificação de processos (PIDs) ativos do Pure-FTPd
ps aux | grep pure-ftpd
pgrep -c pure-ftpd

# 3. Validar escuta da porta de controle 21 em sockets IPv4 e IPv6
ss -lntp | grep ":21"
ss -lntp6 | grep ":21"

# 4. Verificar o status do SELinux (comum em Rocky/AlmaLinux/RHEL)
sestatus

Se o serviço estiver ativo, teste a resposta local usando o loopback de rede para descartar bloqueios de firewalls externos. Como o utilitário telnet não é instalado por padrão em distribuições modernas, utilize o nc (netcat) ou curl para inspecionar o banner de aplicação:

# Testar conexão local direta ao banner do FTP usando netcat (nc)
echo "QUIT" | nc -w 5 127.0.0.1 21

# Alternativa via curl conectando ao protocolo FTP
curl -v ftp://127.0.0.1/ --connect-timeout 5

(Se o banner 220 Welcome to Pure-FTPd aparecer localmente mas falhar externamente, o gargalo está na rede, TLS ou firewall intermediário. Se falhar localmente, a causa está nas configurações locais, recursos do daemon ou políticas restritivas do SELinux).

Inspecione os logs do FTP e do cPanel para encontrar erros de conexões e timeouts. Em distribuições baseadas em systemd (como Rocky 8+ ou Ubuntu 20.04+), o arquivo /var/log/messages pode não estar presente; nesses casos, utilize o journalctl:

# Consultar os logs do daemon FTP no systemd
journalctl -u pure-ftpd --since "1 hour ago"

# Ler as últimas linhas do arquivo de log estático (se ativo no syslog)
tail -100 /var/log/pure-ftpd.log
grep -i "error\|refused\|timeout" /var/log/pure-ftpd.log | tail -20

# Consultar logs de erros do cPanel relativos ao FTP
tail -100 /usr/local/cpanel/logs/error_log | grep -i ftp

3) Conflitos de serviços e alocação de recursos#

É essencial verificar se não existem múltiplos daemons de FTP concorrentes tentando se vincular à porta 21, ou arquivos de configurações de outros servidores (como vsftpd ou proftpd) gerando colisões de sockets:

# Buscar outros processos de servidores FTP em execução
ps aux | grep -E "vsftpd|proftpd|pure-ftpd" | grep -v grep

# Listar qualquer arquivo de configuração residual de outros daemons
ls -la /etc/vsftpd* /etc/proftpd* 2>/dev/null

Falhas no envio do banner também podem ser provocadas por falta de espaço físico em disco ou inodes esgotados no servidor, o que impede a escrita de arquivos temporários de sessão:

# Inspecionar o espaço livre nas partições do sistema
df -h

# Verificar o limite e uso de inodes do disco
df -i

# Validar espaço específico nos diretórios temporários e de spool do cPanel
df -h /var/cpanel
df -h /tmp

4) Configuração de portas passivas e auditoria do CSF#

O FTP em modo passivo exige um intervalo de portas abertas para tráfego de dados. No cPanel, configure a faixa de portas de forma persistente:

# Criar ou editar o arquivo de configuração local do cPanel
nano /var/cpanel/conf/pureftpd/local

Adicione a diretiva contendo a faixa de portas altas reservadas:

PassivePortRange: 49152 65535

Reconstrua a configuração efetiva e reinicie o Pure-FTPd através dos utilitários do cPanel:

# Forçar a montagem do arquivo de configuração baseado no template local
/scripts/setupftpserver pure-ftpd --force

# Reiniciar o serviço de FTP de forma segura
/scripts/restartsrv_pureftpd
# Verificar a faixa de portas passivas configurada no cPanel
grep -i "PassivePortRange" /var/cpanel/conf/pureftpd/local

# Simular uma conexão passiva real e auditar se a resposta "Entering Passive Mode" é retornada
curl -v --ftp-pasv ftp://127.0.0.1/ --connect-timeout 5

Alinhamento no configserver security & firewall (CSF):#

Garanta que a faixa passiva e a porta 21 estejam liberadas nas diretivas de entrada (TCP_IN) e saída (TCP_OUT) no arquivo /etc/csf/csf.conf:

TCP_IN = "...,21,49152:65535"
TCP_OUT = "...,21,49152:65535"

Aplique o reload do firewall local CSF e audite seu funcionamento (testando com o IP público da estação cliente, visto que o CSF não bloqueia ou filtra conexões locais de loopback por padrão):

# Recarregar as regras do CSF
csf -r

# Validar se o CSF está ativo e qual sua versão
csf -v

# Listar as primeiras regras de tráfego ativas
csf -l | head -20

# Consultar se há bloqueios ao IP público de testes
csf -g $(curl -s ifconfig.me)

# Verificar se o IP de testes foi bloqueado na lista de negação
grep "21" /etc/csf/csf.deny | head -5

5) Auditoria do TLS/SSL do FTP#

Se o servidor forçar o uso de FTPS (FTP sobre TLS) e houver falhas de certificados ou incompatibilidade de cifras criptográficas, a conexão travará antes do banner.

# Verificar o nível de exigência de criptografia TLS configurado
cat /etc/pure-ftpd/conf/TLS

# Auditar as permissões e o arquivo de certificado PEM do Pure-FTPd
ls -la /etc/ssl/private/pure-ftpd.pem

# Verificar a validade e datas do certificado ativo
openssl x509 -in /etc/ssl/private/pure-ftpd.pem -noout -dates

Teste a negociação TLS diretamente a partir do terminal local usando o comando (passando o comando QUIT via pipe para evitar que o cliente trave aguardando input manual após o handshake):

# Iniciar conexão segura de controle e disparar o comando STARTTLS de forma não interativa
echo "QUIT" | openssl s_client -connect 127.0.0.1:21 -starttls ftp -quiet

6) Redes e provedores externos (OVH, AWS, etc.)#

Em instâncias hospedadas em nuvem ou VPS (como OVH, AWS EC2, Azure), existe uma camada de firewall externa antes do host Linux (Security Groups, ACLs ou Firewalls de Rede de Borda).

A liberação das portas passivas (49152:65535) e de controle (21) deve ser feita tanto no CSF (firewall interno do Linux) quanto nas regras do painel do provedor de infraestrutura.

No caso específico da OVH, o Network Firewall (disponível na aba "IP" ou "Network" do painel de administração da OVH) atua como um filtro ativo de borda. Se as regras passivas não estiverem explicitamente liberadas ali para o IP do seu servidor, os pacotes de dados serão dropados silenciosamente na borda do provedor, mesmo que o CSF local esteja 100% aberto.

Verificação de interfaces de rede e conectividade externa:#

# Inspecionar as interfaces e IPs vinculados ao host
ip addr show

# Auditar a tabela de roteamento local
ip route show

# Validar se o IP público detectado corresponde ao IP do painel do provedor
curl -s ifconfig.me

# Consultar o DNS Reverso (rDNS) do IP público do servidor
dig -x $(curl -s ifconfig.me) +short

# Enviar pacotes ICMP externos para testar a latência do link
ping -c 3 $(curl -s ifconfig.me)

Testes com clientes FTP alternativos sem exposição de credenciais:#

# 1. Testar conexão usando o cliente lftp de forma segura usando variável de ambiente
LFTP_PASSWORD="${FTP_PASSWORD}" lftp -u "${FTP_USER}" ftp://$(curl -s ifconfig.me)

# 2. Testar conexão via curl utilizando arquivo temporário .netrc (seguro contra bisbilhoteiros de processos)
echo "machine $(curl -s ifconfig.me) login ${FTP_USER} password ${FTP_PASSWORD}" > ~/.netrc
chmod 600 ~/.netrc
curl -v --ftp-ssl --netrc ftp://$(curl -s ifconfig.me)/
rm -f ~/.netrc

# 3. Verificar se a porta 21 está aberta externamente usando o netcat (nc)
nc -zv $(curl -s ifconfig.me) 21

Checklist: debug FTP - banner não aparece#

Utilize este roteiro de troubleshooting para triar chamados de indisponibilidade de FTP em servidores cPanel.

1. Triagem local#

2. Mapeamento de firewall e portas passivas#

3. Validação do canal de criptografia#

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários