Nutzt pure-ftpd dynamische Ports?

Herakles

Profifragensteller
Moin!

[Internet] --- [OpenBSD-Rechner mit pf] --- [Debian-Rechner]

Ich habe einen OpenBSD-Rechner als Internet-Router im Einsatz. Hinter diesem Rechner sitzt ein Debian-Server mit pure-ftp als ftp-Server. Ich nutze pf und habe pf so konfiguriert, dass Port 21 durchgelassen wird und auf den Debian-Kasten geforwarded wird.

Wenn ich nun versuche, zu diesem ftp-Server zu verbinden, komme ich zwar durch zu meinem Server, Username und Passwort werden auch akzeptiert, ABER:

227 Entering Passive Mode (192,168,222,100,182,68)
Opening data connection to 192.168.222.100 Port: 46660
MLSD
Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.
Timeout (40s).

Die 192.168.222.100 ist der Debian-Server.

Ist das etwa so zu verstehen, dass der pute-ftp-Server dynamische Ports benutzt? Die "Port: xxx" Anzeige ist nämlich stets eine andere. Soll ich nach aussen hin alles durchlassen, damit der ftp-Server funktioniert? Oder blockt gar der Debian-Kasten ftp-Connections ab? Kommt also die weitere Verbindung von OpenBSD zu Debian nicht durch?

Was genau habe ich da nicht verstanden?

Danke, Herakles
 
Ist das etwa so zu verstehen, dass der pute-ftp-Server dynamische Ports benutzt?
Nicht nur pute-ftp. Das macht jeder FTP-Server bei passive FTP. Der Server teilt da zuvor dem Client mit, zu welchem Serverport der Client die Verbindung für die Data-Connection aufbauen soll.

Der Server nutz dazu einen zufälligen der freien Ports (>1024). In der Config sollte man aber diesen Bereich festlegen können (für jeden aktuell verbundenen Client braucht es hier einen separaten Port). Ein NAT-Router muss das natürlich berücksichtigen, dass hier eine 2. Verbindung zum Server hin aufgebaut wird.
 
Wie riessig der ist kannst du ja normal konfigurieren (kenne da den pureFTPd aber nicht). Und ist ja auch eine Frage wieviel Clients du gleichzeitig erwartest.

Auch wenn die Server normal alles >1024 nehmen, würd ich pers. denn Bereich schonmal auf max. 49152-65534 einschränken. Ansonsten muss die FW ja nur Packete auf den freigegeben Ports durchlassen (forwarden), wenn es von der Clientl-IP (Port >1024) schon eine Verbindung zum Server (Router) auf Port 21 gibt.

Nicht vergessen, dass der FTP-Server auf das PASV-Kommando auch mit der externen (Router) IP anworten muss und nicht mit der Internen (oder dein NAT-Router muss das umschreiben können).

Kannst natürlich auch einen active FTP only Server machen. Dann stellt sich dieses Problem nicht. Dafür können dann evtl wiederum Clients die ihrerseits hinter NAT sitzen nicht connecten.

Ergo: (FTP-)Server dürfen gerne eine FW haben, aber besser nicht hinter NAT betrieben werden ;-)
 
Ja Du musst für passives FTP einige Bereiche öffnen. Man nimmt dabei Bereiche zwischen 49152 bis 65534 (wie Wiedmann ja schon schrieb).
Ich kenn das von unserem FTP. Wir haben ca. 200 Kunden die diesen zum Datenaustausch mit uns nutzen (TLS/SSL), und da kommt es immer wieder vor das neue Kunden Probleme haben zu connecten und man denen erstmal akltiv und passiv erklären darf (allen Anschein nach meist Windows Admins...).

Ansonsten kannst Du die Ports öffnen, so lange da kein anderer Dienst auf die geöffneten lauscht ist das egal und Du brauchst keine Sorge zu haben das nun eine grosse portrange offen ist, da hört nur der pureFTPD drauf.
 
also bei ftp werde ich immer leicht nervös. kannst du nicht sftp benutzen? das hat den vorteil das du nur den port öffnen und weiterleiten musst auf dem ssh läuft, eine sichere verbindung hast und windows benutzer via winscp einfach drauf zugreifen können.
 
asg schrieb:
Ansonsten kannst Du die Ports öffnen, so lange da kein anderer Dienst auf die geöffneten lauscht ist das egal und Du brauchst keine Sorge zu haben das nun eine grosse portrange offen ist, da hört nur der pureFTPD drauf.

Hehe, mit dieser Argumentation könnte man nahezu alle Einsatzgebiete von Paketfiltern für unnötig erklären. :rolleyes:

Außerdem geht es hier nicht um das Öffnen von Ports, sondern um das Weiterleiten. Und da würde ich bei bei tausenden von Ports dringend von abraten.

Ich würde daher vorschlagen, entweder einen FTP-Proxy zu benutzen oder den OpenBSD-Router durch einen Linux-Router zu ersetzen, weil es für Netfilter ein FTP-Modul gibt, das IIRC auch den Fall "FTP-Server hinter NAT-Router" unterstützt.

Oder endlich FTP wegschmeissen und scp/sftp, WebDAV-über-SSL oder ein anderes NAT- und paketfilterfreundliches Protokoll benutzen :)
 
Also, bisher bin ich zu folgender Lösung gekommen:

