Einrichtung eines FTP-Servers am Beispiel von Proftp
Aus SchunterNet Wiki
Das Einrichten eines von außerhalb benutzbaren FTP Servers im Schunternet stellt sich gelegentlich als etwas kompliziert heraus. Daher folgen hier einige Erklärungen dazu.
Grundlagen
Sehr kompliziert stellt sich das FTP-Protokoll für den Administrator dar, weil es auf zwei Ports parallel arbeitet. Ein Port (Üblicherweise 21) wird für die Kontrollbefehle verwendet während der andere nur für die eigentliche Datenübertragung geöffnet wird (Üblicherweise 20). Hier erkennen wir sofort das Problem. Diese Ports werden zum Schutz der Benutzer von unserer Firewall geblockt. Bei der Behandlung des reinen Übertragungskanals gibt es zwei verschiedene Verfahren. Im aktiven FTP wird die Verbindung für die Übertragung vom FTP-Server hergestellt, während im passiven FTP der Client die Verbindung herstellt. Im aktiven FTP teilt der Client, dem Server mit, auf welchem Port er die Verbindung gerne hätte. Befindet sich der Server hinter einem Router, so funktioniert meistens nur aktives FTP. Im passiven FTP teilt der Server dem Client mit, wo und auf welchem Port er die Verbindung aufbauen soll. Befindet sich der Client hinter einem Router, so ist passives FTP zu wählen. Befinden sich Client und Server hinter Routern, so wird es fast unmöglich, FTP zu benutzen. Während einer FTP-Verbindung kann zwischen aktiven und passiven Transfer umgeschaltet werden. IE6 verwendet standardmäßig aktiven Transfer, während alle anderen Browser passives FTP verwenden. Dem IE kann man allerdings auch passives FTP beibringen. http://cert.uni-stuttgart.de/filter/ftp-client.php Ich beschreibe hier die verschiedenen Aspekte der FTP-Einrichtung unter Linux am Beispiel von Proftp. Da wir hier sehr ungewöhnliche Optionen wählen müssen, bin ich mir nicht sicher, wie mit anderen Servern zu verfahren ist.
Verbindungsaufbau
Üblicherweise läuft FTP auf Port 21. Der ist von außen jedoch nicht sichtbar. Proftp muss also auf einen höheren Port verschoben werden. Gleichzeitig soll er aber aus Bequemlichkeit zumindest uni-intern auf Port 21 aktiv sein. Das geht nur, wenn der Server von inetd gestartet wird. In /etc/proftpd.conf ServerType inetd In /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd 1718 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd Damit ist er innerhalb der uni ganz normal erreichbar und außerhalb auf Port 1718. Im Browser etwa durch ftp://rechnername.schunter.etc.tu-bs.de:1718 ==Datenübertragung== Aktiv Im aktiven FTP haben wir keine Probleme. Der Client sagt uns, auf welchem Port er die Verbindung gerne hätte und unser FTP Server macht sie auf. Solange der Client hinter keiner Firewall oder einem Router sitzt, wird das funktionieren. Welchen Port der Client gerne hätte, muss er selber entscheiden. Passiv Hier baut der Client die Verbindung für die Datenübertragung auf. Da unsere Firewall alles blockt, müssen wir dem Server sagen, dass er dem Client sagen soll, dass er die Verbindung auf höheren Ports aufmachen soll. In /etc/proftpd.conf PassivePorts 1701 1705
Eigener Router
Befindet sich der Rechner mit dem FTP-Server wiederum hinter einem Router wie z.B. einem Voice Over IP Router, so hat unser Rechner eine private IP-Adresse. Der FTP-Server würde diese Adresse im passiven Mode fälschlicherweise dem Client zum Aufbauen der Verbindung übermitteln. Eine Verbindung käme nicht zustande. Jedoch kann proftp dem auch begegnen. In /etc/proftpd.conf MasqueradeAddress MEINE_IP_ADRESSE Leider funktioniert der Server damit nicht mehr auf dem eigenen Rechner. Greife ich im passiven Mode auf den eigenen FTP Server zu, so meldet mir dieser seine globale IP-Adresse (des Routers), die intern jedoch gar nicht ereichbar ist. Die globale Adresse muss erst einmal im Router das Masquerading durchlaufen. Aber der Router routet nur, was wirklich von außen kommt. Zu beachten ist auch noch, dass proftp seinen Dienst versagt, wenn es den in /etc/hostname eingetragenen Rechner nicht finden kann. Das ist der Fall, wenn der eigene Rechner in /etc/hosts nur mit seiner globalen Adresse eingetragen ist. Die private Adresse muss dazu. Ich glaube, privater und globaler Hostname müssen nicht identisch sein. Zudem ist nicht zu vergessen, dass der Router eingehende Verbindungen wirklich an den eigenen Rechner weiterleiten muss. Entweder erledigt das ein sog. DMZ-Eintrag, der pauschal alles an einen Rechner leitet oder gezieltes Weiterleiten der unter PassivePorts angegebenen Ports. Dann sollte jedoch auch nicht vergessen werden, Port 1718 sowie Port 21 weiterzureichen. Bei der Gelegenheit erscheint ein Weiterleiten von Port 113 erscheint auch noch sinnvoll. Warum, verrät google. Ein auf diese Weise konfigurierter FTP-Server sollte von außen von allen FTP-Clients in allen Modi erreichbar sein. Dabei darf sogar der FTP-Client hinter einer Firewall der einem Router sitzen.

