Exim4, connexion SMTP sécurisée via TLS

Avoir son serveur mail perso c’est très sympathique. Mais le SMTP non sécurisé ça n’est à mon sens viable que pour du réseau local, alors on va voir comment configurer sommairement son serveur SMTP exim4 pour ajouter le chiffrement sur tout ça.

Tout va se passer dans le fichier suivant : /etc/exim4/exim4.conf (ou exim4.conf.template avec le fichier de base, mais je l’ai renomé). Dans un premier temps, la base de notre configuration TLS :

daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
tls_require_ciphers = "SECURE256"

Ligne 1 on ajoute le port 465 dans la liste de ports ou le daemon doit écouter. Ligne 2 on indique que sur le port 465 on force l’usage de TLS.
Le paramètre de la ligne 3 est quant à lui légèrement plus complexe à configurer correctement : nous allons indiquer à exim4 le chiffrement et les algorithmes qu’il devra utiliser, par ordre de préférence. Il est même possible d’interdire l’usage de certains.

Ainsi avec la configuration suivante : tls_require_ciphers = « SECURE256:!SHA1:!AES-128-CBC » on autorise tout ce qui est dans le groupe « SECURE256 » et on interdit l’usage de SHA1 et AES-128-CBC. Chaque nom d’algo étant séparé par un  » :  » et début par un  » !  » pour signaler que l’on veut l’interdire. L’exemple que je viens de donner est correct en soi, mais bloquant. Car cela ne sera pas accepté par certains serveurs, comme ceux de hotmail / live / outlook. Documentation officielle de GnuTLS sur la cipher suite ici mais aussi par ici.

Ceci fait, il nous faut encore configurer 2 ou 3 bricoles, dont le paramètre qui indique à exim4 que l’on veut activer TLS. Il faudra trouver ce groupe de lignes :

.ifdef MAIN_TLS_ENABLE
# Defines what hosts to 'advertise' STARTTLS functionality to. The
# default, *, will advertise to all hosts that connect with EHLO.
.ifndef MAIN_TLS_ADVERTISE_HOSTS
MAIN_TLS_ADVERTISE_HOSTS = *
.endif

Nous sommes face à un bloc conditionnel comme il est possible d’en trouver dans une multitude de langages de développement / scripting. Pour activer TLS j’ai tout simplement ajouté une ligne avant ce bloc :

MAIN_TLS_ENABLE = true

Puis pour finir quelques dizaines de lignes plus loin, il faudra tout de même préciser où sont les certificats à utiliser par exim4 :

.ifdef MAIN_TLS_CERTKEY
tls_certificate = MAIN_TLS_CERTKEY
.else
.ifndef MAIN_TLS_CERTIFICATE
MAIN_TLS_CERTIFICATE = CONFDIR/certs/logd.fr.crt
.endif
tls_certificate = MAIN_TLS_CERTIFICATE

.ifndef MAIN_TLS_PRIVATEKEY
MAIN_TLS_PRIVATEKEY = CONFDIR/certs/logd.fr.key
.endif
tls_privatekey = MAIN_TLS_PRIVATEKEY
.endif

Que fait ce nouveau bloc de conditions imbriqués ? (C’est chiant ils auraient au moins pu indenter dans la conf, mais bon, il est présenté ainsi)
D’une part les 2 premières lignes sont prévues dans le cas d’une configuration avec le certificat et la clef dans le même fichier.
Si c’est votre cas / envie, il faudra alors préciser avant tout ce bloc quelque chose comme :

MAIN_TLS_CERTKEY = /le_chemin/vers/votre/fichier.pem

Dans mon cas je ne m’en sers pas. Après quoi il y a un test sur la variable MAIN_TLS_CERTIFICATE, si la var n’est pas configurée, on lui donne la valeur indiquée juste après. Et c’est là que l’on va préciser notre fichier de certificat. Puis cette valeur est attribuée à la véritable variable, à savoir tls_certificate. Vient alors la même procédure pour MAIN_TLS_PRIVATEKEY, si pas déclarée on lui donne comme valeur notre fichier, et alors cette valeur est passée à la véritable variable tls_privatekey.

A noter que exim4 permet l’usage de plusieurs certificats dans le cadre d’une utilisation multi serveurs avec gnutls : il est possible de dire à exim4, par exemple, de prendre la partie à droite de l’adresse mail user@domaine.com pour chercher le certificat correspondant au domaine

Voilà qui termine cette configuration sommaire de exim4 afin de sécuriser notre MTA à l’aide de TLS.

Lu 146 fois

Laisser un commentaire

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