Table des matières
- 3.5. Le protocole FTP
- Rôle du protocole
- Paramètres pour la couche transport
- Modes de connexion : Actif vs Passif
- Format des commandes et réponses FTP
- Exemple d’échange FTP
- Analyse d’une trace réseau FTP
- Vue d’ensemble de la capture
- Application de filtres Wireshark
- Analyse détaillée du canal de contrôle
- Analyse du canal de données en mode passif
- Observation du transfert de données
- Utilisation de “Follow TCP Stream”
- Différences entre mode actif et mode passif dans une capture
- Tableau récapitulatif des trames observées
- Analyse temporelle
- Points d’attention lors de l’analyse
- Types de représentation des données
- Considérations de sécurité
- Architecture et cas d’usage
- Évolution et alternatives modernes
- Conclusion
- Références
Contenu généré par IA - Test
Ce chapitre a été généré par intelligence artificielle (modèle Claude 3.5 Sonnet d’Anthropic) à des fins de test et d’expérimentation.
Prompt utilisé : “In the 3-couche-applicative-folder, add a new markdown file, structured similarly to the others, containing an explanation of the FTP protocol.”
Avertissement : Ce texte n’a pas été entièrement relu et validé par un humain. Il ne fait pas partie du cours/syllabus officiel et est fourni uniquement à titre expérimental. Les informations contenues dans ce document peuvent contenir des inexactitudes ou des erreurs. Veuillez vous référer aux sources officielles et à la documentation du cours pour le contenu validé.
3.5. Le protocole FTP
Le protocole FTP (File Transfer Protocol) est l’un des protocoles applicatifs les plus anciens de l’Internet, ayant été standardisé dès 1985. Son rôle principal est de permettre le transfert de fichiers entre un client et un serveur distant. Bien que son usage ait diminué au profit de protocoles plus modernes et sécurisés, FTP reste utilisé dans certains contextes et constitue un excellent exemple pour comprendre les mécanismes de transfert de fichiers en réseau.
Rôle du protocole
Le protocole FTP permet à un utilisateur de :
- Transférer des fichiers depuis ou vers un serveur distant (upload/download)
- Naviguer dans l’arborescence du système de fichiers distant
- Gérer des fichiers et répertoires : créer, supprimer, renommer des fichiers et dossiers
- Lister le contenu des répertoires distants
- S’authentifier auprès du serveur pour accéder aux ressources protégées
FTP se distingue des autres protocoles de transfert par son architecture à deux canaux de communication : un canal de contrôle pour les commandes et les réponses, et un canal de données pour le transfert effectif des fichiers. Cette séparation permet une gestion flexible des transferts et une optimisation des performances.
Paramètres pour la couche transport
FTP utilise le protocole de transport TCP pour garantir la fiabilité des transferts de fichiers. En effet, lors du transfert de fichiers, il est essentiel que toutes les données arrivent correctement à destination, sans perte ni corruption.
L’une des particularités de FTP est l’utilisation de deux connexions TCP distinctes :
-
Le canal de contrôle (Control Connection) : Utilise le port TCP 21 côté serveur. Cette connexion est établie en premier et reste ouverte pendant toute la session FTP. Elle sert à échanger les commandes (envoyées par le client) et les réponses (renvoyées par le serveur). C’est par ce canal que transitent les authentifications, les commandes de navigation, et toutes les instructions de gestion.
-
Le canal de données (Data Connection) : Utilise le port TCP 20 côté serveur en mode actif, ou un port éphémère en mode passif. Cette connexion est établie à la demande, uniquement lorsqu’un transfert de données est nécessaire (téléchargement/envoi de fichier, listage de répertoire). Elle est généralement fermée après chaque transfert.
Cette architecture à deux canaux permet de séparer les préoccupations : le canal de contrôle gère l’état de la session et les commandes, tandis que le canal de données se concentre sur le transfert efficace des fichiers.
Modes de connexion : Actif vs Passif
La gestion du canal de données diffère selon le mode de connexion utilisé. Ces deux modes ont été conçus pour répondre à différentes contraintes réseau, notamment en présence de pare-feux et de traduction d’adresses (NAT).
Mode Actif
En mode actif (mode par défaut historique), c’est le serveur qui initie la connexion du canal de données vers le client :
- Le client établit la connexion de contrôle vers le serveur sur le port 21
- Le client envoie une commande
PORTindiquant au serveur sur quel port il attend la connexion de données - Lorsqu’un transfert est nécessaire, le serveur initie une connexion depuis son port 20 vers le port indiqué par le client
- Le transfert s’effectue sur cette nouvelle connexion
Problème : Ce mode pose des difficultés lorsque le client se trouve derrière un pare-feu ou un NAT, car ces équipements bloquent généralement les connexions entrantes non sollicitées. Le serveur ne peut alors pas établir la connexion de données vers le client.
Mode Passif
Le mode passif (introduit pour résoudre les problèmes du mode actif) inverse les rôles : c’est le client qui initie les deux connexions :
- Le client établit la connexion de contrôle vers le serveur sur le port 21
- Le client envoie une commande
PASVpour indiquer qu’il souhaite utiliser le mode passif - Le serveur répond en indiquant une adresse IP et un port sur lesquels il se met en écoute
- Le client établit alors lui-même la connexion de données vers le serveur sur le port indiqué
- Le transfert s’effectue sur cette nouvelle connexion
Avantage : Ce mode fonctionne mieux avec les pare-feux et NAT côté client, puisque c’est toujours le client qui initie les connexions (sortantes). C’est désormais le mode le plus couramment utilisé.
Le schéma ci-dessous illustre la différence entre les deux modes :
| Élément | Mode Actif | Mode Passif |
|---|---|---|
| Connexion de contrôle | Client → Serveur:21 | Client → Serveur:21 |
| Commande utilisée | PORT | PASV |
| Connexion de données | Serveur:20 → Client:port_ephemere | Client:port_ephemere → Serveur:port_ephemere |
| Initiateur données | Serveur | Client |
| Problème NAT/Firewall | Côté client | Côté serveur |
Format des commandes et réponses FTP
FTP est un protocole textuel basé sur des échanges de commandes et de réponses, ce qui le rend relativement facile à déboguer et à comprendre.
Commandes FTP
Les commandes FTP sont envoyées par le client sur le canal de contrôle. Elles sont composées d’un mot-clé (généralement de 3 ou 4 lettres en majuscules) suivi éventuellement de paramètres, et terminées par les caractères <CR><LF> (retour chariot + saut de ligne).
Voici les principales commandes FTP :
| Commande | Paramètres | Description |
|---|---|---|
| USER | username | Spécifie le nom d’utilisateur pour l’authentification |
| PASS | password | Spécifie le mot de passe (envoyé en clair !) |
| PWD | - | Affiche le répertoire de travail courant (Print Working Directory) |
| CWD | path | Change le répertoire de travail (Change Working Directory) |
| CDUP | - | Remonte au répertoire parent |
| LIST | [path] | Liste le contenu d’un répertoire (format détaillé) |
| NLST | [path] | Liste les noms de fichiers uniquement (Name LiST) |
| RETR | filename | Télécharge un fichier depuis le serveur (RETRieve) |
| STOR | filename | Envoie un fichier vers le serveur (STORe) |
| DELE | filename | Supprime un fichier (DELEte) |
| MKD | dirname | Crée un répertoire (MaKe Directory) |
| RMD | dirname | Supprime un répertoire (ReMove Directory) |
| RNFR | oldname | Spécifie le fichier à renommer (ReName FRom) |
| RNTO | newname | Spécifie le nouveau nom (ReName TO) |
| PORT | h1,h2,h3,h4,p1,p2 | Spécifie l’adresse et le port pour le mode actif |
| PASV | - | Active le mode passif |
| TYPE | type_code | Définit le type de représentation (A=ASCII, I=Image/binaire) |
| QUIT | - | Termine la session FTP |
Réponses FTP
Le serveur répond à chaque commande par un code de statut numérique à trois chiffres, suivi d’un message textuel explicatif. Le format est similaire à celui des codes de statut HTTP.
Les codes de réponse suivent une structure logique :
- Premier chiffre : Indique le type de réponse
- 1xx : Réponse positive préliminaire (action en cours)
- 2xx : Réponse positive de complétion (action réussie)
- 3xx : Réponse positive intermédiaire (information supplémentaire nécessaire)
- 4xx : Réponse négative de complétion transitoire (erreur temporaire)
- 5xx : Réponse négative de complétion permanente (erreur permanente)
- Deuxième chiffre : Catégorie de la réponse
- x0x : Syntaxe
- x1x : Information
- x2x : Connexions
- x3x : Authentification
- x4x : Non spécifié
- x5x : Système de fichiers
Exemples de codes de réponse courants :
| Code | Message | Signification |
|---|---|---|
| 150 | File status okay; about to open data connection | Le transfert va commencer |
| 200 | Command okay | Commande acceptée |
| 220 | Service ready for new user | Serveur prêt à accepter des connexions |
| 221 | Service closing control connection | Déconnexion en cours |
| 226 | Closing data connection; transfer complete | Transfert terminé avec succès |
| 230 | User logged in, proceed | Authentification réussie |
| 331 | User name okay, need password | Nom d’utilisateur accepté, mot de passe requis |
| 425 | Can’t open data connection | Impossible d’ouvrir le canal de données |
| 426 | Connection closed; transfer aborted | Transfert interrompu |
| 450 | Requested file action not taken | Action non effectuée (fichier occupé) |
| 500 | Syntax error, command unrecognized | Commande non reconnue |
| 530 | Not logged in | Authentification requise |
| 550 | Requested action not taken | Action refusée (fichier introuvable, permissions) |
Exemple d’échange FTP
Voici un exemple typique d’une session FTP en mode passif, montrant les échanges sur le canal de contrôle :
# Le serveur accueille le client
S: 220 FTP Server ready.
# Authentification
C: USER alice
S: 331 User name okay, need password.
C: PASS secret123
S: 230 User logged in, proceed.
# Navigation dans les répertoires
C: PWD
S: 257 "/" is current directory.
C: LIST
S: 150 Opening ASCII mode data connection for file list.
S: 226 Transfer complete.
# Passage en mode passif
C: PASV
S: 227 Entering Passive Mode (192,168,1,100,195,149)
# Téléchargement d'un fichier
C: TYPE I
S: 200 Type set to I.
C: RETR document.pdf
S: 150 Opening BINARY mode data connection for document.pdf (2458624 bytes).
[Transfert du fichier sur le canal de données]
S: 226 Transfer complete.
# Fin de session
C: QUIT
S: 221 Goodbye.
Dans cet exemple :
- Le client se connecte et s’authentifie avec ses identifiants
- Il demande le répertoire courant et liste son contenu
- Il active le mode passif : le serveur répond avec son adresse (192.168.1.100) et le port calculé ((195×256) + 149 = 49920 + 149 = 50069)
- Le client change le type de transfert en binaire (mode Image)
- Le client demande le téléchargement d’un fichier, le serveur ouvre une connexion de données
- Après le transfert réussi, le client termine la session
Analyse d’une trace réseau FTP
Pour bien comprendre le fonctionnement de FTP, il est instructif d’analyser une capture réseau réelle effectuée avec Wireshark. Cette analyse permet de visualiser concrètement l’architecture à deux canaux et les échanges de messages.
Vue d’ensemble de la capture
Lors d’une session FTP typique capturée avec Wireshark, on peut observer plusieurs éléments caractéristiques :
- L’établissement de la connexion de contrôle : Un “Three-Way Handshake” TCP classique vers le port 21 du serveur
- Les échanges FTP de commandes/réponses : Messages textuels sur le canal de contrôle
- L’ouverture du canal de données : En mode actif depuis le serveur:20, ou en mode passif depuis un port éphémère
- Le transfert effectif des données : Sur le canal de données séparé
- La fermeture des connexions : Terminaison des connexions TCP
Application de filtres Wireshark
Pour analyser efficacement une capture FTP, plusieurs filtres Wireshark sont utiles :
ftp: Affiche uniquement les messages du protocole FTP (commandes et réponses)ftp-data: Affiche uniquement les transferts de données FTPtcp.port == 21: Affiche tout le trafic vers/depuis le port de contrôle FTPtcp.port == 20: Affiche le trafic du canal de données en mode actifftp.request.command == "PASV": Filtre les commandes PASV (mode passif)ftp.request.command == "RETR": Filtre les commandes de téléchargement
Analyse détaillée du canal de contrôle
Examinons en détail les trames du canal de contrôle. Dans une capture Wireshark, on peut observer :
Établissement de la connexion
Frame 1: TCP SYN [Client → Serveur:21]
Frame 2: TCP SYN-ACK [Serveur:21 → Client]
Frame 3: TCP ACK [Client → Serveur:21]
Frame 4: FTP Response: 220 Welcome to FTP Server
Le serveur envoie son message de bienvenue (code 220) immédiatement après l’établissement de la connexion TCP, sans attendre de commande du client.
Authentification
Frame 5: FTP Request: USER alice
Frame 6: FTP Response: 331 User name okay, need password
Frame 7: FTP Request: PASS secret123
Frame 8: FTP Response: 230 User logged in, proceed
Observation critique de sécurité : En utilisant l’outil “Follow TCP Stream” de Wireshark, on peut voir le mot de passe en clair dans la capture. Cela illustre parfaitement le problème de sécurité majeur de FTP.
Passage en mode passif
Frame 9: FTP Request: PASV
Frame 10: FTP Response: 227 Entering Passive Mode (192,168,1,100,195,149)
Dans cette réponse, le serveur indique :
- Son adresse IP : 192.168.1.100
- Le port sur lequel il attend la connexion de données : (195×256) + 149 = 50069
Le format (h1,h2,h3,h4,p1,p2) représente l’adresse IP comme h1.h2.h3.h4 et le port comme (p1×256) + p2.
Analyse du canal de données en mode passif
Une fois le mode passif établi, le client initie une nouvelle connexion TCP vers le port indiqué par le serveur :
Frame 11: TCP SYN [Client:ephemeral → Serveur:50069]
Frame 12: TCP SYN-ACK [Serveur:50069 → Client:ephemeral]
Frame 13: TCP ACK [Client:ephemeral → Serveur:50069]
Cette connexion reste ouverte pour le transfert des données. Sur le canal de contrôle, on voit ensuite :
Frame 14: FTP Request: RETR document.pdf
Frame 15: FTP Response: 150 Opening BINARY mode data connection
[Transfert des données sur le canal de données - Frames 16-250]
Frame 251: FTP Response: 226 Transfer complete
Observation du transfert de données
En appliquant le filtre ftp-data, on peut observer les segments TCP contenant les données du fichier transféré. Caractéristiques notables :
- Protocole affiché : “FTP-DATA” au lieu de “FTP”
- Taille des segments : Généralement proche de la MTU (Maximum Transmission Unit) pour optimiser le transfert
- Numéros de séquence TCP : Augmentent au fur et à mesure du transfert
- Accusés de réception : Le client acquitte les segments reçus selon le mécanisme de fenêtre TCP
Utilisation de “Follow TCP Stream”
L’outil “Follow TCP Stream” de Wireshark est particulièrement utile pour FTP :
Pour le canal de contrôle :
- Permet de voir toute la conversation FTP sous forme textuelle
- Montre clairement les commandes en bleu (client→serveur) et les réponses en rouge (serveur→client)
- Révèle les identifiants de connexion en clair
Pour le canal de données :
- Permet d’extraire le fichier transféré
- Pour un fichier texte, affiche son contenu
- Pour un fichier binaire, permet de le sauvegarder sur disque avec “Save As”
Différences entre mode actif et mode passif dans une capture
En comparant des captures de sessions FTP en mode actif et passif, on observe :
| Élément | Mode Actif | Mode Passif |
|---|---|---|
| Commande utilisée | PORT (client envoie son port) | PASV (serveur répond avec son port) |
| Initiateur connexion données | Serveur depuis port 20 | Client depuis port éphémère |
| Port destination données | Port indiqué par client | Port indiqué par serveur |
| Problème NAT observable | Échec si client derrière NAT | Réussite dans la plupart des cas |
Tableau récapitulatif des trames observées
Voici un résumé typique des trames dans une session FTP en mode passif :
| N° Frame | Protocole | Source | Destination | Info |
|---|---|---|---|---|
| 1-3 | TCP | Client | Serveur:21 | Handshake connexion contrôle |
| 4 | FTP | Serveur:21 | Client | 220 Welcome |
| 5 | FTP | Client | Serveur:21 | USER alice |
| 6 | FTP | Serveur:21 | Client | 331 Password required |
| 7 | FTP | Client | Serveur:21 | PASS [masqué] |
| 8 | FTP | Serveur:21 | Client | 230 Login successful |
| 9 | FTP | Client | Serveur:21 | PASV |
| 10 | FTP | Serveur:21 | Client | 227 Entering Passive Mode |
| 11-13 | TCP | Client | Serveur:50069 | Handshake connexion données |
| 14 | FTP | Client | Serveur:21 | RETR document.pdf |
| 15 | FTP | Serveur:21 | Client | 150 Opening data connection |
| 16-250 | FTP-DATA | Serveur:50069 | Client | [Données du fichier] |
| 251 | FTP | Serveur:21 | Client | 226 Transfer complete |
| 252-254 | TCP | Client/Serveur | Serveur/Client:50069 | Fermeture connexion données (FIN) |
| 255 | FTP | Client | Serveur:21 | QUIT |
| 256 | FTP | Serveur:21 | Client | 221 Goodbye |
| 257-259 | TCP | Client/Serveur | Serveur/Client:21 | Fermeture connexion contrôle (FIN) |
Analyse temporelle
En observant les timestamps des trames dans Wireshark, on peut constater :
- Connexion de contrôle : Reste ouverte pendant toute la durée de la session
- Connexion de données : Ouverte uniquement pendant le transfert, puis fermée
- Délais : Les réponses FTP sont généralement très rapides (quelques millisecondes)
- Transfert : La durée dépend de la taille du fichier et de la bande passante
Points d’attention lors de l’analyse
Lors de l’analyse d’une trace FTP, il est important de vérifier :
- ✓ Connexions TCP établies correctement : SYN, SYN-ACK, ACK
- ✓ Codes de réponse appropriés : 2xx pour succès, 4xx/5xx pour erreurs
- ✓ Mode utilisé : Présence de PORT ou PASV
- ✓ Deux flux TCP distincts : Un pour contrôle, un pour données
- ✓ Type de transfert : ASCII ou Binary (TYPE A ou TYPE I)
- ⚠ Sécurité : Identifiants et données visibles en clair
Cette analyse de trace réseau permet de comprendre concrètement comment FTP implémente son architecture à deux canaux et met en évidence ses caractéristiques et limitations.
Types de représentation des données
FTP supporte différents types de représentation pour les données transférées, spécifiés par la commande TYPE :
-
Type ASCII (A) : Les fichiers texte sont transférés en convertissant les fins de ligne selon les conventions du système de destination. Utile pour les fichiers texte qui doivent être lisibles sur différents systèmes d’exploitation (Windows :
<CR><LF>, Unix :<LF>, Mac classique :<CR>). -
Type Image/Binaire (I) : Les fichiers sont transférés octet par octet sans aucune transformation. C’est le mode requis pour les fichiers exécutables, images, vidéos, archives compressées, etc.
-
Type EBCDIC (E) : Utilisé pour les transferts entre mainframes IBM utilisant l’encodage EBCDIC (rarement utilisé aujourd’hui).
-
Type Local (L) : Permet de spécifier une taille d’octet personnalisée (rarement utilisé).
Considérations de sécurité
FTP présente des problèmes de sécurité majeurs qui limitent son usage dans les environnements modernes :
-
Transmission en clair : Les identifiants (nom d’utilisateur et mot de passe) et les données sont transmis sans chiffrement, ce qui permet une interception facile par un attaquant sur le réseau.
-
Authentification faible : Le mécanisme d’authentification de base de FTP ne prévoit aucun chiffrement.
-
Accès anonyme : Bien que pratique, le mode anonyme (avec l’utilisateur “anonymous”) peut exposer des données sensibles si mal configuré.
Pour ces raisons, des alternatives sécurisées ont été développées :
- FTPS (FTP Secure) : Extension de FTP qui ajoute le support du chiffrement TLS/SSL, similaire à HTTPS pour HTTP.
- SFTP (SSH File Transfer Protocol) : Protocole de transfert de fichiers complètement différent, utilisant SSH pour le chiffrement et l’authentification. À ne pas confondre avec FTPS.
- SCP (Secure Copy) : Utilise également SSH pour copier des fichiers de manière sécurisée.
Architecture et cas d’usage
Serveurs FTP
Les serveurs FTP sont des logiciels dédiés qui écoutent sur le port 21 et gèrent les sessions clients. Parmi les serveurs FTP populaires :
- vsftpd (Very Secure FTP Daemon) : Serveur FTP léger et sécurisé pour Linux
- ProFTPD : Serveur FTP modulaire et configurable pour Unix/Linux
- FileZilla Server : Serveur FTP open-source pour Windows
- Microsoft IIS : Inclut un serveur FTP intégré sur Windows Server
Clients FTP
Les clients FTP permettent aux utilisateurs d’interagir avec les serveurs. Ils peuvent être :
- Clients en ligne de commande :
ftp,lftp,ncftpsous Unix/Linux, ouftp.exesous Windows - Clients graphiques : FileZilla, WinSCP, Cyberduck, etc.
- Clients intégrés : De nombreux navigateurs web supportaient FTP (bien que ce support soit progressivement abandonné)
Cas d’usage typiques
Malgré ses limitations de sécurité, FTP reste utilisé dans certains contextes :
- Hébergement web : Mise à jour de sites web sur des serveurs d’hébergement mutualisé
- Partage de fichiers volumineux : Dans des réseaux internes sécurisés
- Systèmes legacy : Applications anciennes qui n’ont pas été migrées vers des protocoles plus modernes
- Transferts automatisés : Scripts de synchronisation et de sauvegarde entre serveurs
Évolution et alternatives modernes
Aujourd’hui, l’usage de FTP classique est déconseillé pour les raisons de sécurité évoquées. Les bonnes pratiques recommandent :
- SFTP pour les transferts sécurisés point-à-point
- FTPS si une compatibilité avec FTP est requise mais avec ajout de sécurité
- HTTP/HTTPS avec API REST pour les échanges de fichiers dans des applications web modernes
- WebDAV pour la gestion collaborative de documents
- rsync pour la synchronisation efficace de fichiers (notamment via SSH)
- Solutions cloud : Services de stockage comme S3, Azure Blob Storage, avec leurs API propriétaires
Néanmoins, comprendre FTP reste pertinent car :
- Il illustre les principes fondamentaux du transfert de fichiers en réseau
- Son architecture à deux canaux est un concept important en réseau
- Les modes actif/passif illustrent bien les problématiques liées aux pare-feux et NAT
- De nombreux systèmes legacy utilisent encore FTP
Conclusion
Le protocole FTP, bien qu’ancien, a posé les bases des transferts de fichiers sur Internet. Son architecture à deux canaux, sa séparation claire entre commandes et données, et ses modes de fonctionnement actif et passif ont influencé de nombreux protocoles ultérieurs. Cependant, face aux exigences modernes de sécurité, il est aujourd’hui largement remplacé par des alternatives chiffrées comme SFTP ou FTPS dans les environnements de production.
Références
- RFC 959 - File Transfer Protocol (Note de V. Van den Schrieck : Cette source est valide et pertinente, il s’agit du standard officiel définissant le protocole. )
- CNP3, chap. The File Transfer Protocol (Note de V. Van den Schrieck : Cette ressource n’existe pas, elle a été “hallucinée” par l’IA utilisée)