Frage Warum benötigt der passive FTP-Modus einen Portbereich im Gegensatz zu nur einem Port?


Ich kämpfe um zu fassen Warum Alle FTP-Server erfordern die Verwendung eines Portbereich für Datenkanäle im passiven Modus, anstatt nur einen Datenport für alle eingehenden Datenkanalverbindungen zu verwenden.

FTP-Server verwalten viele gleichzeitig verbundene Clients an Port 21. Webserver verarbeiten viele gleichzeitig verbundene Clients an Port 80. Etc.

Warum kann dann ein FTP-Server nicht nur einen Datenkanal-Port für alle eingehenden passiven Datenverbindungen verwenden (und trotzdem viele gleichzeitig verbundene Clients an diesem Port verwalten, z. B. Port 1024)?

Oder kann es?

Ich bin an den technischen Details interessiert, warum dies nicht möglich oder nicht empfehlenswert ist.


32
2018-05-17 23:10


Ursprung


Das könnte Sie interessieren: w3.org/Protocols/rfc959 - Matt Simmons
Danke, Matt. Ja, ich habe den größten Teil von RFC 959 gelesen, aber ich glaube, ich war nicht wirklich in der Lage, eine klare Antwort darauf zu bekommen, worüber ich mich wunderte. Die Antwort von Karol Piczak ist mehr die Art von Information, nach der ich gesucht habe. - Kurt


Antworten:


Eine klare und technische Erklärung in Bezug auf das Problem mit mehreren gleichzeitigen FTP-Sitzungen, wenn das Sperren des Datenports auf nur einen Port stattfindet, interessiert mich am meisten. Wann kann es funktionieren, wann wird es nicht funktionieren, warum kann es nicht empfohlen werden usw.

Dies wird eine wilde Vermutung sein, da ich es nicht getestet habe, sollten Sie es für sich selbst ausprobieren und sehen, ob es noch andere Probleme gibt, die ich vielleicht übersehen habe.

Schätze ich Sie können den Bereich des passiven Ports auf einen einzelnen Port beschränken. In der Tat können Sie sehen diese Frage Das In der Praxis werden kleine Portbereiche verwendet. Um mehrere gleichzeitige Verbindungen zu unterstützen, benötigen Sie theoretisch nur die 4 Werte: lokale IP, lokaler Port, Remote-IP, Remote-Port einzigartig sein. So unterscheiden Sie zwischen verschiedenen Verbindungen.

Wenn Sie den Port auf Ihrem Server auf einen einzigen Wert beschränken, ist die einzige verbleibende Variable der vom Client verwendete Port. Dies ist kein Problem, solange der Client über einen ausreichend großen Pool an freien Ressourcen verfügt flüchtig Ports zur Auswahl. Es sei denn, es wird etwas schweres NAT, Sie müssen sich nicht darum kümmern. Seien Sie gewarnt, dies wird rein theoretisches Zeug seinWenn Sie mehrere Ports auf Ihrem Server verwendet haben, können Sie die Anzahl hypothetischer gleichzeitiger Verbindungen durch Aktivieren multiplizieren number of ports in range Verbindungen pro Port clientseitig. Aber es wird in der Praxis nicht passieren, da ich bezweifle, dass es einen FTP-Client gibt, der dies unterstützt (weil es nicht viel Sinn macht). Und wenn der Kunde seine ephemeren Ports auf diese Weise teilen muss und nicht einfach einen neuen eröffnen kann, dann hat er viel schwerere Probleme zu bewältigen. Aus dieser Perspektive sollten Sie mit einem einzigen Port absolut sicher sein.

Denken wir nach warum ein einzelner Port möglicherweise nicht ausreicht.

Zuallererst könnte ich eine Situation finden, in der eine wirklich fehlerhafte FTP-Server-Implementierung nur die lokale Port-Nummer verwendet, um den Client-Datentransfer zu identifizieren. Noch einmal, ich glaube nicht, dass ein anständiger FTPd das tun würde.

Das wahre Problem (Ja, Sie können alles oben als eine wichtige Abschweifung ignorieren;-)) ist dass Der Bereich für passive Ports liegt in einem nicht privilegierten Bereich.

