IIS Windows FTP Server einrichten

Hier soll gezeigt werden, wie man den FTP-Server von Windows IIS einrichtet. Möchte man mit den OnBoard-Mitteln von Windows, den Internetinformationsdiensten (IIS), einen FTP-Server einrichten, kann das ganz schnell zum “pain in the ass” werden für jeden der nicht  häufig damit zu tun hat. Es ist leider nicht so intuitiv einzurichten, wie man meint, und bis zum gewünschten Erfolg warten viele Stolpersteine. So kann es Stunden bis mehrere Tage dauern, ehe man alle Probleme als Gelegenheits-Adminstrator gelöst hast.

FTP Dienste aktivieren

Zu aller erst muss unter Windows-Features mindestens  die IIS-Verwaltungskonsole und der FTP-Dienstaktiviert werden.
Dazu ruft man die Windows-Feature über Systemsteuerung -> Programme und Features -> Windows Features aktivieren oder deaktivieren auf.
Im Baum geht man dann zu Internetinformationsdienste und aktiviert unter FTP-Server den FTP-Dienst und unter Webverwaltungstools die IIS-Verwaltungsdienst und IIS-Verwaltungskonsole.

windows-features

Dann öffnet man den Internetinformationsdienste(IIS)-Manager zum Beispiel über Start -> Windows-Verwaltungsprogramme.

Neue FTP Seite anlegen

Im IIS-Manager legt man dann durch Rechtsklick im linken Fenster auf Sites eine neue FTP-Seite mit FTP-Site hinzufügen… an.

FTP-Site hinzufügen im IIS-Manager

Nun muss man einen FTP-Sitename vergeben, welcher individuell sein kann, und den physischen Pfad festlegen, unter welchem die Dokumente und Dateien gespeichert werden sollen. Auf diesen Pfad erfolgt dann der FTP-Zugriff von außen. Im Beispielbild wurde das Standardverzeichnis für den Webserver ausgewählt. Es sind aber auch andere physische Ordner möglich. Man kann später auch noch virtuelle Verzeichnisse festlegen, die auf Pfade außerhalb des angegebenen Physischen Pfads verweisen. Darauf soll hier aber nicht weiter eingegangen werden.
Anschließend klickt man auf Weiter.

Siteinformationen FTP-Sitename und physischen Pfad eingeben

Bindungs- und SSL-Einstellungen

Bei den Bindungs- und SSL-Einstellungen kann man Einstellungen zur Verschlüsselung vornehmen, sowie konkrete Hostnamen oder IP-Adressen dem FTP-Dienst zuweisen.

Die Zuweisung einer IP-Adresse bleibt in unserem Fall leer. Verwaltet man mehrere FTP-Server-Sites so muss jede an eine eigene IP-Adresse gebunden werden. Je nach Notwendigkeit kann man noch den Port ändern, falls der FTP-Standardport schon belegt ist und anderweitig verwendet wird. Standardmäßig ist dieser auf Port 21 eingestellt. Virtuelle Hostnamen kann man verwenden, wenn man im internen Netzwerk mit Domainnamen arbeitet.
Virtuelle Hostnamen interessiert uns an dieser Stelle auch nicht. Das ist in größeren Netzwerken interessant, wo man zum Beispiel mit Domainnamen (Domaincontrollern) arbeitet oder wenn man mehrere FTP-Server auf eine IP-Adresse binden ansprechen möchte.
Man sollte auf jeden Fall SSL zulassen oder besser SSL erforderlich aktivieren, damit die FTP-Verbindung zukünftig verschlüsselt aufgebaut wird. Man muss dazu noch ein SSL-Zertifikat auswählen. In unserem Fall wählen wir ein vorhandenes Zertifikat aus. Der IIS-Manager bietet auch die Möglichkeit sich ein eigenes Zertifikat zu erstellen (selbst signiert). Dieses wird natürlich nicht von allen Clients akzeptiert und es gibt entsprechende Warnmeldungen. Um dies zu vermeiden, braucht man ein öffentliches Zertifikat von einer entsprechenden Zertifizierungsstelle (CA).

FTP Bindungs- und SSL-Einstellungen

Authentifizierungs- und Autorisierungsinformationen

Im nächsten Schritt kommen die Authentifizierungs- und Autorisierungsinformationen. Hier belassen wir erstmal die Standardeinstellungen. Dies wird nachträglich noch mal angepasst.
Zur Information: Lässt man Anonym aktiviert, kann man sich mit dem Benutzernamen Anonymous und der E-Mail-Adresse als Passwort anmelden.
Bei Standard wird die Anmeldung per Benutzername und Passwort auf den FTP-Server erforderlich. Es können dann dediziert Benutzergruppen (auch eines ActiveDirectory) oder Benutzerkonten festgelegt werden, die Zugriff erhalten dürfen.

FTP Authentifizierungs- und Autorisierungsinformationen

FTP User einrichten für Zugriff von außen

Für den Zugriff von außen muss es also einen separaten User/Benutzer geben, der dem Windows-System bekannt ist und welcher entsprechende Berechtigungen hat.
Es muss unter Windows ein separater User eingerichtet werden. Das machen wir über die Konsole mit

net user ftpuser2 * /add

Konsole Net-User-Add

Man kann somit auch mehrere verschiedene Accounts anlegen, um zum Beispiel jeder berechtigten Person einen eigenen Account zuzuweisen.
Jetzt müssen dem neuen FTP-Account noch entsprechende Berechtigungen auf den Ordner der FTP-Site zugewiesen werden. Dies geht wieder über die Konsole mit

ICACLS c:\inetpub\wwwroot /grant ftpuser:(OI)(CI)(M)   

Oder man macht Rechtsklick im IIS-Manager auf die FTP-Site und wählt Berechtigungen bearbeiten -> Sicherheit aus. Alternativ geht auch Windows Explorer Rechtklick auf den FTP-Ordern -> Eigenschaften –> Sicherheit.

FTP Benutzerberechtigungen auf den FTP-Ordner einstellen

Jetzt wählen wir im IIS-Manger wieder unsere FTP-Site an und gehen unter FTP-Authentifizierung und deaktivieren dort die anonyme Authentifizierung.

FTP-Authentifizierung Anonyme Authentifizierung deaktivieren

Danach geht man zur FTP-Authorisierung -> Zulassungsregel hinzufügen und fügt den eingerichteten FTP-User hinzu mit den Berechtigungen Lesen und Schreiben.

Authorisierungszulassungsregel hinzufügen

FTP-Authorisierung FTPUser zulassen Lesen und Schreiben

Jetzt würde man meinen, dass der Zugriff von einem FTP-Client theoretisch aus dem eigenen Netzwerk schon funktionieren sollte. Das wird aber in den meisten Fällen nicht funktionieren, weil man die Windows-Firewall auf dem Rechner auf dem der FTP-Server läuft entweder zu Testzwecken deaktivieren muss oder entsprechend auf den festgelegten Port konfigurieren muss.
Dazu ruft man die Windows-Firewall über das Startmenü auf oder nutzt Systemsteuerung->System und Sicherheit->Windows-Firewall. Geht auf Erweiterte Einstellungen -> Eingehende Regeln -> Neue Regel … -> Port und gibt dort die benötigten Ports frei. Wie wir gleich sehen werden, muss hier zum Schluss auch ein dynamischer Portbereich freigegeben werden.

Windows-Firewall Ports freigaben

Spätestens jetzt sollte der Zugriff mit unserem angelegten User-Account aus dem lokalen Netzwerk von einem FTP-Client funktionieren.
Was nicht funktionieren wird, ist der Zugriff von außerhalb des lokalen Netzwerks z.B. aus dem Internet. Hierzu muss man die entsprechenden Portfreigaben auch auf der Hardware-Firewall oder dem Router konfigurieren. Wie diese Einstellungen vorzunehmen sind, hängt vom jeweiligen Gerät ab. Bei der FRITZ!Box geht das unter Internet -> Freigaben -> Portfreigaben.

Portfreigaben Passives FTP

