Thanks for this, I found how to have a working configuration on pfSense for my FTP server (on pfSense 2.0.1).
First, I still don't know or understand where the FTP-helper is located. Everywhere in the documentation, wiki, tutorials, the FTP-helper is mentioned under Interfaces>WAN, but I could never see it, and it doesn't appear at all in the web interface. I actually lost hours looking for this damn FTP-helper, and I don't know if it still exists in pfSense 2.0. But I guess I got it working without it anyway.
Let's say my ftp server is on 192.168.0.50 on port 21, using port 20 for ftp-data and ports 5000:5100 as the passive range.
It's Filezilla Server, and I configured it to return the public IP addresse which let's say is something like 80.2.5.42.
First what I did on pfSense was :
NAT inbound
Port forward 20:21 to 192.168.0.50, ports 20:21
Port forward 5000:5100 to 192.168.0.50, ports 5000:5100
with the corresponding firewall rules.
It worked, but not for everybody. Someone couldn't actually connect to the FTP, either in active or passive mode. It worked with the previous firewall we used, but only in active mode.
It looks like this guy was working in a place where a firewall was set up, blocking any traffic originating from port>1024 (I guess to block P2P, etc).
I dumped the packets here on both sides on pfSense (LAN & WAN) and I saw that everything originating from 192.168.0.50:21 was mapped to 80.2.5.42:21, because the TCP session originated from the FTP client on 80.2.5.42:21. But everything that came back from 192.168.0.50:20 was mapped to a random port on 80.2.5.42, and so was blocked by the remote firewall.
Thanks to this thread, I switched the NAT outbound rule generation to manual and added two rules, one to configure 192.168.0.50:20 as a static port and one to map 192.168.0.50 5000:5100 as static ports too, both rules before the default ones, and it looks to work fine now, for everyone.