Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
090_applicatifs:205ftp:500proto_ftp:10_les_bases [le 16/02/2025 à 14:36] – supprimée - modification externe (Date inconnue) 127.0.0.1 | 090_applicatifs:205ftp:500proto_ftp:10_les_bases [le 24/03/2025 à 16:27] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. prof | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Les bases de FTP ====== | ||
+ | |||
+ | ===== Le cas le plus « classique » ===== | ||
+ | |||
+ | Un client (utilisateur FTP) va se servir de ce protocole, pour faire du transfert de fichiers (upload ou download) sur un serveur FTP. | ||
+ | |||
+ | Il existe une multitude de logiciels clients en mode graphique pour réaliser ces opérations. Passons sur les fonctions FTP implémentées dans les navigateurs web (Internet Explorer, Mozilla...), | ||
+ | |||
+ | ==== Clients Windows ==== | ||
+ | |||
+ | Vous serez probablement surpris de constater le nombre impressionnant de clients FTP disponibles, | ||
+ | |||
+ | A noter également le module complémentaire de Firefox : [[https:// | ||
+ | ==== Clients GNU/Linux ==== | ||
+ | |||
+ | Nous avons [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== Autres possibilités ==== | ||
+ | |||
+ | Il existe enfin des utilitaires FTP en ligne de commande, aussi bien sous Windows que sous Linux. Il sont certainement moins conviviaux, mais pas forcément moins puissants. L' | ||
+ | |||
+ | Dans la suite, nous utiliserons donc le client Filezilla : | ||
+ | {{ 090_applicatifs: | ||
+ | |||
+ | Les clients FTP graphiques ont tous plus ou moins la même présentation. Ici, nous nous sommes connectés au serveur '' | ||
+ | |||
+ | La partie gauche représente l' | ||
+ | ==== Le principe de base ==== | ||
+ | |||
+ | Le client ouvre une session FTP sur un serveur. Il existe une grande quantité de serveurs FTP publics. Un serveur FTP requiert une identification du client. Il existe souvent un compte « anonyme », qui donne accès en lecture seule dans la partie publique du serveur, mais il existe également des parties privées où les clients disposant d'un compte peuvent accéder en écriture sur certains répertoires de l' | ||
+ | |||
+ | {{ 090_applicatifs: | ||
+ | |||
+ | La première chose que l'on constate, c'est que, contrairement à d' | ||
+ | |||
+ | * L'un pour l' | ||
+ | * l' | ||
+ | |||
+ | Le client FTP (partie de droite), par l' | ||
+ | |||
+ | ===== L' | ||
+ | |||
+ | {{090_applicatifs: | ||
+ | |||
+ | |||
+ | ===== Modes Actif et Passif ===== | ||
+ | |||
+ | Le meilleur moyen pour comprendre FTP n'est probablement pas la lecture des RFC mais plutôt l' | ||
+ | |||
+ | Les manipulations sont faites depuis un poste client connecté à un LAN, lui-même connecté à l' | ||
+ | |||
+ | Il faut bien prendre le problème par un bout pour le décortiquer, | ||
+ | |||
+ | Le protocole FTP supporte deux manières de fonctionner, | ||
+ | |||
+ | Pour l' | ||
+ | |||
+ | Le résultat de la manipulation qui suit n'est plus tout jeune, les noms des hôtes et du fichier téléchargé ne sont plus d' | ||
+ | |||
+ | Nous avions créé une connexion au serveur [[ftp:// | ||
+ | |||
+ | ===== Ce que montre le sniffeur ===== | ||
+ | |||
+ | ==== Avertissement ==== | ||
+ | |||
+ | L' | ||
+ | |||
+ | Pour vous éviter de faire plusieurs aller-retours sur la page, j'ai essayé d' | ||
+ | |||
+ | ==== Établissement de la connexion pour les commandes ==== | ||
+ | |||
+ | No. Time | ||
+ | 1 0.000000 192.168.0.10 | ||
+ | 2 0.022327 194.2.0.36 | ||
+ | 3 0.022356 192.168.0.10 | ||
+ | |||
+ | Établissement d'une connexion TCP entre le client (192.168.0.10: | ||
+ | |||
+ | Pour savoir que le port nommé '' | ||
+ | |||
+ | Frame 1 (62 bytes on wire, 62 bytes captured) | ||
+ | ... | ||
+ | Transmission Control Protocol, Src Port: 1175 (1175), Dst Port: ftp (21) | ||
+ | Source port: 1175 (1175) | ||
+ | Destination port: ftp (21) | ||
+ | ... | ||
+ | |||
+ | Mais passons à la suite... | ||
+ | |||
+ | 4 0.055680 194.2.0.36 | ||
+ | | ||
+ | |||
+ | Le serveur entame le dialogue propre au protocole FTP en se présentant. Chaque réponse commence par un nombre, optionnellement suivi d'un commentaire. La réponse 220 signifie : « Service disponible pour nouvel utilisateur ».\\ Vous aurez l' | ||
+ | |||
+ | 5 0.057744 192.168.0.10 | ||
+ | |||
+ | Le client se présente aussi en indiquant son nom. Comme nous avons fait un accès anonyme, nous utilisons le nom conventionnel '' | ||
+ | |||
+ | 6 0.078527 194.2.0.36 | ||
+ | 7 0.081892 194.2.0.36 | ||
+ | | ||
+ | |||
+ | Le serveur accepte les accès anonymes. Ce n'est pas une obligation, certains serveurs ne le font pas. En général, en accès anonyme, l' | ||
+ | |||
+ | 8 0.084076 192.168.0.10 | ||
+ | |||
+ | La preuve, Filezilla envoie un laconique '' | ||
+ | |||
+ | 9 0.108851 194.2.0.36 | ||
+ | | ||
+ | |||
+ | La preuve... La réponse 230 veut dire : « Session ouverte ». Notons tout de même que le serveur a ici effectué une requête « reverse DNS » sur notre adresse IP, d'où la réponse '' | ||
+ | |||
+ | 11 0.109313 192.168.0.10 | ||
+ | 12 0.109914 194.2.0.36 | ||
+ | Sat Jan 11 10:32:57 2003 | ||
+ | 13 0.110341 194.2.0.36 | ||
+ | 14 0.110365 192.168.0.10 | ||
+ | 15 0.131452 194.2.0.36 | ||
+ | this archive service, | ||
+ | or to report problems, | ||
+ | |||
+ | Le serveur nous donne son heure locale, qui peut être utile si l'on devait signaler un problème à l' | ||
+ | |||
+ | 16 0.141903 192.168.0.10 | ||
+ | |||
+ | Le client envoie la commande PWD qui signifie : « Print Working Directory » | ||
+ | |||
+ | 17 0.172747 194.2.0.36 | ||
+ | |||
+ | Nous sommes à la racine de l' | ||
+ | |||
+ | === Où en sommes-nous ? === | ||
+ | |||
+ | Nous avons initié une connexion FTP avec le serveur. Nous nous sommes identifié comme un utilisateur anonyme et nous nous retrouvons dans la racine de l' | ||
+ | |||
+ | 18 0.176308 192.168.0.10 | ||
+ | |||
+ | Première commande curieuse : PORT 192.168.0.10, | ||
+ | |||
+ | * PORT, c'est une commande. Le client signale qu'il voudrait utiliser un port particulier ; | ||
+ | * 192.168.0.10, | ||
+ | * 4,152, c'est la notation d'un numéro de port, écrit à la mode des adresses IP, c'est à dire sous forme de deux octets, dont chaque octet est exprimé en valeur décimale. Dans la pratique, ceci veut dire que le port spécifié sera 4 x 256 + 152 = 1176 | ||
+ | |||
+ | La suite va nous indiquer plus clairement à qui va servir ce port. | ||
+ | |||
+ | 19 0.198149 194.2.0.36 | ||
+ | |||
+ | Le serveur répond qu'il est d' | ||
+ | |||
+ | 20 0.200751 192.168.0.10 | ||
+ | |||
+ | La commande TYPE indique au serveur quel type de données sont attendues. Le type A signale que l'on attend du texte ASCII. | ||
+ | |||
+ | 21 0.223387 194.2.0.36 | ||
+ | |||
+ | Le serveur est toujours d' | ||
+ | |||
+ | 22 0.225874 192.168.0.10 | ||
+ | |||
+ | La commande LIST qui signifie que le client attend la liste des objets présents dans le répertoire courant (l' | ||
+ | |||
+ | **Attention !!!\\ Ce qu'il va se passer maintenant réclame beaucoup d' | ||
+ | |||
+ | * **Que nous sommes en mode Actif,** | ||
+ | * **Que le client a demandé l' | ||
+ | |||
+ | 23 0.247769 194.2.0.36 | ||
+ | 24 0.247826 192.168.0.10 | ||
+ | 25 0.264940 194.2.0.36 | ||
+ | 26 0.267461 194.2.0.36 | ||
+ | |||
+ | Le serveur FTP initie une nouvelle connexion FTP (trames 23,24 et 26). Mais vous avez bien vu, c'est __le serveur qui initie la connexion__, | ||
+ | |||
+ | //Mais comment... 192.168.0.10, | ||
+ | |||
+ | Notre sniffeur se situe sur le poste client. Si nous l' | ||
+ | |||
+ | Il est fort mais tout de même il faut l' | ||
+ | |||
+ | Netfilter travaille normalement au niveau '' | ||
+ | |||
+ | C'est le module '' | ||
+ | |||
+ | Si nous n' | ||
+ | === Résumons nous === | ||
+ | |||
+ | A ce stade, nous avons deux connexions TCP ouvertes : | ||
+ | |||
+ | * 192.168.0.10: | ||
+ | * 194.2.0.36: | ||
+ | |||
+ | 27 0.299444 194.2.0.36 | ||
+ | connection for file list. | ||
+ | |||
+ | Le serveur FTP répond 150, c'est à dire : « Statut de fichier vérifié, ouverture de canal de données en cours ». | ||
+ | |||
+ | 28 0.303502 194.2.0.36 | ||
+ | 29 0.305993 194.2.0.36 | ||
+ | 30 0.306052 192.168.0.10 | ||
+ | 31 0.306101 194.2.0.36 | ||
+ | |||
+ | Normalement, | ||
+ | |||
+ | La réponse 226 signifie : « Fermeture du canal de données. Service terminé ». | ||
+ | |||
+ | 32 0.306117 192.168.0.10 | ||
+ | 33 0.306470 194.2.0.36 | ||
+ | 34 0.307484 192.168.0.10 | ||
+ | 35 0.338378 194.2.0.36 | ||
+ | |||
+ | Comme c' | ||
+ | |||
+ | 36 0.457543 192.168.0.10 | ||
+ | 37 2.447889 192.168.0.10 | ||
+ | |||
+ | Nous sommes de nouveau sur le canal de commandes et le client FTP demande à changer de répertoire. CWD voulant dire : « Change Working Directory ». Nous allons dans le répertoire '' | ||
+ | |||
+ | * Nous permettre de vérifier que vous avez bien compris le mécanisme, parce que je ne vais pas tout répéter, | ||
+ | * permettre d' | ||
+ | |||
+ | 38 2.471233 194.2.0.36 | ||
+ | 39 2.473782 192.168.0.10 | ||
+ | 40 2.499085 194.2.0.36 | ||
+ | 41 2.502415 192.168.0.10 | ||
+ | 42 2.524624 194.2.0.36 | ||
+ | 43 2.527863 192.168.0.10 | ||
+ | 44 2.549182 194.2.0.36 | ||
+ | 45 2.551642 192.168.0.10 | ||
+ | 46 2.572805 194.2.0.36 | ||
+ | 47 2.572856 192.168.0.10 | ||
+ | 48 2.585185 194.2.0.36 | ||
+ | 49 2.593535 194.2.0.36 | ||
+ | |||
+ | Selon le même mécanisme que celui vu plus haut, un nouveau canal de données est ouvert, mais le client FTP utilise un nouveau port : 1177, cette fois-ci. C'est un détail qui a son importance... | ||
+ | |||
+ | En effet, dans le cas où nous avons beaucoup de fichiers à transférer, | ||
+ | |||
+ | 50 2.595535 194.2.0.36 | ||
+ | | ||
+ | 51 2.625058 194.2.0.36 | ||
+ | 52 2.627332 194.2.0.36 | ||
+ | 53 2.627375 192.168.0.10 | ||
+ | 54 2.629615 194.2.0.36 | ||
+ | 55 2.629654 192.168.0.10 | ||
+ | 56 2.630203 194.2.0.36 | ||
+ | 57 2.652599 194.2.0.36 | ||
+ | 58 2.652668 192.168.0.10 | ||
+ | 59 2.654073 192.168.0.10 | ||
+ | 60 2.700163 194.2.0.36 | ||
+ | |||
+ | Bien, nous n' | ||
+ | |||
+ | 87 11.063406 | ||
+ | ... | ||
+ | 95 11.177496 | ||
+ | ... | ||
+ | |||
+ | Et un grand saut plus loin : | ||
+ | |||
+ | 413 29.719734 192.168.0.10 | ||
+ | 414 29.741101 194.2.0.36 | ||
+ | is current directory. | ||
+ | |||
+ | Nous arrivons enfin dans le bon répertoire... | ||
+ | |||
+ | 415 29.912570 192.168.0.10 | ||
+ | 416 30.584219 192.168.0.10 | ||
+ | 417 30.605939 194.2.0.36 | ||
+ | 418 30.609380 192.168.0.10 | ||
+ | 419 30.635498 194.2.0.36 | ||
+ | 420 30.639387 192.168.0.10 | ||
+ | 421 30.660814 194.2.0.36 | ||
+ | 422 30.660867 192.168.0.10 | ||
+ | 423 30.676003 194.2.0.36 | ||
+ | 424 30.683263 194.2.0.36 | ||
+ | 425 30.684698 194.2.0.36 | ||
+ | connection for rfc765.txt (146641 bytes). | ||
+ | 426 30.685450 194.2.0.36 | ||
+ | 427 30.687400 194.2.0.36 | ||
+ | |||
+ | Nous ouvrons encore un nouveau canal de données, nous en sommes maintenant au port 1181, données de type A toujours (ASCII) et utilisons la commande RETR (Retrieve) pour transférer le fichier '' | ||
+ | |||
+ | Certains lecteurs à l'œil acéré auront remarqué que le port utilisé par le client FTP sur le canal de commande a changé depuis le début de la session. Pour une raison parasite, il y a eu une re-connexion au serveur à la fin de la transmission du catalogue de ''/ | ||
+ | |||
+ | 428 30.687446 192.168.0.10 | ||
+ | 429 30.710881 194.2.0.36 | ||
+ | 430 30.712372 194.2.0.36 | ||
+ | 431 30.712414 192.168.0.10 | ||
+ | ... | ||
+ | |||
+ | Les données commencent à venir, il y en a pour un moment. Nous nous retrouvons à la fin du fichier : | ||
+ | |||
+ | 614 33.613493 192.168.0.10 | ||
+ | 615 33.636771 194.2.0.36 | ||
+ | |||
+ | Voilà, c'est fini. nous arrêtons la transaction avec le serveur FTP : | ||
+ | |||
+ | 616 36.666211 192.168.0.10 | ||
+ | 617 36.686973 194.2.0.36 | ||
+ | 618 36.689259 194.2.0.36 | ||
+ | 619 36.689275 192.168.0.10 | ||
+ | 620 38.511841 192.168.0.10 | ||
+ | 621 38.530529 194.2.0.36 | ||
+ | 622 38.533514 194.2.0.36 | ||
+ | 623 38.533552 192.168.0.10 | ||
+ | |||
+ | Toutes les connexions TCP encore ouvertes sont fermées, y compris le canal de commande initialement ouvert (port 1175). | ||
+ | |||
+ | ===== Qu' | ||
+ | |||
+ | Déjà beaucoup de choses : | ||
+ | |||
+ | * nous avons mis en évidence la présence du canal de commande et du canal de données, placés sur des connexions TCP différentes, | ||
+ | * nous avons, dans ce cas de FTP en mode actif, observé que, pour la création du canal de données, le client FTP : | ||
+ | * indique au serveur un numéro de port ; | ||
+ | * se met à l' | ||
+ | * le serveur FTP va quant à lui, utiliser le port 20 pour ce canal de données et agir en client TCP.Ce détail est extrêmement important. Il explique la raison pour laquelle le FTP actif ne fonctionne pas correctement sur des filtres de paquets qui interdisent tout paquet SYN depuis le Net vers la zone protégée. Nous avons vu en effet qu' | ||
+ | * nous avons vu également quelques commandes FTP ainsi que quelques codes de réponses ;\\ | ||
+ | * enfin, nous avons vu un type de transfert, le type A, qui correspond à de l' | ||
+ | |||
+ | Bien qu'à ce niveau, si vous êtes toujours là, vous pouvez commencer à lire ces fameuses [[http:// | ||
Les bases de FTP: Dernière modification le: 01/01/1970 à 00:00 par