Das FTP-Protokoll scheint immer wieder Probleme zu bereiten. Meist wird nicht berücksichtigt, daß Port 21 eben nicht ausreicht.
Bei FTP-Verbindungen werden immer zwei Kanäle geööfnet. Der eine Dient als Kanal für Kommando-/Kontrolldaten, der zweite für die Übertragung der tatsächlichen Daten.
Zudem muss man unterscheiden, ob die gewünschte Verbindung dem aktiven oder passiven FTP-Verbindungsaufbau entspricht.

Aktives FTP
Der Client startet eine Verbindungsanfrage, ausgehend von einem der loaklen Ports zwischen 1024-65535 zu dem Server-Port 21.
Für die Datenübertragung erfolgt nun eine Anfrage des Servers. er verwendet dazu den Port 20 und richtet sie an einen der Client-Ports im Bereich 1024-65535.

(Bei Paketfiltern, welche Stateful Paket Inspection (SIP) beherrschen, ist es nicht notwendig Ports auf IP-Adressen im LAN zu forwarden. SIP erkennt ftp-Verbindungen und leitet für die bestehende Verbindung die entsprechenden Ports weiter.)

Passives FTP
Der Client startet eine Verbindungsanfrage, ausgehend von einem der loaklen Ports zwischen 1024-65535 zu dem Server-Port 21.
Der Aufbau des Datenkanals erfolgt von einem der loaklen Ports zwischen 1024-65535 zu einem der Serverports zwischen 1024-65535.
Der Server baut keine (aktive) Verbindung zum Client auf.


Nochmal in Kurzform:
aktives FTP:
1.)Client-Ports 1024 - 65535 (TCP) intern - > Server-Port 21 (TCP)
Nach erfolgreichem Verbindungsaufbau teilt der Client dem Server mit auf welchem (unpriviligiertem) Port x er einen Verbindungsaufbau für die Datenübertragung erwartet. Daraufhin initiiert der Server, ausgehend von Port 20 eine Verbindung zu Port x
2.)Client-Ports 1024 - 65535 (TCP) intern <= Server-Port 20 (TCP)

passives FTP:
Client-Ports 1024 - 65535 (TCP) intern - > Server-Port 21 (TCP)
Nach erfolgreichem Verbindungsaufbau teilt der Server dem Client mit, welcher (unpriviligierte) Port x für die Datenübertragung bereitsteht.
Client-Ports 1024 - 65535 (TCP) intern - > Server-Ports 1024 - 65535 (TCP)