Dies bedeutet, dass Ihre Die ausgewählte Portnummer ist nicht reserviert  an sichund tatsächlich jeder Benutzerprozess (braucht nicht Wurzel Privilegien) kann es greifen, bevor Ihr FTP-Server tut. Wenn Sie einen großen Pool an Ports zur Auswahl haben, greifen Sie einfach einen zufälligen frei. Wenn Sie das einzige verwenden müssen, das bereits verwendet wird, können Sie die Übertragungen nicht ordnungsgemäß verarbeiten.

Entschuldigung, wenn die Antwort etwas spekulativ erscheint. Um ehrlich zu sein, habe ich versucht, einen Grund zu finden Warum sollten Sie keinen einzigen Port verwenden? und abgesehen von dem letzten Teil, konnte ich mir keine Beweise dafür vorstellen. Dennoch stellen Sie eine interessante und herausfordernde Frage.


20
2018-05-18 11:40



Übrigens, fühlen Sie sich frei, hier auf verpasste Punkte und Inkonsistenzen zu kommentieren. Selbst ich fühle mich, als ob ich eine einfache Antwort pingelig mache - ja, das kannst du. ;-) - Karol J. Piczak
Vielen Dank Karol! Dies ist genau die Art von Informationen, die ich suchte (und wirklich nirgendwo anders gefunden hatte). Mein Hauptgrund, dass ich diese Frage gestellt habe, ist, dass ich wissen möchte, ob es sicher ist, einen FTP-Server in Windows Azure einzurichten und den passiven Modus auf nur 1 Port zu beschränken (da Azure die Endpunkte begrenzt). Ich habe es versucht, es funktioniert, und mit Ihren Informationen fühle ich mich auch sicher, es zu tun. Das einzige verbleibende Problem ist jedoch, dass der Azure Load Balancer die Steuerungsverbindung nach 1 Minute während der Dateiübertragung löscht (weil er inaktiv ist), also arbeite ich an einem TCP-Tunnel mit keep alive, um ihn zu reparieren. - Kurt
Ich glaube der wahre Grund ist, dass das Datenkanalprotokoll keine identifizierende Information hat. Der Server weiß nur anhand der Portnummer, welche Datei von welchem ​​Client übertragen wird. - Monstieur


FTP stützt sich auf zwei separate Verbindungen, eine für den Steuerungs- oder Befehlsstrom und eine für die Übergabe der Datendateien und anderer Informationen wie z. B. Verzeichnislisten. Der Kontrollstrom wird über eine herkömmliche TCP-Verbindung übertragen. Der Client bindet sich an einen hohen nicht privilegierten Port und sendet eine Verbindungsanforderung an den FTP-Server, der an Port 21 gebunden ist. Diese Verbindung wird zum Übergeben von Befehlen verwendet.

Im Port- oder aktiven Modus teilt der Client dem Server mit, an welchem ​​sekundären, nicht privilegierten Port er sich anmeldet. Der Server initiiert dann die Datenverbindung von Port 20 zu dem vom Client angegebenen nicht privilegierten Port.

Der passive Modus, ein neuerer Mechanismus, ist der Standard, wenn der Client ein Webbrowser ist. Anstatt an Port 20 gebunden zu sein, teilt der Server dem Client mit, welcher hohe Port für die Datenübertragung verwendet werden soll. Die Daten werden dann über nicht privilegierte Ports zwischen Client und Server übertragen.

Für weitere Details, siehe:

http://tools.ietf.org/html/rfc959

BEARBEITEN

Um den Server an einen bestimmten einzelnen Port zu sperren, ist dies bei einigen Servern möglich. Zum Beispiel haben Sie in vsftpd die folgenden Konfigurationsoptionen.

   pasv_max_port
          The maximum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

   pasv_min_port
          The minimum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

Wenn Sie beide Ports auf denselben Wert setzen, z. pasv_max_port = 12345, pasv_min_port = 12345, können Sie vielleicht bekommen, wonach Sie suchen. Ich vermute, dass dies die Anzahl der gleichzeitigen FTP-Sitzungen begrenzen wird, die der Server unterstützt. Bitte testen Sie, um sicher zu sein.


4
2018-05-17 23:24



