Eine klare und technische Erklärung in Bezug auf das Problem mehrerer gleichzeitiger FTP-Sitzungen beim Sperren des Datenports auf nur einen Port ist das, woran ich am meisten interessiert bin. Wann kann es funktionieren, wann wird es nicht funktionieren, warum kann es nicht empfohlen werden, etc.
Dies wird eine wilde Vermutung sein, da ich es nicht getestet habe. Sie sollten es selbst ausprobieren und sehen, ob es noch andere Probleme gibt, die ich möglicherweise übersehen habe.
Ich nehme an, Sie könnten den passiven Portbereich auf einen einzelnen Port beschränken . Tatsächlich können Sie in dieser Frage sehen, dass in der Praxis kleine Portbereiche verwendet werden . Theoretisch müssen zur Unterstützung mehrerer gleichzeitiger Verbindungen nur die vier Werte angegeben werden: lokale IP, lokaler Port, entfernte IP, entfernter Port , um eindeutig zu sein. So können Sie zwischen verschiedenen Verbindungen unterscheiden.
Wenn Sie den Port auf Ihrem Server auf einen einzelnen Wert beschränken, bleibt nur der vom Client verwendete Port als Variable übrig. Dies ist kein Problem, solange der Client über einen ausreichend großen Pool an freien ephemeren Ports verfügt, aus denen er auswählen kann. Sie müssen sich keine Gedanken darüber machen, es sei denn, es macht etwas schweres NAT. Seien Sie gewarnt, dies wird nur theoretischer Natur sein : Wenn Sie mehrere Ports auf Ihrem Server verwendet haben, können Sie die Anzahl der hypothetischen gleichzeitigen Verbindungen durch Aktivieren multiplizierennumber of ports in range
Verbindungen pro Port clientseitig. In der Praxis wird dies jedoch nicht passieren, da ich bezweifle, dass es eine Implementierung eines FTP-Clients gibt, die dies unterstützt (da dies wenig sinnvoll ist). Wenn der Kunde seine kurzlebigen Ports auf diese Weise freigeben muss und nicht einfach einen neuen öffnen kann, hat er schwerwiegendere Probleme. Aus dieser Perspektive sollten Sie also mit einem einzigen Port absolut sicher sein.
Lassen Sie uns überlegen, warum ein einzelner Port möglicherweise nicht ausreicht .
Zuallererst könnte ich auf eine Situation kommen, in der eine wirklich fehlerhafte FTP-Server-Implementierung ausschließlich die lokale Portnummer verwendet, um die Client-Datenübertragung zu identifizieren. Auch hier denke ich, dass kein anständiger FTPd dies tun würde.
Das eigentliche Problem ( ja, Sie können alles oben als großen Exkurs ignorieren ;-)) ist, dass der passive Portbereich in einem nicht privilegierten Bereich liegt .
Dies bedeutet, dass die von Ihnen ausgewählte Portnummer nicht per se reserviert ist und tatsächlich jeder Benutzerprozess (der keine Root- Rechte benötigt) sie abrufen kann, bevor Ihr FTP-Server dies tut. Wenn Sie über eine große Auswahl an Ports verfügen, greifen Sie einfach zu einem zufälligen freien Port. Wenn Sie nur die eine verwenden müssen und diese bereits verwendet wird, können Sie die Übertragungen nicht ordnungsgemäß verarbeiten.
Sorry, wenn die Antwort etwas zu spekulativ erscheint. Um ehrlich zu sein, habe ich mich sehr bemüht, einen Grund zu finden, warum Sie nicht einen einzigen Port verwenden sollten, und mir fiel, abgesehen vom letzten, kein schwerer Beweis dafür ein. Trotzdem eine interessante und herausfordernde Frage, die Sie stellen.