FileZilla FTP Server mit TLS/SSL absichern Drucken
Geschrieben von: Stefan Huegele   
Samstag, 02. Februar 2008 um 13:03

In Zeiten von verstärkter (staatlicher) Überwachung des Datenverkehrs im Internet und zahlreichen Hackerangriffen sollte man darauf achten, WIE man Daten überträgt. Klassischer FTP Datentransfer ist diesbezüglich sehr kritisch zu betrachten, da hier die komplette Übertragung (inkl. Benutzername und Passwort!) unverschlüsselt statt findet.

Aus diesem Grund gibt es analog zur Absicherung durch HTTPs beim Browsen auch FTP-Erweiterungen, die FTP über SSL und somit eine Verschlüsselung des FTP-Traffics ermöglichen.

Hierfür gibt es verschiedene Implementierungen:

  • FTPS (FTP über implizites TLS/SSL)

  • FTPES (FTP über explizites TLS/SSL)

    • mit dem Kommando "AUTH SSL"

    • mit den Kommandos "AUTH TLS" und "PROT P"

HINWEIS: Lediglich die letzte Variante (FTPES mit "AUTH TLS" und "PROT P") wird von der IETF empfohlen! Die beiden anderen Varianten werden als "deprecated" eingestuft und sollten in neuen Implementierungen nicht mehr verwendet werden. Details hierzu: www.ford-hutchinson.com/~fh-1-pfh/ftps-ext.html#bad

Im folgenden soll am Beispiel des frei verfügbaren FileZilla FTP Servers gezeigt werden, wie die Einrichtung abläuft und was es zu beachten gilt.


Installation und Konfiguration

Server: Windows 2003 Server x32 Standard mit FileZilla Server v0.9.25 beta

Client: Windows Vista x32 mit FileZilla Client v3.0.6

FileZilla Server herunterladen und auf dem Server installieren. Dann FileZilla Admin-Konsole starten.

Unter EDIT - SETTINGS - SSL/TLS SETTINGS: "Enable" SSL/TLS support" aktivieren. Wenn noch kein SSL-Zertifikat vorhanden ist, kann man sich über "Generate new certificate..." ein neues self-signed Zertifikat ausstellen lassen:

  • Hier die gewünschten Angaben machen.

  • Als Speicherort des Zertifikats empfiehlt sich der FileZilla Programmordner ("C:\Program Files\FileZilla Server\certificate.crt").

Wurde das Zertifikat erfolgreich erstellt, erhält man die Bestätigung und es werden automatisch die korrekten Pfade für die Zertifikatsdatei eingetragen.

Wenn das Zertifikat später an einen anderen Ort kopiert wird, müssen die Pfade unter SETTINGS - SSL/TLS SETTINGS manuell geändert werden!

So. Damit ist die grundlegende Server-Konfiguration erstmal abgeschlossen. Mit einem entsprechenden FTP-Client (z.B. FileZilla) kann man nun innerhalb des eigenen Netzwerks SSL-verschlüsselte FTP-Transfers durchführen. Keine Chance also mehr, Daten während der Übertragung auszuspionieren.

Das wäre soweit ja recht einfach - wäre da nicht das altbekannte Thema "NAT". Befindet sich der FTP-Server nämlich hinter einem NAT-Device (klassischerweise ein Home-DSL-Router) und soll auch außerhalb des Heimnetzes erreichbar sein, sind noch einige Zusatzeinstellungen vorzunehmen, dazu aber später mehr.

In dieser Konfiguration sind aber nach wie vor verschlüsseltes und unverschlüsseltes FTP möglich. Außerdem werden sowohl implizite SSL-Verbindungen (Port 990) wie auch explizite (Port 21) akzeptiert.

Für die maximale Sicherheit müssen neben den bereits erwähnten Optionen auch noch folgende Einstellungen vorgenommen werden:

  • "Force explicit TLS/SSL": Ist diese Option aktiviert, können ausschließlich SSL-verschlüsselte FTP-Verbindungen aufgebaut werden! Unverschlüsselte Sessions sind damit generell nicht mehr erlaubt.

Hinweis: Wer diese Einstellung nicht global für den ganzen Server vornehmen möchte, kann dies auch Benutzer-/Gruppen-spezifisch festlegen, in dem in den User/Group Attributen die Option "Force SSL login for user" aktiviert wird!

  • "Force PROT P to encrypt data channel in SSL/TLS mode": Diese Option sollte ebenfalls aktiviert werden. Damit wird sichergestellt, dass nur die derzeit von der IETF empfohlenen FTP-Befehle akzeptiert werden ("AUTH TLS" bzw. "PROT P") und nicht die als "deprecated" gekennzeichneten.

  • Die Portnummer für implizite Verbindungen bei "Listen to SSL/TLS-only connections..." entfernen: Damit lauscht der FTP-Server nur noch auf dem Standard-Port 21 - implizite Verbindungen über Port 990 (ebenfalls offiziell als "deprecated" eingestuft) sind damit also auch Geschichte.

Mit diesen Einstellungen kann der FTP-Server also als sicher und "best practice" entsprechend der gültigen Standards angesehen werden. Für die meisten aktuellen FTP-Clients stellen diese zusätzlichen Einschränkung kein Problem dar. Im Idealfall sieht das Ganze also so aus:


Problematik NAT

Wie bereits angedeutet, bringt ein FTP-Server, der vom Client aus nicht direkt erreicht werden kann (z.B. weil der Server hinter einem NAT-Device steht) einige zusätzliche "Herausforderungen" mit sich. Erschwerend kommt hinzu, dass in diesem Fall meist auch noch eine (oder mehrere) Firewalls dazwischenliegen. Außerdem kommt noch die Problematik "Active/Passive" FTP Mode hinzu, was durch die Verschlüsselung nochmals verschärft wird, da es somit auch einem Application Layer Gateway nicht mehr möglich ist, in die FTP-Kommunikation "reinzuschauen".

