Quelle est la différence entre FTP actif et passif?


312

Quelqu'un peut-il me dire quelle est la différence entre FTP actif et passif?
Laquelle est préférable?

Réponses:


474

Actif et passif sont les deux modes dans lesquels FTP peut s'exécuter.

Pour le fond, FTP utilise en fait deux canaux entre le client et le serveur, les canaux de commande et de données, qui sont en fait des connexions TCP distinctes .

Le canal de commande est pour les commandes et les réponses tandis que le canal de données est pour le transfert des fichiers.

Cette séparation des informations de commande et des données dans des canaux séparés est un moyen astucieux d'envoyer des commandes au serveur sans avoir à attendre la fin du transfert de données en cours. Selon la RFC, cela n'est obligatoire que pour un sous-ensemble de commandes, telles que la fermeture, l'abandon du transfert en cours et l'obtention du statut.


En mode actif , le client établit le canal de commande mais le serveur est responsable de l'établissement du canal de données. Cela peut en fait être un problème si, par exemple, la machine cliente est protégée par des pare-feu et n'autorise pas les demandes de session non autorisées de parties externes.

En mode passif , le client établit les deux canaux. Nous savons déjà qu'il établit le canal de commande en mode actif et il fait de même ici.

Cependant, il demande ensuite au serveur (sur le canal de commande) de démarrer l' écoute sur un port (à la discrétion des serveurs) plutôt que d'essayer d'établir une connexion avec le client.

Dans ce cadre, le serveur renvoie également au client le numéro de port qu'il a sélectionné pour écouter, afin que le client sache comment s'y connecter.

Une fois que le client le sait, il peut ensuite créer avec succès le canal de données et continuer.

Plus de détails sont disponibles dans le RFC: https://www.ietf.org/rfc/rfc959.txt


1
Je ne pense pas que la déclaration autour du port Y soit correcte, en mode actif le client ne détermine pas le port Y, le serveur essaie de choisir au hasard un port # et essaie de voir si le client autoriserait la communication via ce port choisi . La raison pour laquelle je dis cela est que, si ce n'est pas vrai (mon argument), le côté client, même s'il se trouve derrière un pare-feu, peut toujours créer deux règles de pare-feu, l'une pour la connexion sortante et l'autre pour la connexion entrante.
arun.raj.mony

1
@arun, le client ne contrôle pas nécessairement le pare-feu. Exemple: dans les environnements d'entreprise, il existe généralement un pare-feu entre le réseau à l'échelle de l'entreprise et le monde extérieur, sur lequel un client exécutant FTP n'a aucune puissance.
paxdiablo

EN mode passif, pourquoi le serveur envoie-t-il au client un port aléatoire au lieu du client se connecte directement au port du serveur 20?
chengbo

@paxdiablo En mode passif, pourquoi le serveur attribue-t-il un numéro de port aléatoire et l'envoie-t-il au client pour la connexion de données? Pourquoi le client ne peut-il pas ouvrir directement un canal de données du port client no au port no 20 côté serveur?
Zephyr

1
J'ai posé la question ici maintenant networkengineering.stackexchange.com/q/43680/37406
Zephyr

166

J'ai récemment rencontré cette question sur mon lieu de travail, donc je pense que je devrais dire quelque chose de plus ici. J'utiliserai l'image pour expliquer comment le FTP fonctionne comme source supplémentaire pour la réponse précédente.

Mode actif:

mode actif


Mode passif:

entrez la description de l'image ici


Dans une configuration en mode actif, le serveur tentera de se connecter à un port côté client aléatoire. Il y a donc de fortes chances que ce port ne soit pas l'un de ces ports prédéfinis. Par conséquent, une tentative de connexion à celui-ci sera bloquée par le pare-feu et aucune connexion ne sera établie.

entrez la description de l'image ici


Une configuration passive n'aura pas ce problème car le client sera celui qui initiera la connexion. Bien sûr, il est possible que le côté serveur dispose également d'un pare-feu. Cependant, étant donné que le serveur devrait recevoir un plus grand nombre de demandes de connexion par rapport à un client, il serait logique que l'administrateur du serveur s'adapte à la situation et ouvre une sélection de ports pour satisfaire les configurations en mode passif.

Il serait donc préférable pour vous de configurer le serveur pour qu'il prenne en charge le mode passif FTP. Cependant, le mode passif rendrait votre système vulnérable aux attaques car les clients sont censés se connecter à des ports de serveur aléatoires. Ainsi, pour prendre en charge ce mode, non seulement si votre serveur doit avoir plusieurs ports disponibles, votre pare-feu doit également autoriser les connexions à tous ces ports!

Pour atténuer les risques, une bonne solution serait de spécifier une plage de ports sur votre serveur, puis d'autoriser uniquement cette plage de ports sur votre pare-feu.

Pour plus d'informations, veuillez lire le document officiel .


