Pourquoi le mode passif FTP utilise-t-il une gamme de ports éphémères par opposition à un seul port bien connu? [fermé]

9

En mode passif FTP, j'ai lu que le serveur envoie un numéro de port aléatoire au client où il peut établir un canal de données.
Le client établit ensuite un canal de données à partir de son numéro de port aléatoire vers ce numéro de port envoyé par le serveur.

Ma question est pourquoi le serveur envoie-t-il un numéro de port aléatoire au client? Pourquoi le client ne peut-il pas établir directement un canal de données vers le port numéro 20 côté serveur?

Zéphyr
la source
2
Je pensais que c'était hors sujet.
Malheureusement, les questions sur les protocoles au-dessus de la couche 4 OSI sont hors sujet ici.
Ron Maupin

Réponses:

13

C'est ainsi que le protocole FTP a été conçu pour fonctionner en mode passif. Ce n'était probablement pas une bonne idée, car je ne pense pas que ce modèle ait été répété à nouveau dans aucun autre protocole (et c'est encore plus vrai pour le mode actif FTP).


Sur le port de connexion de données, il n'y a pas de protocole. Tout ce que le serveur sait - la seule chose qui contient des informations sur cette connexion - est le numéro de port auquel vous vous connectez.

Si vous deviez vous connecter au même port à chaque fois, le serveur ne pourrait pas savoir pour quel fichier vous vous connectez. Le numéro de port sert de lien entre une demande de transfert sur la connexion de contrôle et une connexion de données - le numéro de port est contenu dans la réponse à la PASVcommande.

Si deux clients devaient demander un transfert en même temps, lorsque le serveur accepte une connexion sur un seul port, le serveur ne serait pas en mesure de dire quel fichier transférer. Bien sûr, le serveur pourrait utiliser une IP cliente pour la décision (en fait, de nombreux serveurs FTP valident que l'IP client correspond à l'IP utilisée sur la connexion de contrôle, pour des raisons de sécurité).

Mais cela ne fonctionnerait pas pour:

  • Connexions multiples à partir de la même machine (la plupart des clients FTP prennent en charge les transferts / files d'attente parallèles et vous pouvez réellement exécuter plusieurs clients FTP différents sur une seule machine);
  • Connexion à partir de différentes machines au sein du même réseau (d'entreprise), car celles-ci ont la même IP externe.

Copié en partie de ma réponse à Pourquoi le mode passif FTP nécessite-t-il une plage de ports par opposition à un seul port? sur Server Fault.

Martin Prikryl
la source
Le numéro de port utilisé côté serveur peut également être 20, n'est-ce pas? Dans chaque réponse, le numéro de port côté serveur est différent de 20
Zephyr
Ma réponse explique pourquoi le numéro de port doit être unique pour chaque connexion / transfert. Il ne peut donc pas être fixé à 20.
Martin Prikryl
Oui, cela ne peut pas être réparé, mais l'un d'eux peut avoir 20 ans, n'est-ce pas?
Zephyr
1
Oui, mais tous les autres ports doivent être supérieurs à 1024. Et d'un point de vue pratique, une plage de ports contigus est meilleure. La plupart des pare-feu / NAT prennent en charge les règles basées sur la plage. Vous ne voulez pas ajouter de règle spéciale pour le port isolé 20 - De plus, la plupart des serveurs FTP ne prennent en charge qu'une plage de ports contigus.
Martin Prikryl
1
@ Zac67 non, le client ouvrira une nouvelle connexion (à part la connexion de contrôle) pour récupérer le fichier en mode passif, de sorte que le serveur ne peut pas utiliser le numéro de port source (client) pour distinguer les connexions client. De plus, NAT va souvent modifier le port source du client (et / ou l'adresse IP), rendant cette approche inutilisable dans la pratique.
jjmontes
4

Habituellement, le serveur n'envoie pas de port aléatoire mais libre à partir d'une plage / d'un pool défini (par installation) - pour le client, cela semble aléatoire. Ce port doit être transféré au niveau du pare-feu, ce qui nécessite de définir une plage.

Malheureusement, FTP est ancien. Je suppose que les anciens serveurs ne pouvaient pas distinguer les sessions de données de plusieurs clients, sauf par port. En règle générale, il est préférable de passer à des protocoles plus à jour où tout est parfaitement mis en paquets dans une seule session de socket.

Zac67
la source
Donc ça peut être 20 aussi, non? Dans chaque site Web, le numéro de port du serveur pour les données est différent de 20.
Zephyr
20 est le port sortant du serveur pour le FTP actif (qui n'est plus très utilisé).
Zac67
Ce n'était pas que les anciens serveurs avaient des problèmes, c'est que les concepteurs de protocoles essayaient toujours de trouver la meilleure façon de faire les choses plus compliquées que la réponse-requête primitive.
Mark