Danke für deine Antwort. Ich möchte jedoch wissen, warum der FTP-Server im passiven Modus nicht alle Clients anweisen darf, den gleichen Port für den Datenkanal zu verwenden (zum Beispiel Port 1024), anstatt jedem Client einen zufälligen Port von a angegebener Portbereich? Was sind die technischen Gründe dafür, warum die Angabe nur eines einzigen Datenports in der FTP-Server-Portbereichkonfiguration nicht möglich oder empfehlenswert ist? Ich würde denken, dass ein FTP-Server viele / viele gleichzeitige Verbindungen auch an nur einem Datenkanal-Port bewältigen kann, nein? - Kurt
Weil FTP der Teufel ist und endlich sterben muss. : D - kce
Vielen Dank für Ihre Bearbeitung bezüglich der Sperrung des Servers an einen bestimmten einzelnen Port. Ich habe tatsächlich über diese Methode nachgedacht (und das ist, was ich erreichen möchte), aber was ich nicht ganz verstehe, ist, warum das die Anzahl der gleichzeitigen FTP-Sitzungen begrenzen würde, die der Server unterstützen kann. Was genau verhindert das, dass der Server in diesem Fall mehrere gleichzeitige FTP-Sitzungen unterstützt? Da jeder FTP-Server offensichtlich mehrere gleichzeitige Verbindungen an Port 21 unterstützt, warum also nicht auch an Port 12345, von Ihrem Beispiel übernommen? Ich muss das genauer prüfen. - Kurt
Es darf die Anzahl der gleichzeitigen Verbindungen nicht beschränken. Es hängt wirklich davon ab, wie der Server die Verbindungen über mehrere Sitzungen hinweg verfolgt. Versuch es einmal! - dmourati
Ich werde einen Schuss geben. Danke für Ihre Hilfe! - Kurt


Ein FTP-Server könnte in der Lage sein, die Daten-Port-Verbindung des Clients mit ihrer Steuer-Port-Verbindung basierend auf der Quell-IP allein und nicht basierend auf der verwendeten Port-Nummer abzugleichen.

Das würde brechen FXP (was keine schlechte Sache sein mag), wo der Client eine Verbindung zu zwei Servern herstellt (einen im passiven Modus) und dann nach Erhalt der PORT-Informationen des passiven Servers diesen als PORT-Befehl an den aktiven Modus-Server übergibt, damit der aktive Modusserver eine Verbindung herstellt der Server für den passiven Modus.

ich vermuten dass viele Server den Datensocket erst dann erstellen, wenn der Client den passiven Modus anfordert. Wenn in diesem Fall zwei Clients den passiven Modus gleichzeitig anfordern, benötigen die erstellten Sockets eindeutige Portnummern.

BEARBEITEN: einen anderen Grund, warum FTP-Server das nicht tun: Der Server konnte nicht mehrere Benutzer mit der gleichen IP-Adresse unterscheiden.


0
2018-05-17 23:47



Vielen Dank. Ich vermute, was ich nicht verstehe ist, warum diese Datenkanal-Sockets einen eindeutigen Port (auf dem Server) benötigen, wenn zwei oder mehr Clients gleichzeitig den passiven Modus anfordern? Da ich denke, können zwei oder mehr Clients gleichzeitig mit Port 21 verbunden sein, also warum nicht gleichzeitig Port 1024 (für den Datenkanal) sagen? Ich denke, das ist vielleicht eine dumme Frage, aber mein Disclaimer ist, dass ich schon viel zu lange wach bin :) - Kurt
Der Socket selbst muss eindeutig sein. Sie können einen Socket erstellen, der einen Port überwacht, und so viele Verbindungen akzeptieren, wie Sie möchten, oder Sie können einen Socket pro Benutzer an verschiedenen Ports erstellen und eine Verbindung von jedem Socket akzeptieren. Wenn Sie den Server für die Arbeit mit einem Socket pro Benutzer ausgelegt haben, würden Sie im Prinzip alles neu schreiben, um es anders herum zu ändern, und am Ende wären Personen auf gemeinsam genutzten Hosts oder hinter derselben IP-Adresse nicht in der Lage verbinden Sie sich gleichzeitig, weil es keine Möglichkeit gibt, ihre Datenverbindungen voneinander zu unterscheiden. - DerfK
Vielen Dank. Ich bin dankbar für all die Antworten, die ich zu diesem Thema erhalten habe, und ich denke, dass ich jetzt ziemlich gut damit zurechtkomme. - Kurt


An Ports 21 oder 80 (wie an allen bekannten Ports) gibt es ein Set-Protokoll, das der Client benutzt, um zu sagen, was er will. Auf diese Weise weiß der Server, wofür Sie eine Verbindung herstellen. Am Datenverbindungsport gibt es kein Protokoll. Alles, was der Server weiß - das Einzige, was an dieser Verbindung einzigartig ist - ist die Portnummer, mit der Sie sich verbinden.

