Schlagwort-Archive: Server

FileZilla Server mit Netzwerkzugriff und TLS/SSL konfigurieren

Kürzlich stieß ich auf ein Problem, als ich versuchte, einen FTPES-Server, basierend auf FileZilla, in einem Netzwerk einzurichten, wobei die Daten, die verteilt werden sollten, jedoch nicht von dem lokalen System, sondern von einem Netzwerkpfad angezapft werden sollten. Dabei stieß ich auf einige Komplikationen, weshalb ich dieses Tutorial einrichten möchte, damit spätere Generationen diese Probleme möglichst umgehen können.

1. Grundvoraussetzungen

Verwendet wird FileZilla Server 0.9.42 unter Windows 7 Home Premium bzw. Professional 64-bit.
Die Topologie sieht wie folgt aus:
Mein Großrechner ist nicht dauerhaft aktiv, stellt allerdings die Netzwerkquelle dar und bietet sämmtliche Ordner, die verteilt werden sollen, über das Netzwerk an. Logisch, dass die Ordner nur zugänglich sind, wenn der Rechner gerade läuft. Warum ich dann nicht diesen Rechner als FTP-Server nutze hat damit zutun, dass zusätzlich auch Medien von anderen Netzwerk-Geräten verfügbar gemacht werden sollen, der Server außerdem in der Lage sein soll, jederzeit Daten aufzunehmen und, sofern im Netzwerk/lokal vorhanden, abzugeben. Darum fungiert ein relativ guter Laptop als Server-System. Er beinhaltet den Filezilla Server.
Mein Großrechner heißt im Netzwerk „TONI“, der Ordner, in dem sich alle Unterordner befinden, „network“. Diese Ordnerstruktur ist von dem Laptop natürlich ansteuerbar.
Der Kontakt nach außen wird über eine Fritzbox blockiert, weshalb, wenn der Server öffentlich zugänglich gemacht werden soll, der Port 21 (standard), der Port 990 (für implizites TLS) und eine Portreihe für die passive Datenübertragung freigeschaltet werden soll. Wie dies im genauen funktioniert, entnehmen sie der Bedienungsanleitung ihres Routers oder Google.

2. Installation

Zu der Installation möchte ich keine vielen Worte verlieren. Ich gehe davon aus, dass sich alle Leser dieses Artikels zumindest einigermaßen mit Windows und den üblichen Vorgängen auskennen. Es gibt jedoch eine Sache, die unbedingt beachtet werden muss. Bei der Installation des FilleZilla Server Dienstes wird die Installationsrutine fragen, ob der Dienst (Service) mit Windows installiert werden soll und dabei immer gestartet werden soll, nur, wenn der aktuelle Benutzer angemeldet wird oder, ob der Dienst gar nicht installiert werden soll. Obwohl der letzte Punkte mit „not recommended“, heißt „nicht empfohlen“ bezeichnet ist, wählen wir es trotzdem aus und setzen die Installation wie gewohnt fort. Warum das nötig ist? Dazu kommen wir später.

3. Die Konfiguration für TLS

Wer sich dafür nicht interessiert, mag es überspringen. Da es aber gerade für mich wichtig war, da ich reine unverschlüsselte Verbindungen auf meinem Server nicht zulasse, möchte ich es trotzdem hier mit erwähnen.
Grob umrissen benötigt man ein Zertifikat, um die Verschlüsselung effektiv zu machen. Eine relativ einfache Möglichkeit zur Zertifikaterstellung bietet FileZilla Server mit dem „Certificate Generator“, welchen man in den Server-Einstellungen (FileZilla Interface auf 127.0.0.1 (localhost) und leerem Passwort) unter der Registerkarte SSL/TLS Settings finden kann. Ich für meinen Fall habe eine Verschlüsselungsstärke von 4096 Bit gewählt, was derzeit die stärkste, aber auch rechnungstechnisch aufwändigste Verschlüsselung darstellt.
Achtung: Rechnungstechnisch aufwändigste bedeutet, dass bei der Datenübertragung vom Server ständig Daten mit diesem Schlüssel verschlüsselt/entschlüsselt werden müssen. Je stärker der Prozessor, desto schneller kann er dies natürlich durchführen. Je schneller die Daten reingehen/rausgehen, desto schneller muss er aber auch rechnen. Am besten ist es, die Verschlüsselungsstärken zu testen, denn für jede Leitung sind verschiedene Stärken sinnvoll. Ich habe einen durchschnittlichen Upload von 500 kb/s und mein Server-System schafft die Verschlüsselung ohne größeren Aufwand. Beim Download sieht das eventuell wieder etwas anders aus. Dazu muss man sagen, dass mein Laptop einen der neuesten Intel i3 Prozessoren beinhaltet. Wenn der verwendete Prozessor also schwächer sein sollte, gilt es hier aufzupassen.
Nun erstellt man mit den vorgegebenen Werten (Maske möglichst detailgetreu ausfüllen) ein Zertifikat was, je nach Verschlüsselungsstärke, unterschiedlich lange dauern kann (keine Angst, die Erstellung hat nichts mit der späteren Rechendauer zutun, um Daten zu entschlüsseln/verschlüsseln).
Nun noch der Haken bei „Enable FTP over SSL/TLS support (FTPS)“ gesetzt und man kann bei Private Key und Certificate File jeweils die generierte .crt-Datei eintragen. Ein Passwort wird ebenfalls empfohlen. Um explizites FTPES nun über den Port 21 zuzulassen, hakt man das entsprechende Feld, „Allow explicit FTP over TLS“ an. Ist man nun so paranoid wie ich, hakt man auch das Feld „Disallow plain unencrypted FTP“ an, was bedeutet, dass kein unverschlüsseltes FTP mehr möglich ist. Zum Abschluss noch der Sicherheit halber das Feld „Force PROT P to encrypt file transfers in SSL/TLS mode“ anhaken und fertig.

