Configuration de serveur FTPS dans Debian

Configuration de serveur FTPS dans Debian

Déployer un serveur FTPS (vsftpd) — Debian (accès IP restreint & utilisateur tom)

Serveur FTPS (vsftpd) sur Debian — Accès limité à une IP & utilisateur tom

Procédure pas-à-pas : installation, TLS, confinement (chroot), liste blanche utilisateur, pare-feu (UFW), et tests WinSCP & FileZilla.

Variables à remplacer : <IP_AUTORISEE> (poste autorisé), <IP_SERVEUR> (IP du serveur Debian), <IP_PUBLIQUE_SERVEUR> (si derrière NAT).

1) Prérequis Debian 12/13

  • Un serveur Debian avec droits sudo ou accès root.
  • Nom d’utilisateur souhaité : tom.
  • Adresse IP cliente autorisée : <IP_AUTORISEE>.
  • Ports sortants ouverts côté client, et forwards corrects si NAT côté serveur.

2) Installation des paquets

Shell — root ou sudo
sudo apt update && sudo apt -y upgrade
sudo apt -y install vsftpd openssl ufw

3) Créer l’utilisateur tom & préparer son arborescence FTPS

Le dossier racine visible en FTPS sera /home/tom/ftp, non-modifiable, avec un sous-dossier upload/ pour écrire.

Shell
sudo adduser tom
sudo mkdir -p /home/tom/ftp/upload
sudo chown -R tom:tom /home/tom/ftp
sudo chmod 550 /home/tom/ftp
sudo chmod 750 /home/tom/ftp/upload

Pourquoi ces droits ? vsftpd refuse un chroot si le répertoire racine est modifiable par l’utilisateur. chmod 550 sur /home/tom/ftp corrige cela.

4) Générer un certificat TLS (auto-signé)

Pour la production, privilégie Let’s Encrypt. Ici on crée un certificat unique clé+cert :

Shell
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/vsftpd.pem \
  -out    /etc/ssl/private/vsftpd.pem \
  -subj "/C=CA/ST=QC/L=Montreal/O=FTPS/OU=IT/CN=$(hostname -f)"
sudo chmod 600 /etc/ssl/private/vsftpd.pem

5) Configurer vsftpd pour FTPS (TLS explicite) + confinement

Sauvegarde du fichier d’origine
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

Remplace le contenu de /etc/vsftpd.conf par :

/etc/vsftpd.conf
listen=YES
listen_ipv6=NO

# Accès & droits
anonymous_enable=NO
local_enable=YES
write_enable=YES

# Enfermement des utilisateurs locaux dans leur HOME
chroot_local_user=YES

# Racine FTP des utilisateurs (ici tom) : /home/<user>/ftp
user_sub_token=$USER
local_root=/home/$USER/ftp

# Restreindre aux utilisateurs listés (whitelist)
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

# FTPS (FTP explicite via AUTH TLS) — on force TLS pour login & données
ssl_enable=YES
require_ssl_reuse=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem

# Protocoles TLS recommandés
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
ssl_tlsv1_1=NO
ssl_tlsv1_2=YES
ssl_tlsv1_3=YES

# Mode passif (nécessaire derrière NAT/pare-feu)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
# Si le serveur est derrière un NAT, décommente et renseigne l'IP publique :
# pasv_address=<IP_PUBLIQUE_SERVEUR>

# Bannière (optionnel)
ftpd_banner=Bienvenue sur le serveur FTPS.
Appliquer la configuration
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd

6) Limiter l’accès à l’unique compte tom (liste blanche)

Avec userlist_deny=NO, seuls les utilisateurs listés dans /etc/vsftpd.userlist peuvent se connecter.

Shell
echo "tom" | sudo tee /etc/vsftpd.userlist

7) Pare-feu : autoriser uniquement <IP_AUTORISEE>

On autorise le port de contrôle 21/tcp et la plage passive 40000–40100/tcp pour la seule IP cliente autorisée.

UFW (recommandé)
sudo ufw allow from <IP_AUTORISEE> to any port 21 proto tcp
sudo ufw allow from <IP_AUTORISEE> to any port 40000:40100 proto tcp
sudo ufw default deny incoming
sudo ufw enable
sudo ufw status verbose

Alternative si tu utilises iptables (à adapter/persister selon ta stack) :

iptables (exemple)
sudo iptables -A INPUT -p tcp -s <IP_AUTORISEE> --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp -s <IP_AUTORISEE> --dport 40000:40100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j DROP
sudo iptables -A INPUT -p tcp --dport 40000:40100 -j DROP

8) Si le serveur est derrière un NAT

  • Ouvre/forwarde vers le serveur 21/tcp et 40000–40100/tcp.
  • Renseigne pasv_address=<IP_PUBLIQUE_SERVEUR> dans /etc/vsftpd.conf.
  • Redémarre : systemctl restart vsftpd.

9) Tests — WinSCP & FileZilla

Test avec WinSCP (Windows)

  1. Télécharge et installe depuis winscp.net.
  2. Nouvelle session :
    • Protocole : FTP
    • Chiffrement : FTP explicite sur TLS/SSL
    • Hôte : <IP_SERVEUR>, Port : 21
    • Utilisateur : tom, Mot de passe : (celui créé)
  3. Accepte le certificat TLS (auto-signé) au premier essai.
  4. Vérifie :
    • Accès au répertoire /home/tom/ftp.
    • Upload possible dans /home/tom/ftp/upload.
    • Impossible de remonter au-dessus du chroot.

Test avec FileZilla (Windows/Linux/macOS)

  1. Installe depuis filezilla-project.org.
  2. Gestionnaire de sites → Nouveau site :
    • Protocole : FTP
    • Chiffrement : Utiliser FTP explicite sur TLS si disponible
    • Hôte : <IP_SERVEUR>, Port : 21
    • Type d’authentification : Normale
    • Utilisateur : tom, Mot de passe : (celui créé)
  3. Accepte l’avertissement du certificat TLS.
  4. Vérifie les mêmes points que pour WinSCP.
Test rapide en ligne de commande (curl) — FTPS explicite
curl -v --ssl --ftp-ssl --user tom ftp://<IP_SERVEUR>/

10) Vérifications & Dépannage

Statut du service
systemctl status vsftpd
Logs utiles
sudo journalctl -u vsftpd -e
sudo tail -f /var/log/auth.log
  • Échecs TLS « reuse » : require_ssl_reuse=NO est déjà configuré.
  • Connexion bloquée : vérifie UFW/iptables (seule <IP_AUTORISEE> doit passer).
  • Transferts qui stagnent : ports passifs ouverts (pare-feu) + pasv_address si NAT.
  • Erreur chroot : assure-toi que /home/tom/ftp n’est pas modifiable par tom (chmod 550).

11) Résumé sécurité

  • FTP en clair désactivé — TLS obligatoire pour login & données.
  • Liste blanche : seul l’utilisateur tom est autorisé.
  • Confinement : chroot_local_user=YES.
  • Pare-feu restrictif : accès depuis <IP_AUTORISEE> uniquement.
  • Ports passifs bornés et documentés (40000–40100/TCP).
  • Certificat TLS dédié (Let’s Encrypt recommandé en prod).

© 2025 — Procédure FTPS (vsftpd) Debian — Accès IP restreint & utilisateur tom.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *