Heute ist der Tag der Windows Firewall und NETSH. Nachdem ich unserem Cloud SQL Flügel gemacht hatte, musste ich mich kurz dem FTP des IIS7 annehmen. Wichtig: Der FTP Server, der unter Features hinzugefügt werden kann ist der IIS6 FTP und kann auch auf dem Windows Server 2008 nicht überzeugen. Erst der Download von IIS.NET bringt den “echten” FTP Server auf die neuste MS Serverplattform. Es geht noch immer um den selben und nun geht es darum sicher FTP Daten auszutauschen. FTP im Standard macht da wenig Spaß. Die heruntergeladene Komponente des IIS kann aber mit SSL (TLS) umgehen. Mit Hilfe diese Funktion kann ich mein Login und den Transfer vor Mithörern schützen. Eine Anleitung zum nackten Einrichten gibt es hier:
http://learn.iis.net/page.aspx/263/installing-and-troubleshooting-ftp7/

Jetzt hat man ein FTP auf der Kiste und nun kann man mit gesunden Menschenverstand oder dieser Anleitung die SSL Konfig vornehmen:
http://learn.iis.net/page.aspx/304/using-ftp-over-ssl/

Mit der Firewall hat das leider alles immer noch nicht viel zu tun. Ein Connect auf offenem Port 21 bringt nach der Erfolgreichen Anmeldung folgenden Fehler in FilZilla: “Error: Failed to retrieve directory listing”. Im IIS Manager kann man zwar für Passiv-FTP eine Portrange angeben, allerdings ist die Windows Firewall nicht in der Lage, eine Portrange entgegen zu nehmen. Eine Rule wie “21, 5000-6000” schlägt fehl… und all einzeln eingeben? Nö. Wie geht es also weiter? Keine Ahnung, warum MS da so wenig Wert drauf legt, non LAN Szenarien einfach mal zu dokumentieren. Aber irgendwo wird dann auch auf den Blog von Jaro Dunajsky verlinkt:
http://blogs.iis.net/jaroslad/archive/2007/09/29/windows-firewall-setup-for-microsoft-ftp-publishing-service-for-iis-7-0.aspx

Für ein Server, der im Internet steht und FTP SSL sprechen soll, muss also folgendes getan werden:

1. Download und Installation des FTP7       2. Konfiguration des FTP zum Beispiel mit einem Self-Signed-Cert dank IIS7 Cert-Manager       3. Binding auf einen Port (zum Beispiel 21)        

image 4. Zertifikat zuweisen
image 5. NETSH Konfiguration
netsh advfirewall firewall add rule name=“FTP for IIS7” service=ftpsvc action=allow protocol=TCP dir=in
netsh advfirewall set global Statefulftp disable 6. Für den Zugriff aus .NET heraus ist wichtig: 1. Es muss der Passiv-Mode verwendet werden 2. Es muss kein spezieller Port verwendet werden, er muss nur mit dem des Servers übereinstimmen 3. Die Zertifikate müssen bekannt sein oder ignoriert werden

Jetzt funktioniert’s und ist sogar mit den .NET Bordmitteln (.NET 2.0 oder höher) zu erreichen.

Ciao Marco