Wenn Sie jedes Mal eine Verbindung zum selben Port herstellen, kann der Server nicht feststellen, für welche Datei Sie eine Verbindung herstellen. Die Portnummer dient als Verbindung zwischen einer Übertragungsanforderung auf der Steuerverbindung und einer Datenverbindung.

Wenn zwei Clients gleichzeitig eine Übertragung anfordern, kann der Server, wenn der Server eine Verbindung an einem einzelnen Port akzeptiert, nicht erkennen, welche Datei übertragen werden soll. Natürlich könnte der Server eine Client-IP für die Entscheidung verwenden (tatsächlich validieren viele FTP-Server, dass die Client-IP mit der IP übereinstimmt, die auf der Steuerverbindung zur Sicherheit verwendet wird).

Aber das würde nicht funktionieren für:

  • Mehrere Verbindungen von demselben Computer (die meisten FTP-Clients unterstützen parallele Übertragungen / Warteschlangen).
  • Verbindung von verschiedenen Rechnern innerhalb desselben (Firmen-) Netzwerks, da diese dieselbe externe IP haben.

Siehe auch FTP-Datenverbindungen wiederverwenden.


0
2017-08-02 07:19





Ich habe das hier nicht erwähnt, also werde ich es einwerfen. Die Port-Bereich-Zuweisung sollte eine Art Sicherheitsmerkmal sein, wo man einen Port nicht für den Datenverkehr überwachen konnte, die Daten wurden an einem zufälligen Port gesendet der Bereich, der nicht leicht zu bestimmen war. Sicherheit durch Dunkelheit.


-1
2017-09-12 20:41



Haben Sie eine Referenz für diesen Anspruch? - Martin Prikryl


Hört sich an, als wüssten Sie bereits über Steueranschlüsse und Datenports, also werde ich mich auf den Punkt bringen. Kontrollports sind von Natur aus Burst-Kommunikation, genau wie Port 80 für Websites. Sie können viele verschiedene Anfragen bearbeiten (nicht gleichzeitig, aber dicht dran, da sie so schnell fertig sind). Daten-Ports sind auf der anderen Seite, wo die Magie mit FTP passiert. Wenn Sie sich auf einen einzelnen Datenport beschränken, findet jeweils nur eine Datenübertragung statt. Betrachten Sie eine große Dateiübertragung. Wenn ein einzelner Datenport geöffnet ist, können sich keine anderen Daten bewegen, bis die Übertragung abgeschlossen ist. Dies bedeutet, dass ein zweiter Benutzer während der Übertragung nicht einmal in der Lage ist, den Verzeichnisinhalt des FTP-Ordners aufzulisten. Sicher, sie werden sich erfolgreich anmelden können, aber ihr Verhalten ist dasselbe, als ob die Datenports überhaupt nicht geöffnet wären. Wenn Sie damit einverstanden sind, wird ein einzelner Port für Sie gut funktionieren. Denken Sie daran, dass einige FTP-Clients (ich denke sofort an 1) standardmäßig mehrere Verbindungen innerhalb einer Sitzung zum Herunterladen einrichten. Stellen Sie sich für diesen Client in einem einzelnen Port-Szenario eine Stapelübertragung von 1 großen Datei und 4 kleinen Dateien vor.

Der Client initiiert die Übertragung für die erste große Datei, alles gut. Dann, während dieser Transfer läuft, startet er eine zweite Datei. Kein Würfel. Dann der dritte, auch Zilch (Fachausdruck). Am Ende sollte das Protokoll 1 erfolgreiche und 4 fehlgeschlagene Übertragungen zeigen. Die Arbeit wäre, den Client auf eine einzelne Verbindung pro Sitzung zu beschränken, und es wäre gut zu gehen (vorausgesetzt, jemand anderes hat seinen Fuß nicht in die Tür bekommen, die Mikrosekundenübertragung ist abgeschlossen und eine andere hat noch nicht begonnen). )


-2
2018-04-27 21:07



Was? Das ist vollständig falsch. Ein TCP-Socket wird durch das 4-Tupel definiert (Quell-IP, Quell-Port, Ziel-Port, Ziel-IP). Viele TCP-Sockets können gleichzeitig vom selben Zielport aus erstellt und bedient werden: IP-Mapping. Der FTP-Serverprozess kann Daten zwei und von einer beliebigen Anzahl von Netzwerkclients gleichzeitig bereitstellen. - EEAA