Huhu!
Normalerweise werden für den passiven Modus die Ports dynamisch von iptables freigegeben, dafür sorgt das Connection Tracking Modul für FTP . Dieses schaut sich die Pakete genau an, merkt, wann ein PASV Befehl abgeschickt wurde und liest hier den zu öffenden Port dann aus.
Dies ist aber nur möglich, da FTP eigentlich ein Klartext-Protokoll ist. In verschlüsselte Verbindungen kann iptables nicht reinschauen und somit auch nicht die Ports dynamisch öffnen. Die Lösung für dieses Problem ist die Ports direkt zu öffnen. Z.B.:
proftpd.conf:
Port 21
PassivePorts 49152 65534
und nun je nach Fall:
proftpd läuft auf nem Rechner direkt am Internet:
iptables -A INPUT -p TCP --dport 21 -j ACCEPT
iptables -A INPUT -p TCP --dport 49152:65534 -j ACCEPT
oder proftpd läuft hinter einem Router auf der ip $IP_FTP und das Internet liegt an der Schnittstelle $DEV_INET:
iptables -t nat -A PREROUTING -p TCP -i $DEV_INET --dport 21 -j DNAT --to $IP_FTP:21
iptables -t nat -A PREROUTING -p TCP -i $DEV_INET --dport 49152:65534 -j DNAT --to $IP_FTP:49152-65534
iptables -A FORWARD -p TCP -i $DEV_INET -d $IP_FTP --dport 21 -j ACCEPT
iptables -A FORWARD -p TCP -i $DEV_INET -d $IP_FTP --dport 49152:65534 -j ACCEPT
Bei einer aktiven Verbindung sollte das Problem nicht auftreten, wenn ausgehende Verbindungen erlaubt sind. Laut RFC (?) verbindet dann der FTP von Port 20 zum Client, wobei der Client dann den Port für die Datenverbindung bestimmt und öffnet.