4. Die Passive FTP Konfiguration

Hier trat für mich das erste Problem auf. Bei mir hat der FileZilla Server nämlich die Angewohnheit, trotz der IP-Abfrage, wie sie empfohlen wird,nur meine Netzwerk interne IP-Addresse zu erhalten, was mir doch einige Schwierigkeiten gemacht hat. Selbst ein von mir selbst geschriebenen, einwandfreier Dienst zur Erkennung der externen IP hat nichts genützt. Aber alles der Reihe nach.
Mein Router ist von außen über eine DNS-Addresse erreichbar. Diese DNS verlinkt auf meine IP-Addresse und das funktioniert einwandfrei. Normalerweise wird das immer genutzt, wenn man eine dynamische IP-Addresse besitzt, d.h. das sie, im Normalfall ein mal täglich, geändert wird, dies kann sich je nach Anbieter unterscheiden. Nun habe ich gerade dieses Glück und das ist genau das Problem, dass ich bisher immernoch habe, aber ich werde mich melden, sobald ich dafür eine Lösung gefunden habe. Alternativ kann man auch eine fehlerhafte Einstellung in FileZilla belassen, jedenfalls wenn man den FileZilla Client zur Verbindung nutzt, der merkt nämlich, wenn eine falsche IP-Addresse bemerkt ist und benutzt intuitiv die richtige IP-Addresse.
So. Die nötigen Einstellungen befinden sich unter dem Punkt „Passive mode Settings“. Prinzipiell nicht viel, aber immerhin etwas. Wenn man, so wie ich, hinter einem Router sitzt, dessen IP sich ständig ändernkann, wird der Default mode, der standardmäßig angehakt ist, nicht viel nützen. Da man aber auch keine konstante IP-Addresse hat, die man bei „Use the following IP:“ eintragen könnte, bleibt nur noch die letzte Option, „Retrieve external IP address from:“. Standardmäßig eingetagen ist dort die Addresse zu einem Script von Filezilla, das merkwürdigerweise auch 127.0.0.1 zurückgibt, was absolut nicht meiner öffentlichen IP entspricht… Selbst mit meiner Alternative blieb hier nichts anderes übrig, als doch immer meine momentane IP bei „Use the following IP:“ einzutragen.
In meinem Fall musste ich eine bestimmte Spanne an Ports im Router freigeben. Um den Server darauf zu konfigurieren, wird nun der Punkt „Use custom port range:“ angehakt und anschließend der Startport und der Endport eingetragen. Alle Ports dazwischen, inklusive der Start- und Endports werden nun verwendet, um im Passivmodus Verbindung mit dem Server aufzunehmen.

5. Die Strukturierung

Ich habe auf meinem Server eine gruppenbasierte Ordnung erstellt. Dazu benötigt man ein Wurzelverzeichnis, gängigsterweise C:\FTP oder ähnliches, hauptsache es ist von den Berechtigungen her zugänglich. In diesem Verzeichnis befindet sich ein Verzeichnis für jeden Benutzer mit dem identischen Namen wie der Benutzer. Viel mehr benötigt es als Grundlage gar nicht.

5.1 Die Netzwerk-Anbindung

