Debian/Ubuntu: installation de Proftpd avec sftp et tls

Installation de base


Nous allons configurer un serveur ftp avec le support sftp et tls. Pour cela, nous allons installer les paquets suivants:

apt install proftpd proftpd-mod-crypto

Ensuite nous nous rendons dans le répertoire /etc/proftpd. Les fichiers de configuration sont très bien documentés, cependant, nous allons créer nos propres fichiers de configuration dans le répertoire conf.d.

Créons le fichier /etc/proftpd/conf.d/00-extra.conf:

ServerName "My FTP Server"
RequireValidShell on
AuthOrder mod_auth_pam.c* mod_auth_unix.c
DefaultRoot ~

Configuration du SFTP


Nous allons générer le fichier dhparams4096.pem (ou 2048 si vous le souhaitez), attention cela prend un certain temps !

openssl dhparam -out /etc/proftpd/dhparams4096.pem 4096

Passons maintenant au fichier /etc/proftpd/conf.d/01-sftp.conf:

LoadModule mod_sftp.c
LoadModule mod_sftp_pam.c
­<IfModule mod_sftp.c>
	<VirtualHost 0.0.0.0>
		SFTPEngine on
		Port 2233
		SFTPLog /var/log/proftpd/sftp.log

		# On utilise les même clefs ssh que celles du serveur openssh
		SFTPHostKey /etc/ssh/ssh_host_rsa_key
		SFTPHostKey /etc/ssh/ssh_host_dsa_key
		SFTPDHParamFile /etc/proftpd/dhparams4096.pem
		SFTPAuthMethods password
		RequireValidShell off
		SFTPCompression delayed
	</VirtualHost>
</IfModule>

Configuration du TLS


Pour pouvoir utiliser le TLS, nous devons disposer de certificats ssl. Soit vous disposez déjà de vos propres certificats (via letsencrypt par exemple), soit vous créez vos certificats auto-signés, c’est ce que nous allons faire ici:

openssl req -x509 -newkey rsa:4096 -sha256 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 3650

On modifie les droits sur ces fichiers:

chmod 600 /etc/ssl/private/proftpd.key
chmod 600 /etc/ssl/certs/proftpd.crt

Intéressons nous enfin à la configuration du TLS, pour cela, créons le fichier /etc/proftpd/conf.d/02-tls.conf:

LoadModule mod_tls.c
LoadModule mod_tls_fscache.c
LoadModule mod_tls_shmcache.c
LoadModule mod_tls_memcache.c

<IfModule mod_tls.c>
	TLSEngine on
	TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
	TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
	TLSLog /var/log/proftpd/tls.log
	TLSRequired on
	TLSOptions  EnableDiags NoSessionReuseRequired
	TLSVerifyClient off
</IfModule>

Modification SSH


Si vous avez déjà un serveur openssh qui tourne sur votre config, il est nécessaire de désactiver/commenter la ligne suivante dans le fichier /etc/ssh/sshd_config:

# override default of no subsystem
# Subsystem sftp /usr/lib/openssh/sftp-server

Redémarrage des services


Il ne reste plus qu’à redémarrer les services proftpd et ssh:

service ssh restart
service proftpd restart

et de contrôler le bon fonctionnement:

journalctl -xeu proftpd.service

Reste à tester cette configuration en sftp et ftp explicite sur TLS avec votre client ftp favori.