[[:it|{{ :xeon.png?40|}}]]
===== Aktives und Passives FTP =====
FTP ist ein Protokoll, welches für die Datenübertragung in Rechnernetzwerken entwickelt wurde und das noch lange vor der Zeit, wo Firewalls, Computersicherheit und Datenschutz eine Rolle spielten. Damals gab es noch keine IP-Adressen Knappheit, jeder Rechner war praktisch direkt mit dem Internet verbunden. NAT Router kamen erst später und mit ihnen das Problem, dass das klassische aktive FTP plötzlich nicht mehr oder nicht mehr so ohne weiteres verwendet werden kann. Die Konfiguration von Firewalls bzgl. FTP ist bis heute eine Herausforderung aber immer intelligentere Router, Firewalls bzw. NAT Devices machen einem das Leben heute schon wieder so leicht, dass sich niemand mehr Gedanken über die Komplexität des FTP Protokolls machen muss. Solange alles funktioniert, tut es das nicht, ist man gut beraten die Eigenheiten von FTP und dessen Modis zu kennen. Dieser Artikel beschreibt das FTP Protokoll und seine Modis.
=== Basics ====
FTP ist ein Protokoll, welches auf TCP aufbaut. Was FTP so besonders macht, ist die Eigenschaft, dass es zwei Ports bzw. zwei Verbindungen aufbaut. Konkret ist das der Control-Socket auf Port 21 und der Data-Socket traditionell, klassisch auf Port 20. Über den Control-Socket laufen alle Kommandos der Session ab und der Data-Socket transportiert die Daten. Diese Eigenart macht FTP bis heute zu einem der schnellsten Datenübertragungs- Protokolle überhaupt, weil der Data-Stream nicht unterbrochen werden muss, wenn der Server oder Client sich gegenseitig Statusmeldungen oder weitere Kommandos austauschen.
=== Aktives FTP ===
Das aktive FTP war bzw ist die klassische Methode. Der signifikante Unterschied im Vergleich mit dem passiven FTP ist, dass hier der Client den Control-Socket zum Server initiiert, während der Server seinerseits dann den Data-Socket zum Client aufbaut. Das Problem dabei ist, dass heutzutage im Prinzip jeder Client hinter einem DSL Router steht, der auf NAT basiert. Man kann jetzt sowohl davon ausgehen, dass Administratoren, welche einen FTP-Server betreiben, ihr gesamtes Firewallkonzept dahingehend ausrichten, wie man wohl auch davon ausgehen kann, dass 99,99% der Internetuser, welche uU einen FTP Dienst nutzen möchten ihr Router (Firewall) Konzept **nicht** dafür ausgelegt haben. Aber beleuchten wir den Verbindungsaufbau bei aktiven FTP jetzt mal genauer.
\\
{{ :it:ftp-aktiv2.png |}}
\\
**Schritt 1:** Der Client Command-Port (1025) baut die Verbindung zum Server Command-Port (21) auf und sendet ein Port 1026 Kommando -> SYN
**Schritt 2:** Der Server Command-Port (21) bestätigt den Verbindungsaufbau zum Client Command-Port (1025) -> ACK
**Schritt 3:** Der Server Data-Port (20) initiiert die Data-Verbindung zum Client Data-Port, der zuvor ausgehandelt wurde (1026) -> SYN
**Schritt 4:** Der Client Data-Port (1026) bestätigt seinerseits den Verbindungsaufbau zum Server Data-Port (20) -> ACK
Das Hauptproblem bei diesem FTP Modus liegt gewöhnlich an der Client Seite. Da heutzutage so ziemlich jeder SOHO Internet Anschluss hinter einem NAT Device (Router) steht, welcher idR eingehende Verbindungsaufbauten nicht zulässt, lauscht der Client vergebens auf den erwarteten Data Mode Verbindungsaufbau. Dieser bleibt am NAT-Router des Clients stecken.
=== Passives FTP ===
Das passive FTP wurde aus dieser Einschränkung heraus entwickelt. Es gestattet dem Client nun **beide** Verbindungen aufzubauen:
\\
{{ :it:ftp-passive.png |}}
\\
**Schritt 1:** Der Client Command-Port (1025) baut die Verbindung zum Server Command-Port (21) auf und sendet das PASV Kommando -> SYN
**Schritt 2:** Der Server Command-Port (21) akzeptiert den Verbindungsaufbau im PASV Mode und sendet zB das Port 2000 Kommando -> ACK
**Schritt 3:** Der Client baut nun von seinem Data-Port (1026) die Data-Verbindung zum zuvor angewiesenen Server Data-Port 2000 auf -> SYN
**Schritt 4:** Der Server Data-Port (2000) bestätigt den Verbindungsaufbau an den Client Data-Port (1026) -> ACK
Dieses Konzept löst auf der Client Seite etliche Probleme, schafft aber auf der Server Seite einen ganzen Packen neue Probleme. Das Haupt Problem dabei ist, dass theoretisch an der Firewall auf der Server Seite jeder High-Port zum Server hin geöffnet werden müsste. Ein eklatantes Sicherheitsproblem bahnt sich an aber die meisten FTP Daemons erlauben dem Administrator die zur Verfügung stehenden High Ports für die Data-Verbindung auf ein paar wenige einzuschränken. Je nachdem wie stark der Server frequentiert wird, lassen sich hier zB ein Port Range über 5 oder 15 Ports einstellen. Sind fünf Ports konfiguriert, erlaubt der Server fünf __gleichzeitige__ Verbindungen. Ein weiteres Problem stellen FTP-Clients dar, welche keinen passiven Modus unterstützen aber das dürfte mittlerweile die Ausnahme sein.
**Beispiel für passiven FTP Transfer:**
Der folgende FTP Dump soll die Kommunikation zwischen Client und Server verdeutlichen. Interessant ist hier die Zeile >>//227 Entering Passive Mode (85,220,25,55,140,238)//<< Hier wird dem Client die IP-Adresse (85.220.25.55) und der Port (36078 = 140 * 256 + 238) mitgeteilt auf dem der Server die Data Verbindung erwartet.
220 "Welcome to the prontosystems.org FTP Service."
USER XXX
331 Please specify the password.
PASS XXX
230 Login successful.
SYST
215 UNIX Type: L8
FEAT
211-Features:
EPRT
EPSV
MDTM
PASV
REST STREAM
SIZE
TVFS
211 End
PWD
257 "/"
PASV
227 Entering Passive Mode (85,220,25,55,140,238)
LIST
150 Here comes the directory listing.
226 Directory send OK.
QUIT
221 Goodbye.
\\
**Verwandte Artikel:**
[[:tux:vsftpd|-> VSFTP Installation und Konfiguration]]
[[:tux:ftp_script|-> FTP Session automatisieren]]
[[:it:ftp_smtp|-> E-Mail vs FTP]]
[[:tux:blockhosts|-> Serverdienst Zugangskontrolle]]
\\
--- //pronto 2010/09/01 17:33//
{{keywords>ftp aktiv passiv}}