Postfix

SMTP Sécurisé

1. Vulnérabilités

Par défaut, tous les échanges SMTP s’effectuent en clair : aussi bien la phase d’authentification que celle de l’envoi du message. Pour illustrer ce propos, voici ci-dessous, une capture d’un analyseur de trame lors de l’envoi d’un courriel depuis le client de messagerie Thundirbird.

Capture Wireshark d’un échange de trame réseau utilisant le protocole SMTP

Dans la capture ci-dessus, on remarquera notamment :

  • À la ligne n°8, la phase d’authentification en clair.
  • À la ligne n°19, le contenu du message envoyé.

Techniquement, il est possible pur tout équipement se trouvant entre le serveur de messagerie et le client de messagerie de capter et d’interpréter ces données en clair. Ainsi, la sécurisation des échanges n’est pas garantie dans la mesure où :

  • La confidentialité des échanges est violées.
  • L’intégrité des données n’est pas vérifiée : il est possible de les intercepter – les modifier puis les renvoyer au destinataire.
  • Les identifiants de connexion de l’utilisateur peuvent être dérobés.
  • Logiquement, si l’intégrité est compromise et l’authentification caduque alors la non-répudiation n’est plus garantie.

En d’autre terme, ce type d’échange ne respecte pas les principes de cybersécurité. Il est donc essentiel de protéger ces échanges en procédant à un chiffrement des données.

2. Activation de TLS

2.1. Configuration de Postfix

  • Editer le fichier de configuration /etc/postfix/main.cf, puis rechercher la ligne :

readme_directory = no

  • Et, y ajouter les lignes suivante :

smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.cert
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key
smtpd_use_tls=yes
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_ask_ccert = yes
smtpd_tls_security_level = may

smtp_tls_loglevel = 1
smtp_tls_cert_file=/etc/postfix/ssl/smtpd.cert
smtp_tls_key_file=/etc/postfix/ssl/smtpd.key

  • La configuration ci-dessus permet, d’une part, d’activer la prise en charge de TLS sur le serveur, mais aussi d’indiquer l’emplacement du certificat pour le chiffrement des informations lors des échanges.
  • Un redémarrage du service Postfix est nécessaire pour la bonne application des nouveaux paramètres :

root@alice.lan: # service postfix restart

2.2. Génération du certificat

  • Le certificat sera sauvegardé dans le dossier ssl à la racine /etc/postfix. Initialement, ce dossier n’existe pas. Il faut donc le créer :

root@alice.lan: # mkdir -p /etc/postfix/ssl

  • Maintenant, se positionner dans le dossier nouvellement créé puis procéder à la génération du certificat :

root@alice.lan: # cd /etc/postfix/ssl
root@alice.lan:/etc/postfix # openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
Generating a 2048 bit RSA private key
………………………………………………………………………+++
………………………………………………………………..+++
writing new private key to ‘smtpd.key’


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) [AU]: FR
State or Province Name (full name) [Some-State]: OCCITANIE
Locality Name (eg, city) []: TOULOUSE
Organization Name (eg, company) [Internet Widgits Pty Ltd]: NCAD
Organizational Unit Name (eg, section) []: DSI
Common Name (e.g. server FQDN or YOUR name) []: 10.0.0.44
Email Address []: tech@ncad.fr

  • D’après le terminal de commande ci-dessus, nous générons un certificat avec une clé RSA d’une longueur de 2048 bits – qui sera valide pour 365 jours et sera généré au format standard x509.
  • Par la suite, le prompt demandera de saisir des informations sur l’entité propriétaire du certificat (localisation géographique, nom de l’entité et adresse mail) mais surtout l’adresse IP ou le nom d’hôte FQDN de la machine qui va utiliser le certificat.

Pour un serveur de messagerie en production, renseigner le nom FQDN du serveur plutôt que son adresse IP.

  • Un redémarrage du service Postfix est nécessaire pour la bonne application des nouveaux paramètres :

root@alice.lan: # service postfix restart

3. Forcer le chiffrement

