Table des matières

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 :

  1. 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.

  2. 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 :

  1. Le client établit la connexion de contrôle vers le serveur sur le port 21
  2. Le client envoie une commande PORT indiquant au serveur sur quel port il attend la connexion de données
  3. Lorsqu’un transfert est nécessaire, le serveur initie une connexion depuis son port 20 vers le port indiqué par le client
  4. 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 :

  1. Le client établit la connexion de contrôle vers le serveur sur le port 21
  2. Le client envoie une commande PASV pour indiquer qu’il souhaite utiliser le mode passif
  3. Le serveur répond en indiquant une adresse IP et un port sur lesquels il se met en écoute
  4. Le client établit alors lui-même la connexion de données vers le serveur sur le port indiqué
  5. 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 :

  1. Le client se connecte et s’authentifie avec ses identifiants
  2. Il demande le répertoire courant et liste son contenu
  3. 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)
  4. Le client change le type de transfert en binaire (mode Image)
  5. Le client demande le téléchargement d’un fichier, le serveur ouvre une connexion de données
  6. 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 :

  1. L’établissement de la connexion de contrôle : Un “Three-Way Handshake” TCP classique vers le port 21 du serveur
  2. Les échanges FTP de commandes/réponses : Messages textuels sur le canal de contrôle
  3. L’ouverture du canal de données : En mode actif depuis le serveur:20, ou en mode passif depuis un port éphémère
  4. Le transfert effectif des données : Sur le canal de données séparé
  5. 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 FTP
  • tcp.port == 21 : Affiche tout le trafic vers/depuis le port de contrôle FTP
  • tcp.port == 20 : Affiche le trafic du canal de données en mode actif
  • ftp.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 :

  1. Connexion de contrôle : Reste ouverte pendant toute la durée de la session
  2. Connexion de données : Ouverte uniquement pendant le transfert, puis fermée
  3. Délais : Les réponses FTP sont généralement très rapides (quelques millisecondes)
  4. 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 :

  1. 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.

  2. Authentification faible : Le mécanisme d’authentification de base de FTP ne prévoit aucun chiffrement.

  3. 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, ncftp sous Unix/Linux, ou ftp.exe sous 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 :

  1. Hébergement web : Mise à jour de sites web sur des serveurs d’hébergement mutualisé
  2. Partage de fichiers volumineux : Dans des réseaux internes sécurisés
  3. Systèmes legacy : Applications anciennes qui n’ont pas été migrées vers des protocoles plus modernes
  4. 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)