vsftpd: ECONNREFUSED al conectarse desde una IP externa

vsftpd: ECONNREFUSED al conectarse desde una IP externa

I have had a lot of issues when I started setting up a vsftpd server, but this time I can't figure out what exactly is wrong.

Tengo un servidor Ubuntu 14.04 en el trabajo ejecutando vsftpd. El servidor está detrás de un firewall en una DMZ y se le ha asignado una dirección IP interna y global específica. La conexión tanto desde localhost como desde la red interna funciona.

Hasta aquí todo bien, pero cuando intento acceder al servidor FTP a través de su dirección IP global, ya sea desde la red interna o desde cualquier otro lugar, FileZilla solo me da esto:

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

Puedo excluir que la causa sea una dirección IP incorrecta, porque ingresar una IP inexistente genera un error de tiempo de espera y ejecutar una verificación whois en la IP global me proporciona el proveedor de servicios de Internet de nuestra empresa.

He configurado los puertos pasivos en el rango 50.000 dentro de vsftpd.conf, además el firewall reenviará las solicitudes que provienen de los puertos 20, 21 y 50.000-50.050. Luego agregué algunas reglas a la configuración de iptables para permitir el tráfico deseado.

Como referencia, aquí está mi configuración de 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

Y mi 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 puede ver, probé los parámetros pasv_addressy listen_addressen la configuración. listening_address da como resultado que el servidor solo acepte solicitudes de la IP global, lo que hace que no responda en absoluto. Configurar pasv_address tampoco fue satisfactorio porque las solicitudes externas aún no funcionaban y las conexiones de la red interna se atascaron en el comando LIST del directorio.

Si alguien puede decirme qué hice mal o qué pasé por alto, estaría más que feliz. Vuelvo a recalcar que el servidor está funcionando perfectamente desde la red interna pero no consigo que se conecte por la IP global. Gracias de antemano.

información relacionada