Aller au contenu

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 :

apt-get update

Pour l'installation du package « VsFTPd », il suffit d'exécuter la commande qui va télécharger, extraire et installer le package :

apt-get install vsftpd

La plupart du temps, les containers ne démarrent pas le service automatiquement.

service vsftpd start

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 :

apt-get install nano

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 :

mkdir /FTP /FTP/Infrastructure /FTP/Bonnes\ pratiques

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 :

useradd employe
passwd employe
usermod -d /FTP/ employe

Ouverture de fichier pour l'éditer :

nano /etc/vsftpd.conf

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.

chmod -R 555 /FTP

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…

Capture d'écran

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 !

Capture d'écran

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 !

Capture d'écran

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 :

Capture d'écran

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 :

Capture d'écran

Envoi d'un fichier de 50 Go en RAR en FTP avec VsFTPd:

Capture d'écran

Téléchargement d'un fichier en FTPS avec VsFTPd:

Capture d'écran

Téléchargement d'un fichier en FTP avec VsFTPd:

Capture d'écran

Capture d'écran

Envoi d'un fichier de 50 Go en RAR en FTP avec VsFTPd:

Capture d'écran

Téléchargement d'un fichier de 50 Go en RAR ProFTPD FTP:

Capture d'écran

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.