ProFTPd (Professional FTP Daemon) est un serveur FTP open source, principalement utilisé sous Unix/Linux, qui se distingue par :
Nous allons ici configurer un simple serveur FTPS (over SSL) sur Debian avec ProFTPd.
Ce serveur devra permettre la connexion (chrootée) des utilisateurs Linux dans leur répertoire de base, afin qu'ils ne puissent ni remonter vers la racine du système ni accéder à d'autres dossiers.
Se loguer en root
su -
Faire la mise à jour du catalogue de paquets
apt update
Installer ProFTPd
apt install proftpd-basic proftpd-mod-crypto -y
Générer un certificat SSL
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/proftpd.key \
-out /etc/ssl/certs/proftpd.crt \
-subj "/C=FR/ST=Nouvelle-Aquitaine/L=Pau/O=Afpa/OU=IT/CN=ftp.monserveur.fr/emailAddress=admin@monserveur.fr"
Rédiger le fichier de configuration de TLS
Voici le contenu de /etc/proftpd/tls.conf :
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
# Protocoles TLS autorisés (ici TLS 1.2 et TLS 1.3)
TLSProtocol TLSv1.2 TLSv1.3
# Emplacements du certificat et de la clé
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
# Suites de chiffrement recommandées
TLSCipherSuite HIGH:!aNULL:!MD5
# Options complémentaires
TLSOptions NoSessionReuseRequired
TLSVerifyClient off
TLSRequired on
</IfModule>
Activer le module TLS
sed -i 's/#LoadModule mod_tls.c/LoadModule mod_tls.c/' /etc/proftpd/modules.conf
(ou décommentez vous-même "#LoadModule mod_tls.c" dans le fichier /etc/proftpd/modules.conf
Configurer le fichier principal : /etc/proftpd/proftpd.conf
Voici le contenu complet
# Inclusion des modules DSO
Include /etc/proftpd/modules.conf
# IPv6 (à activer ou désactiver selon vos besoins)
UseIPv6 on
<IfModule mod_ident.c>
IdentLookups off
</IfModule>
ServerName "Debian"
ServerType standalone
DeferWelcome off
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
# Chrooter tous les utilisateurs (sauf root)
DefaultRoot ~ !root
# Port FTP standard
Port 21
# Définition de la plage de ports passifs
PassivePorts 60000 61000
# Configurer une adresse IP passive en cas de DNAT (i.e l'IP WAN du pare-feu)
# MasqueradeAddress 12.23.34.45
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>
MaxInstances 30
# L'utilisateur et le groupe sous lesquels ProFTPD s'exécute
User proftpd
Group nogroup
# Umask pour les fichiers et dossiers
Umask 022 022
AllowOverwrite on
# Ordre d'authentification : ici, on utilise PAM et l'authentification Unix
AuthOrder mod_auth_pam.c* mod_auth_unix.c
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
# Inclusion de la configuration TLS
Include /etc/proftpd/tls.conf
# Inclusion d'éventuelles configurations supplémentaires
Include /etc/proftpd/conf.d/
Relancer ProFTPd
systemctl restart proftpd
Vérifier le statut
systemctl status proftpd
Sur un client FTP (type FileZilla)
- initier une connexion en mode explicite avec :
Hôte : ftpes://IP-SERVEUR
Nom d'utilisateur : votre-utilisateur-linux
Mot de passe : son-mot-de-passe
Ne pas préciser de port.. Par défaut FileZilla se connectera au port 21.