Ne confondez pas FTPS (FTP Secure) et SFTP (SSH File Transfer Protocol). - FTPS est le protocole FTP classique auquel on ajoute une couche de chiffrement SSL/TLS. - SFTP est un protocole de transfert de fichiers entièrement différent, qui fonctionne sur la base de SSH. Ce tutoriel traite de FTPS.
Pourquoi utiliser FTPS ?
- Chiffrement : Protège les identifiants de connexion et les données transférées contre l'écoute sur le réseau.
- Conformité : Requis par de nombreuses normes de sécurité (PCI-DSS, etc.) pour le transfert de données sensibles.
- Authentification : Utilise des certificats SSL/TLS pour vérifier l'identité du serveur.
Prérequis
- Un serveur Linux (Ubuntu/Debian, CentOS/RHEL).
- Accès root ou privilèges sudo.
- Un pare-feu configuré sur le serveur.
Installation de vsftpd
Nous utiliserons vsftpd (Very Secure FTP Daemon), un serveur FTP populaire et sécurisé.
# Sur Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y vsftpd
# Sur CentOS / RHEL
sudo yum install -y vsftpd
Configuration de FTPS
Étape 1 : Créer un certificat SSL/TLS
Pour le chiffrement, nous avons besoin d'un certificat. Pour un environnement de production, utilisez un certificat d'une autorité de certification (comme Let's Encrypt). Pour ce guide, nous créons un certificat auto-signé valable un an.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem
Remplissez les informations demandées. Pour le "Common Name", vous pouvez utiliser le nom de domaine de votre serveur ou son adresse IP.
Étape 2 : Configurer vsftpd.conf
Sauvegardez le fichier de configuration original et modifiez-le.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
sudo nano /etc/vsftpd.conf
Assurez-vous que votre configuration ressemble à ceci, en adaptant si nécessaire :
# Désactiver les connexions anonymes
anonymous_enable=NO
# Autoriser les utilisateurs locaux à se connecter
local_enable=YES
# Permettre les commandes d'écriture (upload, delete, etc.)
write_enable=YES
# Enfermer les utilisateurs dans leur répertoire personnel (chroot)
chroot_local_user=YES
# Permettre l'écriture dans le répertoire chroot (nécessaire avec les versions récentes)
allow_writeable_chroot=YES
# --- Configuration FTPS ---
# Activer SSL
ssl_enable=YES
# Forcer les clients à utiliser SSL pour le transfert de données et la connexion
force_local_data_ssl=YES
force_local_logins_ssl=YES
# Utiliser des versions TLS sécurisées
ssl_tlsv1_2=YES
ssl_sslv3=NO
ssl_sslv2=NO
# Chemin vers notre certificat et notre clé (le même fichier pour notre certificat auto-signé)
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
# --- Configuration du mode passif ---
# Le mode passif est nécessaire pour passer les pare-feux et NAT
pasv_enable=YES
# Spécifier une plage de ports pour les connexions passives
pasv_min_port=30000
pasv_max_port=31000
Étape 3 : Configurer le pare-feu
Vous devez ouvrir les ports pour le contrôle FTP et pour la plage de ports passifs que vous avez définie.
# Pour UFW (Ubuntu/Debian)
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw status
# Pour firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload
Étape 4 : Redémarrer le service
sudo systemctl restart vsftpd
Votre serveur est maintenant configuré pour accepter des connexions FTPS sécurisées.
Créer un utilisateur FTP
Créez un utilisateur système standard. Il sera automatiquement un utilisateur FTP.
sudo adduser mon_utilisateur_ftp
# Suivez les instructions pour définir un mot de passe
Cet utilisateur sera confiné à son répertoire /home/mon_utilisateur_ftp lors de la connexion.
Test de la connexion
Utilisez un client FTP moderne comme FileZilla ou WinSCP.
- Protocole : FTP
- Hôte : l'adresse IP de votre serveur
- Chiffrement : Exiger FTP explicite sur TLS (ou "FTPES")
- Identifiant / Mot de passe : Ceux de l'utilisateur que vous venez de créer.
Comme vous utilisez un certificat auto-signé, le client affichera un avertissement de sécurité. C'est normal. Acceptez le certificat pour continuer.
Si la connexion échoue, les problèmes les plus courants sont : 1. Le pare-feu bloque les ports (notamment la plage passive). 2. Problème de permissions sur les fichiers de certificat. 3. Erreur de syntaxe dans `vsftpd.conf`. Vérifiez les logs de `vsftpd` (souvent dans
/var/log/vsftpd.log) et les logs d'authentification (/var/log/auth.log ou /var/log/secure).
Conclusion
La mise en place d'un serveur FTPS avec `vsftpd` est une étape cruciale pour sécuriser les transferts de fichiers. En forçant le chiffrement SSL/TLS, vous vous assurez que les données et les identifiants de vos utilisateurs sont protégés. La configuration est relativement simple et augmente considérablement le niveau de sécurité par rapport à un serveur FTP standard.