In den meisten Fällen wird man Passiven FTP-Zugriff konfigurieren, weil Aktiver FTP-Zugriff Client-seitig zu Problemen führen kann, da bei aktiven FTP die Verbindung zum Datenport durch den Server initiiert wird, was oft durch clientseitige Firewalls blockiert wird.
Will man Passives FTP konfigurieren, muss man wissen, dass dafür ein dynamischer Portbereich benötigt wird (>Port 1024). Hier baut der Client die beiden Portverbindungen für Steuerungsverbindung und für die Datenverbindung auf. Der Client sagt dem Server mit dem PASSV Befehl quasi, dass er auf den Port XXXXX lauscht. Dafür muss nun aber serverseitig der entsprechende Portbereich freigeschaltet sein.
Im IIS-Manager markiert man in der linken Baumstruktur den obersten Knoten und wählt dann FTP-Firewallunterstützung aus. Hier trägt man nun unter Datenkanal-Portbereich einen Portbereich (>1024) ein. Der hier definierte Portbereich muss nun auch noch in der Windows-Firewall und im Router bzw. der Hardware-Firewall freigegeben werden. (Der oberste Knoten muss angewählt werden, weil die Portfreigaben für alle FTP-Sites gelten, wenn man z.B. mehrere hat)

Hinweis: Vorher sollte man schauen, welche Portbereichsfreigaben der Router bzw. die Hardware-Firewall zulässt. Bei der derzeitigen FRITZ!Box-Version kann jeweils nur ein Portbereich von 255 Ports freigegeben werden.

FTP-Firewallunterstützung Datenkanal-Portbereich festlegen

Es geht oder es geht nicht!?

Jetzt ist der Moment gekommen, an dem auch der FTP-Zugriff von außen über das Internet funktionieren sollte. Und es stellen sich die Nackenhaare bei hochrotem Kopf und 180 Puls hoch, wenn es nach dieser Odyssee immer noch nicht geht!  So der Fall bei mir, so dass die Ursachenforschung weiter ging, jedoch fehlten mir die Ansätze für weitere Fehlerquellen …Aarrrrgh!

Ich beobachtete nun die Meldungen und Kommandos meines FTP-Clients, in meinem Fall der Total Commander. Dabei viel mir irgendwann folgende Meldung auf:

227 Entering Passive Mode (188,103,164,96,228,201)

Verallgemeinert: 227 Entering Passive Mode (A,B,C,D,m,n)

Im Klammerausdruck konnte ich die ersten vier Zifferblöcke als die IP-Adresse (188.103.164.96) identifizieren, die ich vom ISP bekommen habe. Nun lag die Vermutung nahe, dass die verbleibenden beiden Zifferblöcke etwas mit dem Port zu tun habe. Jedoch ist das eine ungewöhnliche Notation. Wer weiß in welcher Norm oder Richtlinie diese Notation spezifiziert ist, bitte hier kommentieren! Jedenfalls lässt sich die Portnummer anhand m und n berechnen; es handelt sich quasi um eine Geradengleichung:

Port=256*m+n

Über diese Berechnung konnte ich feststellen, dass der angesprochene Port 58.569=256*228+201 weit außerhalb des freigegebenen Portbereichs lag. Wie konnte das sein? Wieder Ratlosigkeit.

Dynamischer Portbereich unter Windows

Unter Windows sind Standardwerte für den Dynamischen Portbereich definiert. In der Konsole kann man sich diesen Portbereich mit

netsh int ipv4 show dynamicport tcp

anzeigen lassen.

Konsole netsh int ipv4 show dynamicport tcp

Das Ergebnis zeigt hier also einen Portbereich von 49152-65536. Innerhalb dieses Bereichs liegt auch der angesprochene Port 58.569. Ob es sich hierbei um einen Bug handelt, lässt sich schwer beurteilen. Wenn man nun aber den dynamischen Portbereich auf den im IIS FTP-Server definierten Portbereich festlegt, funktioniert auch der Zugriff übers Internet von außen. Das Festlegen des neuen Portbereichs erfolgt auch über die Konsole mit:

netsh int ipv4 set dynamicport tcp start=56792 num=255

Nachdem man diese Schritte alle vollzogen hatte, sollte einem erfolgreichem FTP-Zugriff nichts mehr im Wege stehen. Somit zeigt sich auf der einen Seite die Mächtigkeit des Windows FTP-Server, der für die meisten Admins wohl keine Wünsche und Möglichkeiten offen lässt und auf der anderen Seite die vielen zusätzlichen Stellschrauben des Windows-Systems, bei denen man zum Schluss nicht einmal mehr weiß, ob es schon ein Bug oder noch ein Feature ist.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.