Nous allons voir dans cet article comment installer le serveur de transfert de fichiers ProFTPD avec le TLS activé et comment utiliser un certificat Letsencrypt pour ce besoin.
L’installation est ici faite sur une distribution GNU/Linux Ubuntu 18.04 et ne devrait guère différer pour toutes les dérivées de Debian.

Commençons par installer ProFTPD avec la commande suivante :

sudo apt install proftpd-basic

Au cours de l’installation, dpkg va vous demander si vous souhaitez faire fonctionner proftpd avec inetd ou en standalone. Choisissez standalone

Ensuite, éditez le fichier de configuration principal /etc/proftpd/proftpd.conf et décommentez la ligne suivante :

Include /etc/proftpd/tls.conf

Je ne détaille pas ici la configuration de proftpd, vous pouvez trouver la liste des directives de configuration dans la documentation de proftpd ou plus digeste des exemples et explications par exemple sur le wiki d’ubbuntu-fr

Maintenant, il faut éditer le fichier de configuration tls que l’on vient d’inclure /etc/proftpd/tls.conf afin d’avoir les lignes suivantes :

TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRequired on
TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired
TLSVerifyClient off

Il va falloir ajouter à ce fichier les directives indiquant l’emplacement des fichiers de certificat et clé de letsencrypt.
Pour cela nous pouvons utiliser le certificat du domaine du site web hébergé sur le serveur, ou obtenir un certificat pour un sous domaine dédié au serveur ftp en utilisant une des méthodes décrites dans la documentation de certbot

Donc on rajoute, une fois le certificat obtenu, les lignes suivantes à /etc/proftpd/tls.conf :

TLSRSACertificateFile      /etc/letsencrypt/live/[your domain]/cert.pem
TLSRSACertificateKeyFile   /etc/letsencrypt/live/[your domain]/privkey.pem
TLSCACertificateFile       /etc/letsencrypt/live/[your domain]/chain.pem

En remplaçant [your domain] par votre nom de domaine choisi

Il faut maintenant des utilisateurs pour ce serveur FTP. Il y a plusieurs méthodes : utilisateurs stockés en base de données, LDAP, utilisateurs unix (pour les quels on préférera avoir la directive DefaultRoot ~ activée pour chrooter les utilisateurs dans leurs home) ou stockage dans un fichier.
Je ne vais pas développer car ce n’est pas le sujet ici, j’utilise personnellement la dernière.
On veille à bien inclure ce fichier à la configuration dans /etc/proftpd/proftpd.conf :

# auth file path
AuthUserFile    /etc/proftpd.passwd

Puis on peut créer un utilisateur avec l’utilitaire ftpasswd :

sudo ftpasswd --passwd --name=[username] --uid=33 --home=[/full_path/to/ftproot] --shell=/bin/false --file=/etc/proftpd.passwd

Remplacez [username] par le nom d’utilisateur choisi, et [/full_path/to/ftproot] par le chemin absolu vers le répertoire racine choisi pour cet utilisateur.
NB : J’utilise ici l’utilisateur et groupe d’id 33 qui correspond à www-data car il s’agit d’un site web et que le serveur web à besoin d’avoir accès en écriture. Plus d’infos dans la documentation de ftpasswd

Enfin, pour que toutes ces modifications soient prises en compte, il faut redémarrer proFTPD :

systemctl restart proftpd

Pour s’assurer de son démarrage au boot de la machine :

systemctl enable proftpd

Et pour vérifier son état :

systemctl status proftpd

On peut maintenant se connecter au serveur ProFTPD avec TLS à l’aide du client FTP Filezilla (sudo apt install filezilla -y si vous ne l’avez pas déjà).
On ouvre ensuite les festionnaire de sites pour y ajouter notre site avec nos informations de connexion.

Capture gestionnaire de sites Filezilla

Et voilà, transférez bien et en toute sécurité 😉