Was ebenfalls zur Strukturierung gehört ist der, gerade in diesem Tutorial wichtige Punkt der Netzwerkanbindung. Die meisten Windows-Benutzer, Anfangs auch ich, sind davon ausgegangen, dass eine Einbindung des Netzwerk-Pfads als Netzlaufwerk besonders optimal wäre, da man dann nur einen Laufwerksbuchstaben hätte, der alles regeln würde. Doof nur, dass dieser Laufwerksbuchstabe keine physikalische Verlinkung ist und für FileZilla nicht erkannt werden kann. Diese Feststellung hat mich, mit fremder Hilfe, knapp eine Stunde gekostet. Wie auch immer, es gibt ja eine Alternative, nämlich die direkte Ansteuerung über das Netzwerk. Netzwerk-Systeme werden durch einen einführenden doppelten Backslash (\\) eingeleitet, anschließend folgt der Netzwerk-Systemname (in meinem Fall „TONI“). Anschließend folgt, wie bei einem stink normalen Pfad das Anhängsel, in meinem Fall \network. Der gesamte Pfad zu dem Ordner test auf dem lokalen Netzwerk auf dem Rechner „TONI“, welcher nicht über Netzlaufwerke angesteuert wird, lautet also: \\TONI\network\test
Nicht wundern, warum ich euch das erzähle, dass wird gleich nötig werden.
Hier folgt nun auch die Begründung, warum wir bei der Installation den Dienst gar nicht erst installiert haben, denn das hat etwas mit der Zugänglichkeit des Netzwerks zutun. Wie ich nach einer ganzen Weile Testerei und Rumspielerei feststellte, wird nämlich der Dienst von FileZilla vom System gestartet, der Netzwerkzugriff aber ist nur über den momentan angemeldeten Benutzer realisierbar. Das führt dazu, dass FileZilla keinen Zugriff auf das Netzwerk bekommt, wenn man FileZilla als Dienst installiert. Installiert man es stattdessen nicht als Dienst, sondern als Autostart-Anwendung, wird sie vom momentanen Benutzer gestartet und hat somit Zugriff auf das Netzwerk. Das war im Prinzip der wichtigste Punkt.

5.2 Die Gruppenstrukturierung

Nun, um das Fass voll zu machen, noch der Aufbau der Gruppenstruktur, welche die Netzwerk-Verlinkung enthält. Wir erstellen eine Gruppe „Beispiel“. Dieser Gruppe verpassen wir das Wurzelverzeichnis C:\FTP als Basisordner (Set as home dir). Anschließend fügen wir einen Ordner hinzu, nämlich einen Netzwerkordner. In meinem Fall wieder der uns bekannte \\TONI\network\test. Einfach „Add“ auswählen, in den Ordner Netzwerk browsen, warten, bis der Netzwerk-Dienst alle Geräte inkl. Ordner aufgelistet hat, das Gerät TONI auswählen, den Ordner network betreten und den Ordner test auswählen. Anschließend noch einen Rechtsklick auf den nun erstellten Ordner und „Edit Aliases“ auswählen. Nun wird auch der Sinn der Ordnerstruktur erkennbar: Wie uns der kleine englische Text verrät, kann man nämlich :u als Platzhalter für den Benutzernamen verwenden. Nun geben wir also als Alias C:\FTP\:u\test an und bestätigen mit OK. Den ganzen Dialog schließen wir nun mit OK und schreiten fort zum nächsten, abschließenden Schritt.

5.3 Die Benutzerkonfiguration

Wir benötigen nun noch einen Benutzer, nennen wir ihn ebenfalls „Beispiel“. Er ist Mitglied der Gruppe „Beispiel“. Nun verpassen wir ihm ein Wurzelverzeichnis, nämlich C:\FTP\Beispiel (der Ordner muss vorher erstellt werden). Nun einfach per FTP verbinden (Achtung, wenn ihr, wie ich, das TLS konfiguriert und die unverschlüsselte Verbindung ausgeschaltet habt, könnt ihr dafür keinen handelsüblichen Browser verwenden. Ich würde euch empfehlen, den FileZilla client zu verwenden). Nachdem ihr das Zertifikat akzeptiert habt werdet ihr sehen, dass sich in der Ordnerliste nicht nur der Punkt „..“ befindet, sondern auch der Ordner „test“. Betretet ihr ihn, befindet ihr euch, aus Sicht des Clients gesehen, auf „/test“, aus der Sicht des FTP-Servers jedoch auf „\\TONI\network\test“. Herzlichen Glückwunsch, euer System läuft.

6. Anhang: Serverkonfiguration von einem anderen Netzwerk-System aus

Ich habe den Wunsch, den Server an einen Platz zu bringen, wo ich keinen ständigen Zugriff auf ihn habe bzw. wo er in Ruhe liegen kann, ohne das er jemanden stört. Darum möchte ich mir so viel wie möglich Remote Access ermöglichen. Dazu gehört auch die Steuerung und Konfiguration des FTP-Servers vom Netzwerk aus. Dazu müssen einige Einstellungen vom Server-PC aus getroffen werden:
Man öffnet dazu die Einstellungen und wählt den Punkt „Admin Interface“. Hier gibt man in den Eingabefeldern „*“ ein, wodurch der Server für das Netzwerk zugänglich gemacht wird. Abschließend muss noch ein Passwort erteilt werden. Dazu wählt man „Change Password“ an und trägt das selbe neue Passwort in die zwei dafür gedachten Felder ein. Nun noch OK gedrückt und der Server sollte auch vom Netzwerk aus ansteuerbar sein. Das einzige, was nur von 127.0.0.1 aus konfiguriert werden kann, sind die Admin Interface Einstellungen, d.h. man kann von außen das Passwort nicht ändern, sicherheitshalber.

So, dass wars. Hoffentlich konntet ihr damit etwas anfangen. Ich war einfach nur der Meinung, 5 Stunden Arbeit sollten so viele Menschen wie möglich erspart werden ;).