Diagrammes Ftp
1 - Présentation
Amélioration de l'introduction tirée de Wikipédia :
Le File Transfer Protocol (protocole de transfert de fichiers), ou FTP, est un protocole de communication dédié à l'échange informatique de fichiers sur un réseau TCP/IP. Il permet, depuis un ordinateur, de copier des fichiers depuis ou vers un autre ordinateur du réseau, d'administrer un site web, ou encore de supprimer ou modifier des fichiers sur cet ordinateur.
La variante sécurisée de FTP avec les protocoles SSL ou TLS s'appelle FTPS. A ne pas confondre avec SFTP, protocole de transfert de fichier via SSH.
FTP obéit à un modèle client-serveur, c'est-à-dire qu'une des deux parties, le client, envoie des requêtes auxquelles réagit l'autre, appelé serveur. En pratique, le serveur est un ordinateur sur lequel fonctionne un logiciel lui-même appelé serveur FTP, qui rend publique une arborescence de fichiers similaire à un système de fichiers Unix. Pour accéder à un serveur FTP, on utilise un logiciel client FTP (possédant une interface graphique ou en ligne de commande).
Le protocole, qui appartient à la couche session du modèle OSI et à la couche application du modèle ARPA, utilise une connexion TCP. Il peut s'utiliser de deux façons différentes :
- Mode actif: c'est le client FTP qui détermine le port de connexion à utiliser pour permettre le transfert des données. Ainsi, pour que l'échange des données puisse se faire, le serveur FTP initiera la connexion de son port de données (port 20) vers le port spécifié par le client. C'est le numéro de port précédent le port de contrôle. Donc pour un serveur qui écoute sur le port 10021, ce sera par défaut 10020. Cependant, si l'on compte se baser dessus pour mettre en place des règles de filtrage, il faut être conscient que le port source peut être différent, voire modifié en cours de route par un dispositif NAT. Le client devra alors configurer son pare-feu pour autoriser les nouvelles connexions entrantes afin que l'échange des données se fasse. Ce mode est donc moins sécurisé que le FTP passif pour le client. De plus il peut s'avérer problématique pour les utilisateurs essayant d'accéder à des serveurs FTP lorsqu'ils sont derrière une passerelle NAT. Vu la façon dont fonctionne la NAT, le serveur FTP initie la connexion de données en se connectant à l'adresse externe de la passerelle NAT sur le port choisi. La passerelle NAT n'ayant pas de correspondance pour le paquet reçu dans sa table d'état le paquet sera ignoré et ne sera pas délivré au client
- Mode passif: le serveur FTP détermine lui même le port de connexion à utiliser pour permettre le transfert des données (data connexion) et le communique au client. Dans le cas de l'existence d'un pare-feu devant le serveur FTP celui-ci devra être configuré pour autoriser la connexion de données. L'avantage de ce mode, est que le serveur FTP n'initie aucune connexion. Dans le cas des clients FTP sur un réseau local, ce mode est beaucoup plus sécurisé que le FTP en mode actif, car le pare-feu ne devra laisser passer que les flux sortant vers internet pour permettre aux clients d'échanger des données avec le serveur. C'est pour cette raison que ce mode est qualifié de firewall-friendly
2 - Diagrammes de connexions
Les deux diagrammes suivants ont pour but de mettre en évidence le suivi de connexion ip_conntrack pour ces 2 modes afin de mieux comprendre l'échange des données entre le serveur Ftp et un client, permettant ainsi de mettre en oeuvre des règles iptables pour un firewall.


Les diagrammes mettent en évidence l'utilisation de deux canaux bien distincts :
- control channel : elle permet au client et au serveur de s'échanger les commandes relatives au protocole, et aussi de s'identifier.
- data channel : comme son nom l'indique, elle est utilisée pour l'échange des données entre les deux postes. C'est sur la mise en place de ce canal que diffère le mode passif et le mode actif.
1 : Pour permettre le suivi de connexion Ftp sur un port autre que le port 21 pour le control channel, il est nécessaire de spécifier le port utilisé lors du chargement du module nf_conntrack_ftp de la manière suivante :
# modprobe nf_conntrack_ftp ports=21,10021
si vous voulez utiliser le port 10021 en plus du port standard 21.
Il est à noter que pour les anciens noyaux, les modules nf_conntrack_* doivent être remplacés par les modules ip_conntrack_*.
3 - Ressources
Les différentes RFCs :