Pur-FTPd est un serveur FTP open-source gratuit conçu dans un souci de sécurité. Dans ce didacticiel, nous allons apprendre à configurer un serveur FTP sur Debian 10 avec Pure-FTPd et à appliquer le cryptage TLS.
Fonctionnalités Pure-FTPd :
- Il prend en charge le cryptage SSL/TLS et ainsi les mots de passe et les commandes peuvent être protégés.
- Il peut fonctionner sur la plupart des systèmes de type Unix :Linux, BSD, Solaris, Darwin, HPUX, AIX et même iPhone.
- Disponible en 21 langues
- Vous permet de surveiller les sessions actives.
- Prend en charge un système de quota virtuel.
- Et bien plus encore
Pour une liste complète des fonctionnalités, rendez-vous sur le site officiel de Pure-FTPd.
Étape 1 :Installez Pure-FTPd sur le serveur Debian 10
Il se trouve dans le référentiel de logiciels, lancez donc la commande suivante pour installer le serveur FTP.
sudo apt install pure-ftpd
Une fois installé, Pure-FTPd sera automatiquement démarré, comme on peut le voir avec cette commande :
systemctl status pure-ftpd
Sortie :
● pure-ftpd.service Loaded: loaded (/etc/init.d/pure-ftpd; generated) Active: active (running) since Wed 2021-06-16 13:15:52 UTC; 23s ago Docs: man:systemd-sysv-generator(8) Tasks: 1 (limit: 558) Memory: 972.0K CGroup: /system.slice/pure-ftpd.service └─9223 pure-ftpd (SERVER)
S'il ne fonctionne pas, lancez-le avec :
sudo systemctl start pure-ftpd
Et il écoute sur le port TCP 21, qui est le port de contrôle , comme on peut le voir avec
sudo ss -lnpt | grep pure-ftpd
L'autre port est le port de données (port TCP 20), qui sera utilisé lorsqu'un utilisateur transfère des fichiers via FTP.
L'accès anonyme est désactivé par défaut. À partir de maintenant, vous pouvez utiliser votre compte système pour vous connecter, mais le FTP en texte brut n'est pas sécurisé et est fortement déconseillé. Pour avoir un serveur FTP sécurisé, nous devons chiffrer la communication avec TLS.
Étape 2 :Appliquer le chiffrement TLS
Pour activer à la fois le cryptage en texte brut et TLS, exécutez la commande suivante, qui crée le /etc/pure-ftpd/conf/TLS
fichier et mettez le numéro 1 dans le fichier.
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
Mais il est recommandé de désactiver le texte brut et d'utiliser uniquement le cryptage TLS, alors mettez plutôt le numéro 2 dans le fichier.
echo 2 | sudo tee /etc/pure-ftpd/conf/TLS
Maintenant que nous avons appliqué TLS, nous devons obtenir un certificat TLS valide. Un certificat auto-signé n'est pas recommandé car les utilisateurs verront un message d'avertissement comme la capture d'écran ci-dessous.
Étape 3 :Obtenir un certificat TLS de confiance auprès de Let's Encrypt
Exécutez la commande suivante pour installer le client Let's Encrypt (certbot) à partir du référentiel Debian 10 par défaut.
sudo apt install certbot
Je recommande d'utiliser le standalone
ou webroot
plugin pour obtenir le certificat TLS pour Pure-FTPd.
Plug-in autonome
S'il n'y a pas de serveur Web en cours d'exécution sur votre serveur Debian 10, vous pouvez utiliser le plugin autonome. Exécutez la commande suivante. N'oubliez pas de définir un enregistrement DNS A pour votre sous-domaine.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com
Où :
certonly
:obtenez un certificat, mais ne l'installez pas.--standalone
:Utilisez le plugin autonome pour obtenir un certificat--preferred-challenges http
:Effectuez le défi http-01 pour valider notre domaine, qui utilisera le port 80.--agree-tos
:Acceptez les conditions d'utilisation de Let's Encrypt.--email
:L'adresse e-mail est utilisée pour l'enregistrement et la récupération du compte.-d
:Spécifiez votre nom de domaine.
Comme vous pouvez le voir sur la capture d'écran suivante, j'ai réussi à obtenir le certificat.
Utilisation du plug-in Webroot
Si votre serveur Debian 10 a un serveur Web, c'est une bonne idée d'utiliser le plugin webroot pour obtenir un certificat car le plugin webroot fonctionne avec pratiquement tous les serveurs web et nous n'avons pas besoin d'installer le certificat sur le serveur web.
Tout d'abord, vous devez créer un hôte virtuel pour ftp.example.com
.
Apache
Si vous utilisez Apache, alors
sudo nano /etc/apache2/sites-available/ftp.example.com.conf
Et collez les lignes suivantes dans le fichier.
<VirtualHost *:80> ServerName ftp.example.com DocumentRoot /var/www/Pure-FTPd </VirtualHost>
Enregistrez et fermez le fichier. Créez ensuite le répertoire racine Web.
sudo mkdir /var/www/Pure-FTPd
Définissez www-data (utilisateur Apache) comme propriétaire de la racine Web.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Activez cet hôte virtuel.
sudo a2ensite ftp.example.com
Rechargez Apache pour que les modifications prennent effet.
sudo systemctl reload apache2
Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plug-in Webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Nginx
Si vous utilisez Nginx, alors
sudo nano /etc/nginx/conf.d/ftp.example.com.conf
Collez les lignes suivantes dans le fichier.
server { listen 80; listen [::]:80; server_name ftp.example.com; root /var/www/Pure-FTPd/; location ~ /.well-known/acme-challenge { allow all; } }
Enregistrez et fermez le fichier. Créez ensuite le répertoire racine Web.
sudo mkdir -p /var/www/Pure-FTPd
Définissez www-data (utilisateur Nginx) comme propriétaire de la racine Web.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Rechargez Nginx pour que les modifications prennent effet.
sudo systemctl reload nginx
Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plug-in Webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Étape 4 :Installez le certificat
Pure-FTPd nécessite que le certificat et la clé privée soient combinés dans un seul fichier nommé pure-ftpd.pem
et stocké sous /etc/ssl/private/
répertoire.
Passez au /etc/letsencrypt/live/ftp.example.com/
répertoire.
sudo su - cd /etc/letsencrypt/live/ftp.example.com/
Vous pouvez utiliser cat
commande pour combiner deux fichiers en un seul comme ci-dessous.
cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem
Assurez-vous que seul l'utilisateur root peut lire le fichier.
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
Nous devons générer le paramètre Diffie-Hellman avec :
sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096
Si votre serveur a un seul cœur de processeur, cela va prendre beaucoup de temps (environ 10 minutes).
Une fois cela fait, redémarrez Pure-FTPd.
sudo systemctl restart pure-ftpd
Vérifiez l'état pour voir s'il est en cours d'exécution.
systemctl status pure-ftpd
Vous pouvez maintenant vous connecter à votre serveur FTP via TLS.
Étape 5 :Ouvrir les ports FTP dans le pare-feu
Si vous utilisez le pare-feu UFW, exécutez la commande suivante pour ouvrir les ports TCP 20 et 21.
sudo ufw allow 20,21/tcp
Étape 6 :Connectez-vous au serveur FTP
Si vous utilisez Nautilus gestionnaire de fichiers pour se connecter au serveur FTP via le texte brut ftp://
protocole
La connexion sera refusée.
Au lieu de ftp://
, vous devez utiliser ftps://
.
Par défaut, les utilisateurs FTP seront amenés au /
répertoire racine sur le serveur.
Veuillez noter que Filezilla ne fait confiance à aucun certificat (auto-signé ou signé par une autorité de certification) par défaut. Les utilisateurs doivent choisir de faire confiance au certificat pour eux-mêmes.
Avertissement de certificat inconnu de FileZilla
Et vous devez utiliser le protocole FTP explicite TLS (ftpes://ftp.example.com
) dans Filezilla.
Certificat TLS à renouvellement automatique
Vous pouvez créer une tâche Cron pour renouveler automatiquement le certificat TLS. Ouvrez simplement le fichier crontab de l'utilisateur root.
sudo crontab -e
Ajoutez la ligne suivante au bas du fichier.
@daily certbot renew --quiet && cd /etc/letsencrypt/live/ftp.example.com/ && cat fullchain.pem privkey.pem | tee /etc/ssl/private/pure-ftpd.pem && systemctl reload pure-ftpd
Il faut recharger pure-ftpd
pour lui faire récupérer le nouveau certificat et la clé privée.