Recherche des méthodes qui peuvent être utilisées
Pour pouvoir installer mon service FTP, j’ai donc commencé par chercher les méthodes disponibles. Je connaissais l’existence du daemon « ProFTPD » que j’avais déjà utilisé dans d'autres projets nécessitant un accès FTP.
Je me dirige donc vers la solution de « VsFTPd ».
- « VsFTPd » est un service qui permet de créer et de configurer son propre serveur FTP. Il est connu pour la sécurité de sa conception.
Informations sur le package « VsFTPd »
Nom | VsFTPd |
---|---|
Dernière version | 3.0.3-13build1 |
Auteur | Keng-Yu Lin |
Service | Serveur FTP(S) |
Lien du package (Ubuntu) | https://packages.ubuntu.com/impish/vsftpd |
Avantages par rapport à d'autres services
- Pour moi, la personnalisation et la configuration de VsFTPd sont plus simples que celles des autres. Par exemple, avec « ProFTPD », la configuration est moins simple à comprendre. Ici, les actions de configuration sont claires.
- Il est assez léger. Je ferai par la suite des comparaisons de rapidité de transfert entre différents services pour valider cette qualité.
- La sécurisation de VsFTPd a été particulièrement mise en avant dans toutes les documentations techniques. J'ai également cherché par moi-même des résultats qui pourraient prouver ceci. Je me suis rendu sur un site qui référence toutes les alertes de sécurité des packages, et j'ai obtenu ce résultat:
Nombre d’alertes de sécurité | Service FTP |
---|---|
155 | ProFTPD |
36 | VsFTPd |
29 | Pure-FTPD |
Source: https://lwn.net/Search/DoSearch
Mise en place de mon infrastructure de travail
Pour simplifier le déploiement du service, j’ai décidé de mettre en place un serveur PROXMOX sur ma machine connectée à mon réseau local.
Pour mettre dans le contexte de mon réseau local, il est composé des éléments suivants:
Emplacement et utilisation | Référence | Adresse réseau |
---|---|---|
Ordinateur client sous Windows 11 avec le client WinSCP, utilisé pour la configuration et l'accès au serveur FTP | 192.168.1.42 Dynamique | |
Serveur qui fait office de plateforme de virtualisation pour la machine virtuelle | HP Proliant DL360e G8 | 192.168.1.124 Static |
Machine virtuelle sous Ubuntu 21.04 (KVM pour utiliser Docker par la suite) | 192.168.1.28 Static | |
Routeur Internet | Livebox V4 (Fibre) | 192.168.1.1 Passerelle |
Hub TP-LINK | SG108 | |
Catégorie du câblage (Pour avoir une référence pour le benchmark de vitesse des services) | CAT6a |
Pourquoi une IP statique et pas dynamique ?
Par exemple, dans un cadre d'entreprise, nous allons configurer l'ordinateur des employés sur cette IP. Si jamais elle venait à changer, le service FTP ne serait plus accessible.
Création des containers de test sous Ubuntu
Pour pouvoir tester plus facilement les deux principaux services FTP, j'ai décidé de créer plusieurs instances sur la même machine et de pouvoir router les ports de chaque service sans gêner ceux de l'hôte.
Pour le « VsFTPd », le port 20 sera redirigé vers le port 1001 et le port 21 sur le port 1001. Pour le service « ProFTPD », le port 20 -> 2000 et le port 21 -> 2001.
Je suis donc parti sur une image Ubuntu pour Docker.
Commandes pour la création des deux containers :
docker run --name VsFTPd -p 1000:21 -p 1001:20 -it ubuntu
docker run --name ProFTPD -p 2000:21 -p 2001:20 -it ubuntu
Installation des services par étape
Pour commencer, il faut généralement faire les mises à jour des dépôts pour pouvoir installer les packages s'ils n'ont pas été faits à l'installation. Pour cela, nous devons simplement lancer la commande :
Pour l'installation du package « VsFTPd », il suffit d'exécuter la commande qui va télécharger, extraire et installer le package :
La plupart du temps, les containers ne démarrent pas le service automatiquement.
La manipulation pour le service « ProFTPD » est la même, il suffit juste de remplacer « vsftpd » par « proftpd ».
Configuration du service VsFTPd
Pour pouvoir éditer le fichier de configuration, nous allons avoir besoin d'un éditeur de fichier en CLI. Plusieurs existent, par exemple, vim, nano. Il sera donc à installer, pour ma part, ou ils sont déjà installés par défaut sur Ubuntu 20 à ma connaissance.
Installation de l'éditeur de fichier :
Le fichier de configuration de VsFTPd est situé dans « /etc/vsftpd.conf ».
Création des dossiers pour le partage des documentations de Kaspersky et Eaton :
Les deux dossiers seront donc à la racine dans le dossier FTP.
Ici, je vais créer l'utilisateur « employe », définir un mot de passe et changer le répertoire par défaut :
Ouverture de fichier pour l'éditer :
Configuration de VsFTPd
chroot_local_user=no
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd.chroot_list
utf8_filesystem=yes
Cette configuration permettra que l'accès au dossier « /FTP » ne peut pas remonter à la racine de la machine.
Le fichier « vsftpd.chroot_list » permet de donner l'accès de login à l'utilisateur, c'est simplement la liste avec le nom d'utilisateur.
UTF8 permet le transfert avec des caractères FTP. J'ai déjà eu des problèmes avec ProFTPD où le nom contenait des caractères non pris en compte et qu'il devenait un chemin de dossier, par exemple.
J'ai aussi modifié les droits des dossiers et fichiers pour ne pas ajouter ou supprimer les fichiers mais seulement les ouvrir.
Le format « 555 » donne l'accès de lecture et d'exécution à l'utilisateur, au groupe et à tout autre utilisateur.
Vsftpd et les problèmes
Pour ma part, le FTP a fonctionné en mode « Active ». D'après mes recherches, le FTP en mode « Passive » va ouvrir un port aléatoire, vu que mon container ne les avait pas, je ne pouvais pas accéder dans ce mode. J'ai même essayé d'ouvrir une plage de port sur le container, mais rien ne marche. Cependant, en mode console client sous Windows, cela marche bien car il est en connexion « Active ».
Les permissions des documentations
Pour pouvoir uploader les fichiers de documentations, j'ai donc dû changer la configuration et les permissions des dossiers par « 755 » qui donne accès en écriture à l'utilisateur.
Après des heures à me battre avec les permissions et VsFTPd, j'ai enfin réussi à uploader les 4 documentations…
Sécurisation du serveur FTP
Pour pouvoir cacher les identifiants de connexion aux potentielles personnes malveillantes, il sera de mon ordre de générer un certificat auto-signé et de l'installer sur Vsftpd pour pouvoir les cacher.
Pour voir le bon fonctionnement du certificat, je vais effectuer une capture de trame sur le réseau et un filtre FTP dans Wireshark pour trouver le mot de passe.
Après avoir capturé pendant l'authentification FTP, je me suis rendu compte que j'utilisais le port 1001 et que le filtre FTP ne fonctionne que sur le port 21. J'ai donc changé cela dans les paramètres de Wireshark et j'ai pu récupérer le mot de passe en clair !
Génération du certificat
Nous allons donc utiliser OpenSSL pour pouvoir générer un certificat auto-signé. Installation sur le container :
apt-get install openssl
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out vsftp-certificate.crt -keyout vsftp.key
- Le « x509 » est un format de certifications publique.
- « Days » permet de choisir le temps d'expiration du certificat.
- RSA :2048 est la taille du chiffrement
- SHA256 qui est un type de chiffrement
- Et les deux autres arguments permettent de spécifier les fichiers de sortie.
OpenSSL demandera quelques informations pour le certificat comme la ville, le nom de l'entreprise, etc...
Je me retrouve donc avec 2 fichiers
- vsftp.key
- vsftp-certificate.crt
Configuration de VsFTPd pour le SSL :
rsa_cert_file=/etc/vsftpd/vsftp-certificate.crt
rsa_private_key_file=/etc/vsftpd/vsftp.key
ssl_enable=YES
Vsftpd a juste à aller chercher le certificat et la clé pour pouvoir utiliser le SSL. Je pourrais aussi forcer le SSL, sur Filezilla, il va le faire automatiquement.
Test du bon fonctionnement du certificat
Quand je me suis connecté pour la première fois, il m'a été demandé d'accepter le certificat qui est auto-signé donc inconnu !
Conclusion
A ce stade, tout le serveur FTP ou FTPS est fonctionnel, que ce soit pour le téléchargement des documents ou du certificat SSL qui cache bien les identifiants de connexion.
Pour preuve, voici quelques captures.
Authentification avec Filezilla :
On peut bien observer qu'il se connecte au serveur 192.168.1.28 qui est l'IP de la machine virtuelle où est le container et sur le port 1001 qui est routé vers le port 21 du service FTP.
Il va bien récupérer son dossier racine qui est /FTP sans avoir accès aux fichiers racine de la machine.
Test de vitesse du service VsFTPd et ProFTPD
Envoi d'un fichier de 50 Go en RAR en FTPS avec VsFTPd :
Envoi d'un fichier de 50 Go en RAR en FTP avec VsFTPd:
Téléchargement d'un fichier en FTPS avec VsFTPd:
Téléchargement d'un fichier en FTP avec VsFTPd:
Envoi d'un fichier de 50 Go en RAR en FTP avec VsFTPd:
Téléchargement d'un fichier de 50 Go en RAR ProFTPD FTP:
Service | Upload | Download | SSL |
---|---|---|---|
VsFTPD | 30 Mib/s | 36 Mbi/s | OUI |
VsFTPD | 112 Mib/s | 112 Mbi/s | NON |
ProFTPD | 100,5 Mib/s | 111 Mbi/s | NON |
Bien sûr, les tests devraient être effectués plusieurs fois pour faire une moyenne et obtenir des résultats corrects.