Activer TLS avec proFTPd sous CentOS 7

Installation et configuration du chiffrement TLS pour le serveur FTP proFTPD.

Dans son utilisation classique le protocole FTP n’est pas sécurisé car il n’est pas chiffré, les données et même le mot de passe de session circulent en clair. Ce rapide tutoriel va servir de guide pour mettre en place un chiffrement TLS avec le serveur FTP proFTPd sur une machine sous CentOS 7.

Création du certificat SSL pour TLS

Avec CentOS, nous allons créer le certificat sous /etc/pki/tls/certs/. Il suffit de répondre aux questions, la plus importante étant le Common name qui doit reflêter le hostname du serveur FTP :

$ cd /etc/pki/tls/certs/
$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout proftpd.pem -out proftpd.pem -days 365
Generating a 2048 bit RSA private key
..................................+++
.........+++
writing new private key to 'proftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
 -----
Country Name (2 letter code) [XX]:FR
State or Province Name (full name) []:Vosges
Locality Name (eg, city) [Default City]:Corcieux
Organization Name (eg, company) [Default Company Ltd]:Nom compagnie
Organizational Unit Name (eg, section) []:Nom section
Common Name (eg, your name or your server's hostname) []:feub.net
Email Address []:f@feub.net
$ sudo chmod 600 proftpd.pem

Le certificat étant créé, il faut l’ajouter à la configuration de proFTPd pour que celui-ci le prenne en compte.

$ sudo vim /etc/proftpd.conf

Décommenter ou ajouter les ignes ci-dessous :

PassivePorts                    6000    6100

TLSEngine on
TLSRequired on
TLSProtocol SSLv23
TLSRSACertificateFile /etc/pki/tls/certs/proftpd.pem
TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.pem
TLSCipherSuite ALL:!ADH:!DES
TLSOptions NoCertRequest
TLSVerifyClient off
TLSLog /var/log/proftpd/tls.log

Il n’ a plus qu’à redémarrer proFTPd :

$ sudo systemctl restart proftpd

Firewalld

Avant d’aller plus loin et de tester la connexion, il faut que le firewall accepte les connexions, pour firewalld, nous allons ouvrir les ports 6000 à 6100.

$ sudo firewall-cmd --add-port=6000-6100/tcp
$ sudo firewall-cmd --add-port=6000-6100/tcp --permanent

Test de la connexion chiffrée

Il est temps de tester la connexion chiffrée avec TLS. On peut faire un rapide test directement avec la commande OpenSSL :

$ openssl s_client -connect 127.0.0.1:21 -starttls ftp
CONNECTED(00000003)
depth=0 C = FR, ST = Vosges, L = Corcieux, O = Nom compagnie, OU = Nom section, CN = feub.net, emailAddress = f@feub.net
verify error:num=18:self signed certificate
verify return:1
depth=0 C = FR, ST = Vosges, L = Corcieux, O = Nom compagnie, OU = Nom section, CN = feub.net, emailAddress = f@feub.net
verify return:1
---
Certificate chain
0 s:/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
i:/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
---
Server certificate
-----BEGIN CERTIFICATE-----
MIID5TCCAs2gAwIBAgIJAOHJ/v8EqQsMMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
VQQGEwJGUjEPMA0GA1UECAwGVm9zZ2VzMREwDwYDVQQHDAhDb3JjaWV1eDERMA8G
A1UECgwIZmV1Yi5uZXQxETAPBgNBBAsMCGZldWIubmV0MRQwEgYDVQQDDAtyaG9s
YWxhLm5ldDEZMBcGCSqGSIb3DQEJARYKZkBmZXViLm5ldDAeFw0xNjA2MDMxMTMy
MDNaFw0xNzA2MDMxMTMyMDNaMIGIMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGVm9z
Z2VzMREwDwYDVQQHDAhDb3JjaWV1fDERMA8GA1UECgwIZmV1Yi5uZXQxETAPBgNV
BAsMCGZldWIubmV0MRQwEgYDVQQDDAtyaG9sYWxhLm5ldDEZMBcGCSqGSIb3DQEJ
ARYKZkBmZXViLm5ldDCCASIwDQYJKo4IhvcNAQEBBQADggEPADCCAQoCggEBAOUt
4PeAbcLALCLNeJ81BU/86uE0CFD+imc3b8ortE2/pL3ZoOz/nytLB4bKQEyLv9TN
NOgFd5WTCTf9A5CiPnmNpA+M3UxJ2W/eg7/Mka96I8B2uKikiCMd/tvxF+v5C3MV
9qMs7a9Y/s9FJuH+J5FuOq9vAs2G8KrIh1hp5LrxLoTYqJ9nHcW9yRn08mqhHSVI
TInBIcHRBZ3xgdtFOsDKLHkcNb6aIYwqIhwUc2fNlq3F/ms0NuSyO0wqr/1xfduE
5bfq9LcjssLtMEE6hTdsFYnODdtGbFarrsxZZPC5H3tjA+OY4h8xXlA4VR13VjrZ
e+DetkFVArTTlN1aTMkCAwEAAaNQME4wHQYDVR0OBBYEFJqVQi+IqvA+bNJ8AA8v
fboYM9oKMB8GA1UdIwQYMBaAFJqVQi+IqvA+bVosgesxfboYM9oKMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAC9Bjz02kNBUI3T03MfxuUoe0/sfOIf4
PUEzIzc1Qbnf/50OiFafaHXXYmVRmvbTp700Ct1dzoEQE4hUw/VMGUR3Ia+I/nRD
A6TXNgZWNdRNdr2Ji/Dx+iGZNtiamot6qbLYuBXWUs9lnjLxNmHCHrMy+anTxCBG
iGGy8JonFjXtXy6+Ru6HL1MF/bAvdjXQj/pcfiTbm+QOWATNaP1FKwDokYtYn64y
+y8XaJowTTFQ9SaqHjrJlK78isg5LMIa/x+E4KgpedrogbWXiGcurltookcWX/kU
J6HashitakarZJRYmtqDgp3zCCJpXu9AeeyEe6zngNRkS5yFSXw5FhF3FA=
-----END CERTIFICATE-----
subject=/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
issuer=/C=FR/ST=Vosges/L=Corcieux/O=Nom compagnie/OU=Nom section/CN=feub.net/emailAddress=f@feub.net
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 1567 bytes and written 391 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: 6076A52E51A1723E54897C2F8B07AFF0AD1135DAE2
Session-ID-ctx:
Master-Key: 68A81A1CFEABD619EBD6F58F86A201B00CAB4
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1464953971
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
220 FTP Server ready.

Tout semble fonctionner. Il suffit maintenant de configurer votre client FTP pour qu’il utilise TLS, avec FileZilla choisir Connexion FTP explicite sur TLS :

FileZilla - FTP explicite sur SSL
FileZilla – Connexion FTP explicite sur TLS

 

 

 

Lors de la connexion une fenêtre demandant d’accepter le nouveau certificat attend votre confirmation.

Le certificat SSL dans FileZilla
Le certificat SSL dans FileZilla

 

 

 

 

 

 

 

 

 

 

 

 

La connexion se poursuit :

Statut : Connexion établie, attente du message d'accueil...
Statut : Initialisation de TLS...
Statut : Vérification du certificat...
Statut : Connexion TLS établie.
Statut : Connecté
Statut : Récupération du contenu du dossier "/var/www/html"...
Statut : Contenu du dossier "/" affiché avec succès

Mission accomplie, nous sommes connectés en FTP en utilisant une couche de chiffrement TLS.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *