The problem you're facing is that FTP uses one set of ports to communicate user requests, and another set of ports to do the file transfer on.
It works like this:
user -> ftp: "I'd like file XYZ"
ftp -> user: "No problem, connect to port 10328 to get it."
user -> ftp: "Gotcha. Be right back."
user -> firewall "I'd like to open port 10328 please."
firewall -> user "Sorry, that port isn't open for incoming traffic."
user -> ftp: "Something's wrong. I'd like file XYZ please."
ftp -> user: "Sure. Let's try port 30226 this time."
user -> ftp: "Uh, okay..."
user -> firewall "Can I connect to port 30226?"
firewall -> user "Look, I told you, that's not a port open for service to incoming traffic."
...this is what passivemode in FTP solves. It reverses the roles so FTP originates, and the firewall lets it through.
Other than that, you'll need an FTP module for your firewall which will selectively open ports on an as-needed basis.