3.1. Lors de l’envoi des courriels

  • Il est possible de vérifier dans les en-têtes des courriels envoyés et reçus, si ils sont été transmis avec un canal de transport chiffré :

Received: from geocoucou.net.ncad.fr (mail.geocoucou.eu. [109.190.211.49])
___by mx.google.com with ESMTP id g1si9649314wmg.53.2016.03.15.03.21.07
___for cacheloun@gmail.com;
___Tue, 15 Mar 2016 03:21:07 -0700 (PDT)

  • Dans l’exemple ci-dessus, ce n’est pas le cas. Le cas échéant, ce n’est pas la mention ESMTP qui serait apparue mais plutôt ESMTPS.
  • Pour forcer le chiffrement depuis/vers des domaines de messagerie spécifique, éditer le fichier de configuration /etc/postfix/main.cf et y ajouter la ligne suivante :

smtp_tls_policy_maps = hash:/etc/postfix/tls_policy_map

  • Créer puis éditer le fichier /etc/postfix/tls_policy_map puis y ajouter la ligne suivante :

gmail.com__________encrypt

  • Régénérer la base à l’aide de la commande postconf :

root@alice.lan: # postconf /etc/postfix/tls_policy_map

  • Un redémarrage du service Postfix est nécessaire pour la bonne application des nouveaux paramètres :

root@alice.lan: # service postfix restart

  • Pour les domaines de messagerie où le chiffrement est exigé, dans les fichiers de journaux de Postfix les éléments suivants peuvent être observés :

Jan 30 20:17:54 alice postfix/smtpd[28407]: connect from oxtrode.net.ncad.fr[10.0.0.51]
Jan 30 20:17:54 alice postfix/smtpd[28407]: Anonymous TLS connection established from oxtrode.net.ncad.fr[10.0.0.51]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)
Jan 30 20:17:54 alice postfix/smtpd[28407]: 98A4163777: client=oxtrode.net.ncad.fr[10.0.0.51], sasl_method=PLAIN, sasl_username=alice@alice.lan
Jan 30 20:17:54 alice postfix/cleanup[28410]: 98A4163777: message-id=52EAA55B.7090404@mail.glx
Jan 30 20:17:54 alice postfix/smtpd[28407]: disconnect from oxtrode.net.ncad.fr[10.0.0.51]
Jan 30 20:17:54 alice postfix/qmgr[28182]: 98A4163777: from=alice@mail.glx, size=726, nrcpt=1 (queue active)
Jan 30 20:17:55 alice postfix/smtp[28411]: Untrusted TLS connection established to aspmx.l.google.com[173.194.78.27]:25: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)

  • Cette fois-ci, si on capte et analyse les trames réseaux échangées entre le client et le serveur de messagerie Postfix, on remarque que la plupart des échanges sont chiffrés. Il n’est plus possible de lire les identifiants SMTP du client.

3.2. Lors de l’authentification

  • Par défaut, Postfix accepte les requêtes d’authentification en clair et en chiffré. Ce comportement peut se vérifier en analysant la bannière du serveur depuis une commande telnet :

root@alice.lan: > telnet 10.0.0.44 25
Trying 10.0.0.44…
Connected to 10.0.0.44.
Escape character is ‘^]’.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

  • Pour les raisons évoquées en introduction de cette article, il est nécessaire de forcer le chiffrement des échanges entre le serveur Postfix et les clients. Pour cela, rechercher la ligne suivante dans le fichier de configuration /etc/postfix/main.cf :

smtpd_tls_security_level = may

  • Puis remplacer la valeur may par encrypt :

smtpd_tls_security_level = encrypt

  • Un redémarrage du service Postfix est nécessaire pour la bonne application des nouveaux paramètres :

root@alice.lan: # service postfix restart

  • Si on se connecte de nouveau en telnet sur le serveur Postfix, on remarquera que la méthode AUTH PLAIN LOGIN a disparu :

root@alice.lan: > telnet 10.0.0.44 25
Trying 10.0.0.44…
Connected to 10.0.0.44.
Escape character is ‘^]’.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Laisser un commentaire

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