dflow,
this is just a guess but it may have something to do with your connection tracking commands (if you use them).
The following suggestions are ripped directly from
http://www.cs.princeton.edu/~jns/sec...conntrack.html
so thank (or blame) James C. Stephens if it works not me :-)
Ok so basically for ftp you need to match the RELATED state for the process to work so he suggests the following
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
note that a similar entry could be made for the FORWARD chain if it applies to your setup.
iptables -A -i eth0 -o eth1 -p tcp ! --syn --sport 1024: --dport 1024: -j ACCEPT
this is another rule you may need (substitute the in/out devices as appropriate)
hope that helps
Rich