Klingt kompliziert - ist es auch. Deswegen werde ich mich jetzt auch nicht weiter im Detail über die technischen Hintergründe auslassen. Aber vielleicht soviel: Genau diese Kombination trifft zu, wenn man einen privaten FTP-Server, der über einen Standard-DSL-Router ans Internet angeschlossen ist, nach außen hin verfügbar machen möchte.

Hierfür muss zunächst die Konfiguration des FTP-Servers angepasst werden. Die notwendigen Einstellungen werden unter EDIT SETTINGS - PASSIVE MODE vorgenommen:

  • "Retrieve external IP address from: ": Muss aktiviert werden, wenn der FTP-Server nicht mit einer Netzwerkkarte direkt im Internet steht (sollte normalerweise beim Heimanwender nicht der Fall sein) und die Internet-IP dynamisch ist. Es wird damit ein kleines PHP-Skript aufgerufen, über das die aktuelle Internet-IP abgefragt wird. Es kann hierbei die voreingestellte URL verwendet werden (derzeit: http://ip.filezilla-project.org/ip.php). (Hinweis: Bekommt man von seinem Internetprovider eine feste IP zugewiesen, sollte die Option "Use the following IP:" gewählt werden und die Internet-IP dort eingetragen werden).

Wird "Retrieve external IP address from" benötigt, so muss natürlich auch sichergestellt sein, dass der FTP-Server per HTTP ins Internet zugreifen darf!

  • "Use custom port range" sollte unbedingt aktiviert werden um die möglichen Ports, über die später die eigentliche Datentransfers stattfinden, einzuschränken. Andernfalls müssten an der Firewall alle Ports (1-65535) erlaubt werden! Sinnvollerweise sollte hier ein Bereich von ca. 50-100 Ports im oberen Nummernbereich gewählt werden (z.B.: 50000 - 50050). Vorsicht: wird der Bereich zu klein gewählt, kann es z.B. zu Fehlern beim Übertragen von vielen, kleinen Dateien kommen!

Außerdem muss auf dem DSL-Router Port-Forwarding für folgende Ports eingerichtet werden:

  • tcp/21 für den Verbindungsaufbau
  • tcp/50000 - 50050 für den eigentlichen Datentransfer (oder die entsprechende Port Range, die vorher für den Passive Mode eingestellt wurde)
  • optional: tcp/990 für implizite FTP-over-SSL Verbindungen (natürlich nur, wenn diese nicht wie oben empfohlen von Haus aus deaktiviert sind!)

Die Ports müssen jeweils an die interne LAN-IP des FTP-Servers weitergeleitet werden.

So. Und damit sollte dem FTP-over-SSL-Vergnügen nun wirklich nichts mehr im Weg stehen. Außer eventuell falsch konfigurierte Personal Firewalls, Einschränkungen durch den Internetprovider o.ä. Troubleshooting-Informationen und Konfigurationshinweise findet man im FileZilla-Wiki oder einfach mit Google...


Konfiguration FTP-Client

Im FTP-Client (hier: ebenfalls FileZilla) muss lediglich bei der Einrichtung beachtet werden, dass als "Servertype" "FTPES - FTP over explicit TLS/SSL" ausgewählt ist:

Ansonsten kann die Verbindung wie jede andere FTP-Session behandelt werden.

Hinweis: Falls auch implizite Verbindungen erlaubt sind, kann natürlich auch dies ausgewählt werden.

Beim ersten Verbindungsaufbau wird der FTP-Client wegen des unbekannten SSL-Zertifikats nachfragen. Dieses bitte akzeptieren und am besten "Always trust..." anhaken:

 

Beispiel-Log eines erfolgreichen Verbindungsaufbaus (Client-Seite): Hier sieht man auch schön, dass korrekt mit "AUTH TLS" und "PROT P" gearbeitet wird...

Status: Resolving IP-Address for server.dyndns.org
Status: Connecting to 88.141.187.52:21...
Status: Connection established, waiting for welcome message...
Response: 220-FileZilla Server version 0.9.24 beta
Response: 220-written by Tim Kosse (
Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. )
Response: 220 Please visit
http://sourceforge.net/projects/filezilla/
Command: AUTH TLS
Response: 234 Using authentication type TLS
Status: Initializing TLS...
Command: USER user
Status: Verifying certificate...
Status: TLS/SSL connection established.

Response: 331 Password required for user
Command: PASS ********
Response: 230 Logged on
Command: SYST
Response: 215 UNIX emulated by FileZilla
Command: FEAT
Response: 211-Features:
Response: MDTM
Response: REST STREAM
Response: SIZE
Response: MLST type*;size*;modify*;
Response: MLSD
Response: AUTH SSL
Response: AUTH TLS
Response: UTF8
Response: CLNT
Response: MFMT
Response: 211 End
Command: PBSZ 0
Response: 200 PBSZ=0
Command: PROT P
Response: 200 Protection level set to P
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is current directory.
Command: TYPE I
Response: 200 Type set to I
Command: PASV
Response: 227 Entering Passive Mode (88,141,187,52,195,97)
Command: LIST
Response: 150 Connection accepted
Response: 226 Transfer OK

Status: Directory listing successful

Hinweis: Wer keinen vollwertigen FTP-Client installieren will, kann auch das Firefox-Plugin "FireFTP" verwenden.


Weitere Informationen:

Aktualisiert ( Samstag, 08. März 2008 um 16:31 )