Classically, if you can connect to a FTP server but you cannot do a 'dir', your command channel (port 21 classically) is fine but you're having problems with the data channel
(port 20). That your data channel hangs unless people go passive suggests it could be a firewall/networking issue.
As an example of the kinds of issues FTP generates, you cannot pass FTP traffic through an iptables
filter unless you turn on ftp connection tracking