ich habe auf dem Debian-Server pure-ftpd installiert gelassen. Wenn ich nun verbinden möchte, mache ich dies mit "active ftp", was laut meinem Verständnis den ftp-Server nur auf Port 20 und 21 lauschen lässt. Ausgehende Verbindungen von diesem Server werden dann zu einem dynamischen Port des Clients aufgebaut. So kann ich es umgehen, alle Ports auf den Debian-Rechner durchzuschleifen.

Der Nachteil an der Sache ist allerdings, dass graphische Clients umgeschaltet werden müssen auf active ftp.

Ohne mich näher einzulesen, scheint es bei Textclients (unter Windows wie unter *NIX) so zu sein, dass per default "active" gemacht wird, denn mit solchen Clients hatte ich von Anfang an immer schon Verbindungen aufbauen können. Lediglich graphische Clients machten Probleme, sobald "PASV" gesandt wurde.

Abschlussfrage dazu: IST DAS SO? Bauen Textclients immer active-Verbindungen auf?

Danke für all Eure Gedanken zu diesem Thread, Lösung ist ja nun endlich gefunden.


Herakles
 
Abschlussfrage dazu: IST DAS SO? Bauen Textclients immer active-Verbindungen auf?
aus der Manpage von ftp (FreeBSD)
By default, ftp will try to use passive mode ftp and fall back to active mode if passive is not supported by the server.

Der ftp von Windows kann IMHO nur actives FTP. Passives FTP kommt halt allen Clients entgegen, die selbst hinter einer FireWall/NAT-Router sitzen.
 
Ich bin der Ansicht, daß man - wenn man schon FTP einsetzt - auch beide Modi unterstützen sollte, denn es mag Benutzer geben, die nur den passiven Modus auf Clientseite benutzen können. Die will man doch nicht aussperren.

Und du solltest noch etwas bedenken: Der passive Modus wird bei deinem aktuellen Setup einfach auf unerklärliche Art und Weise nicht funktionieren. Selbst wenn ein Benutzer dazu in der Lage wäre, seinen Client auf aktiven Modus umzustellen, hat er keinen Anhaltspunkt, daß das sein mysteriöses Verbindungsproblem lösen könnte. PureFTPd bietet hierfür die Option "-N". Ich weiß nicht genau, was diese Funktion macht, aber ich gehe davon aus, daß der Server den Client dann darüber informiert, daß der passive Modus nicht unterstützt wird, vermutlich als Reaktion auf den PASV Befehl.

Wenn man sich schon dazu entscheidet, nur den aktiven Modus zu unterstüzen, sollte man zumindest dieses Feature beim PureFTPd aktivieren.
 
Meine Herren, also einfach ist die Sache hier wirklich nicht. Ich habe mittlerweile einen Abschnitt im pf Users Guide gefunden, der einen ftp-Server hinter NAT mit pf beschreibt. Einfach zu lösen ist das in der Tat nicht.

Ich habe es nun soweit hinbekommen, dass active ftp (beim Client eingestellt) funktioniert. Ich habe auch die -N option ausprobiert, die Hubert erwähnte. Laut manpage sagt der Server so einem verbundenen Client, dass er in jedem Falle active nutzen soll. Das macht er aber NICHT, denn wenn ich mit einem auf "passive" eingestellten Client (in diesem Falle war das gftp), kam kein Datentransfer zustande. Erst, wenn ich den Client auf active umgestellt hatte.

Schon fadenscheinig alles irgendwie...
 
Herakles schrieb:
Meine Herren, also einfach ist die Sache hier wirklich nicht. Ich habe mittlerweile einen Abschnitt im pf Users Guide gefunden, der einen ftp-Server hinter NAT mit pf beschreibt. Einfach zu lösen ist das in der Tat nicht.

Doch, das ist einfach zu lösen. Wie schon gesagt: Es gibt drei Lösungen:

  1. Portforwarding von mehreren tausend Ports (bei pf: http://www.openbsd.org/faq/pf/ftp.html#natserver)
  2. FTP-Proxy (Edit: OpenBSDs ftp-proxy(8) scheint diesen Fall auch zu unterstützen, siehe Option -R "Reverse proxy mode for FTP servers running behind a NAT gateway")
  3. NAT mit FTP-Unterstüzung. (pf: nein - Netfilter: ja)


Herakles schrieb:
Ich habe es nun soweit hinbekommen, dass active ftp (beim Client eingestellt) funktioniert. Ich habe auch die -N option ausprobiert, die Hubert erwähnte. Laut manpage sagt der Server so einem verbundenen Client, dass er in jedem Falle active nutzen soll. Das macht er aber NICHT, denn wenn ich mit einem auf "passive" eingestellten Client (in diesem Falle war das gftp), kam kein Datentransfer zustande. Erst, wenn ich den Client auf active umgestellt hatte.

Kann ich mir schon vorstellen, daß einige Clients diesen Hinweis nicht entsprechend berücksichtigen.

Wie schon gesagt: Man kann sich sowieso nicht darauf verlassen, daß alle Clients auch den aktiven Modus benutzen können. Von daher ist es sowieso ratsam, bei FTP sowohl den passiven als auch den aktiven Modus zu unterstützen. Und dafür gibt es halt die genannten drei Lösungen.

Aber ich fange an, mich zu wiederholen. :)
 
Zuletzt bearbeitet:
Zurück
Oben