Trabajando con una instancia EC2 me tope con lo que parece ser un problema común para los servicios que operan en Amazon Web Services (AWS), decidí documentarlo esperando que les sea útil.
Introducción
Después de montar un servidor FTP usando pure-ftpd le hice llegar los datos de acceso al cliente, sin embargo, este me reportó que tenía problemas para listar y descargar los archivos que tenía en su directorio de trabajo, lo cual se me hizo raro puesto que antes de enviárselos probé que todo funcionara correctamente, incluso después del reporte realice múltiples pruebas pero todo continúo operando bien.
El error parecía ser de firewall puesto que le daba un Timeout al cliente lo extraño era que el problema se generaba a pesar de abrir todo el tráfico en el SecurityGroup y desactivar por completo el firewall de la instancia.
Después de revisar los logs del cliente FTP me percaté de que pure-ftpd instruía establecer la transferencia de datos utilizando la dirección IP interna de la instancia (10.x.x.x), por lo cual el cliente nunca podía llevarla a cabo. El mensaje de error era "Server sent passive reply with unroutable address. Using server address instead".
A mi no me dio problemas ya que versiones recientes de Filezilla son lo suficientemente inteligentes como para detectar el problema al establecer la conexión de transferencia de datos, y reintentar con la misma dirección a la que se conectó para hacer el "login".
Solución
Para solucionar el problema simplemente hay que especificar la dirección IP pública de la instancia a la que se tiene que conectar el cliente de FTP para las transferencias de datos. Esto se logra agregando la siguiente linea en el archivo de configuración pure-ftpd.conf:
ForcePassiveIP DIRECCION_IP_PUBLICA
En caso de ejecutar pure-ftpd usando el comando (o vía daemontools), se puede indicar la dirección utilizando el parámetro "-P" o "--forcepassiveip" junto con la dirección IP pública.