pure-ftpd, SSL, FTPS et Let’s Encrypt sur Debian

On va voir dans cet article comment activer le ftps sur Pure-ftpd.

Déjà, qu’est-ce que le ftps (à ne pas confondre avec le sftp) ? Tout comme le https est le http utilisant le protocole SSL (ou TLS), le ftps est le ftp utilisant le protocole SSL afin de chiffrer la connexion.

1) Configuration de Pure-ftpd

Lancer la commande suivante en root
echo 1 > /etc/pure-ftpd/conf/TLS

Ca va créer le fichier TLS et lui donner la valeur 1. La valeur 1 permet la connexion en ftps mais autorise la connexion ftp (sans SSL). Si vous mettez la valeur à 2, ça n’autorisera que la connexion en ftps.

On va également configurer la plage de port utilisée en mode passif. Lancer la commande suivante en root :
echo "54000 64000" > /etc/pure-ftpd/conf/PassivePortRange.

La plage de port utilisée pour le transfert de donnée sera donc entre le port 54000 et 64000 (pensez à ouvrir cette plage dans le pare-feu du serveur).

2) Création du certificat SSL

Il faut savoir que Pure-ftpd cherche le certificat SSL dans le répertoire /etc/ssl/private/pure-ftpd.pem et qu’il n’est pas possible de modifier ça.
Deux choix s’offrent alors à vous :

  • Soit vous récupérez le certificat de Let’s Encrypt pour le renommer et le copiez dans le répertoire /etc/ssl/private
  • Soit vous en créez un juste pour Pure-ftpd.

J’ai choisi la première solution histoire de ne pas avoir à gérer 36 certificats SSL.

Pour générer le certificat SSL, je vous renvoi vers cet article.

Il n’est malheureusement pas possible d’utiliser tel quel le fichier généré par Let’s Encrypt pour Pure-Ftpd car Pure-Ftpd a besoin d’un fichier contenant la clé privé et le certificat. Il va donc falloir concaténer les fichiers privkey.pem (la clé privé) et fullchain.pem (le certificat).

La commande pour concaténer ces deux fichiers en un seul et la suivante (à lancer en root) :

[pastacode lang=”bash” manual=”cat%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Fprivkey.pem%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Ffullchain.pem%20%3E%20%2Fetc%2Fssl%2Fprivate%2Fpure-ftpd.pem” message=”” highlight=”” provider=”manual”/]

Cette commande va créer le fichier pure-ftpd.pem dans le répertoire /etc/ssl/private. Ce fichier est la fusion des fichiers Let’s Encrypt privkey.pem et fullchain.pem. Pensez à remplacer “votredomaine” par le nom de domaine de votre certificat.
Merci à vm2014 pour cette astuce.

Comme je suis un fainéant et que je n’ai pas envie de devoir lancer cette commande tous les 3 mois (les certificats Let’s Encrypt ont une durée de validité de seulement 3 mois), on va modifier le script de renouvellement du certificat Let’s Encrypt (voir ici pour créer ce script).

Ouvrez le fichier script_letsencrypt.sh. Il devrait ressembler à ça (avec le bon nom de domaine et le bon user) :

[pastacode lang=”bash” manual=”%23!%2Fbin%2Fsh%0A%0A%23V%C3%A9rification%20de%20l’expiration%20du%20certificat%20SSL%20de%20memodugeek.info%0A%0Aif%20!%20openssl%20×509%20-checkend%2086400%20-in%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Ffullchain.pem%3B%20%23Si%20le%20certificat%20expire%20d’ici%2024h%20(86400%20secondes)%0Athen%0Asystemctl%20stop%20apache2.service%0A%2Fhome%2Ffate%2Fcertbot%2Fcertbot-auto%20certonly%20–config%20%2Fhome%2Ffate%2Flets_encrypt.ini%0Asystemctl%20start%20apache2.service%0Afi” message=”” highlight=”” provider=”manual”/]

On va donc rajouter la commande cat et rajouter une ligne pour redémarrer le service pure-ftpd. Ca va donner ceci :

[pastacode lang=”bash” manual=”%0A%23!%2Fbin%2Fsh%0A%0A%23V%C3%A9rification%20de%20l’expiration%20du%20certificat%20SSL%20de%20memodugeek.info…%0A%0Aif%20!%20openssl%20×509%20-checkend%2086400%20-in%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Ffullchain.pem%3B%20%23Si%20le%20certificat%20expire%20d’ici%2024h%20(86400%20secondes)%0Athen%0Asystemctl%20stop%20apache2.service%0A%2Fhome%2Ffate%2Fcertbot%2Fcertbot-auto%20certonly%20–config%20%2Fhome%2Ffate%2Flets_encrypt.ini%0Acat%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Fprivkey.pem%20%2Fetc%2Fletsencrypt%2Flive%2Fvotredomaine%2Ffullchain.pem%20%3E%20%2Fetc%2Fssl%2Fprivate%2Fpure-ftpd.pem%0Asystemctl%20restart%20pure-ftpd-mysql.service%0Asystemctl%20start%20apache2.service%0Afi%0A” message=”” highlight=”” provider=”manual”/]

Le fichier concaténé sera maintenant créé après chaque renouvellement du certificat Let’s Encrypt.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.