vsftpd: ECONNREFUSED ao conectar de ip externo

vsftpd: ECONNREFUSED ao conectar de ip externo

Tive muitos problemas quando comecei a configurar um servidor vsftpd, mas desta vez não consigo descobrir exatamente o que está errado.

Eu tenho um servidor Ubuntu 14.04 funcionando executando o vsftpd. O servidor está protegido por um firewall em uma DMZ e recebeu um endereço IP interno e global específico. A conexão do host local e também da rede interna funciona.

Até aí tudo bem, mas quando tento acessar o servidor FTP através de seu endereço IP global, seja da rede interna ou de qualquer outro lugar, o FileZilla apenas me dá isto:

Status:         Connecting to <global.ip>:21...
Status:         Connection attempt failed with "ECONNREFUSED - Connection refused by server".
Error:          Could not connect to server

Posso excluir a causa de um endereço IP errado, porque inserir um IP inexistente resulta em um erro de tempo limite e executar uma verificação whois no IP global me dá o provedor de serviços de Internet da nossa empresa.

Eu configurei as portas passivas na faixa 50.000 dentro do vsftpd.conf, o firewall também encaminhará solicitações provenientes das portas 20, 21 e 50.000-50.050. Então, novamente, adicionei algumas regras à configuração do iptables para permitir a passagem do tráfego desejado.

Para referência, aqui está minha configuração do iptables:

~$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere
tcp dpts:50000:50050
ACCEPT     tcp  --  anywhere             anywhere
tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere
tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere
tcp spt:ftp-data

E meu vsftpd.conf:

listen=YES
local_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
ftpd_banner=Welcome
chroot_local_user=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_ciphers=HIGH

rsa_cert_file=/home/awacs/vsftp.crt
rsa_private_key_file=/home/awacs/vsftp_clear.key

#pasv_address=<global.ip>
pasv_min_port=50000
pasv_max_port=50050
listen_port=21
pasv_enable=YES
#listen_address=<global.ip>

Como você pode ver, tentei os parâmetros pasv_addresse listen_addressna configuração. listen_address faz com que o servidor receba apenas solicitações do IP global, o que faz com que ele não responda de forma alguma. A configuração de pasv_address também foi insatisfatória porque as solicitações externas ainda não funcionavam e as conexões da rede interna ficaram presas no comando LIST do diretório.

Se alguém puder me dizer o que fiz de errado ou esqueci, ficarei mais do que feliz. Enfatizo novamente que o servidor está funcionando perfeitamente na rede interna mas não consigo fazer com que ele se conecte pelo IP global. Agradeço antecipadamente.

informação relacionada