Je devine simplement quel est le problème de sécurité. Si le serveur écoute le même port (20), il ne peut pas comprendre quel client parle, il choisit donc un port aléatoire et l'envoie au client, en commençant à écouter ce port. Lorsque le client se connecte à ce port, le serveur sait à quel client il appartient. Mais il suffit qu'un MITM se connecte au même client. (eh bien, l'attaque au mitm ici est difficile de toute façon ...)
Daniele Cruciani

2
Excellente réponse, en particulier des informations sur le problème du pare-feu
Anh Tuan

14

Version expurgée de mon article Modes de connexion FTP (actif vs passif) :

Le mode de connexion FTP (actif ou passif), détermine comment une connexion de données est établie. Dans les deux cas, un client crée une connexion de contrôle TCP vers un port de commande de serveur FTP 21. Il s'agit d'une connexion sortante standard, comme avec tout autre protocole de transfert de fichiers (SFTP, SCP, WebDAV) ou toute autre application client TCP (par exemple un navigateur Web ). Donc, généralement, il n'y a aucun problème lors de l'ouverture de la connexion de contrôle.

Lorsque le protocole FTP est plus compliqué par rapport aux autres protocoles de transfert de fichiers, ce sont les transferts de fichiers. Alors que les autres protocoles utilisent la même connexion pour le contrôle de session et les transferts de fichiers (données), le protocole FTP utilise une connexion distincte pour les transferts de fichiers et les listes de répertoires.

En mode actif , le client commence à écouter sur un port aléatoire les connexions de données entrantes à partir du serveur (le client envoie la commande FTP PORTpour informer le serveur sur quel port il écoute). De nos jours, il est typique que le client soit derrière un pare-feu (par exemple un pare-feu Windows intégré) ou un routeur NAT (par exemple un modem ADSL), incapable d'accepter les connexions TCP entrantes.

Pour cette raison, le mode passif a été introduit et est principalement utilisé de nos jours. L'utilisation du mode passif est préférable car la plupart de la configuration complexe n'est effectuée qu'une seule fois côté serveur, par un administrateur expérimenté, plutôt qu'individuellement côté client, par des utilisateurs (éventuellement) inexpérimentés.

En mode passif , le client utilise la connexion de contrôle pour envoyer une PASVcommande au serveur, puis reçoit une adresse IP et un numéro de port de serveur du serveur, que le client utilise ensuite pour ouvrir une connexion de données à l'adresse IP et au serveur du serveur numéro de port reçu.

Configuration réseau pour le mode passif

Avec le mode passif , la majeure partie de la charge de configuration est du côté serveur. L'administrateur du serveur doit configurer le serveur comme décrit ci-dessous.

Le pare-feu et le NAT côté serveur FTP doivent être configurés non seulement pour autoriser / router les connexions entrantes sur le port FTP 21 mais également une gamme de ports pour les connexions de données entrantes. En règle générale, le logiciel du serveur FTP dispose d'une option de configuration pour configurer une plage de ports que le serveur utilisera. Et la même plage doit être ouverte / routée sur le pare-feu / NAT.

Lorsque le serveur FTP se trouve derrière un NAT, il doit connaître son adresse IP externe, afin de pouvoir la fournir au client en réponse à une PASVcommande.

Configuration réseau pour le mode actif

Avec le mode actif , la majeure partie de la charge de configuration est du côté client.

Le pare-feu (par exemple le pare-feu Windows) et le NAT (par exemple les règles de routage du modem ADSL) côté client doivent être configurés pour autoriser / router une plage de ports pour les connexions de données entrantes. Pour ouvrir les ports dans Windows, accédez à Panneau de configuration> Système et sécurité> Pare-feu Windows> Paramètres avancés> Règles entrantes> Nouvelle règle . Pour router les ports sur le NAT (le cas échéant), reportez-vous à sa documentation.

Lorsqu'il y a du NAT dans votre réseau, le client FTP doit connaître son adresse IP externe que WinSCP doit fournir au serveur FTP à l'aide de la PORTcommande. Pour que le serveur puisse se reconnecter correctement au client pour ouvrir la connexion de données. Certains clients FTP sont capables de détecter automatiquement l'adresse IP externe, certains doivent être configurés manuellement.

Pare-feu intelligents / NAT

Certains pare-feu / NAT essaient d'ouvrir / fermer automatiquement les ports de données en inspectant la connexion de contrôle FTP et / ou en traduisant les adresses IP de connexion de données dans le trafic de connexion de contrôle.

Avec un tel pare-feu / NAT, la configuration ci-dessus n'est pas nécessaire pour un FTP simple non chiffré. Mais cela ne peut pas fonctionner avec FTPS, car le trafic de connexion de contrôle est crypté et le pare-feu / NAT ne peut pas l'inspecter ni le modifier.



1

Mode actif - Le client émet une commande PORT au serveur signalant qu'il fournira «activement» une adresse IP et un numéro de port pour ouvrir la connexion de données au client.

Mode passif: le client émet une commande PASV pour indiquer qu'il attendra «passivement» que le serveur fournisse une adresse IP et un numéro de port, après quoi le client créera une connexion de données au serveur.

Il y a beaucoup de bonnes réponses ci-dessus, mais cet article de blog contient des graphiques utiles et donne une explication assez solide: https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -passive-ftp /

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.