Qmail supporte TLS !
Introduction
Qmail dispose d'un patch TLS depuis 1999. Pour l'avoir testé et utilisé dès sa
sortie et depuis lors, il fonctionne parfaitement !
Cette extension permet :
- l'authentification forte des serveurs SMTP
- l'établissement d'une session TLS (chiffrée) entre 2 serveurs
- l'authentification forte des clients SMTP (que pour le relais)
- l'établissement d'une session TLS (chiffrée) entre le client et le serveur
Ceci permet par exemple de faire circuler le courrier dans des
canaux chiffrés entre les serveurs d'une même organisation
(VPN SMTP), de forcer le mode chiffré vers des destinations identifiées,
ou encore d'autoriser le relais après présentation
d'une authentification TLS cliente. A terme cette
extension permettra de ne plus transporter de courrier en clair.
On peut faire un parallèle entre cette extension STARTTLS et ce que HTTPS est à HTTP.
La seule différence notable est que
STARTTLS permet d'utiliser le même port (25)
pour le chiffré et le non chiffré alors que HTTP utilise encore
(pour des raisons
historiques) un port différent.
Pour plus d'information générale en français sur STARTTLS pour SMTP, POP3 et IMAP,
en particulier sur les autres logiciels
supportant cette norme, y compris les UAs,
voir :
https://www.tbs-internet.com/ssl/email.html.
J'ai écris une petite doc qui ne demande qu'à s'étoffer pour faciliter la mise
en route de cette extension.
Voici :
Compilation
Pour mettre en route l'extension STARTTLS dans Qmail :
- récupérez les sources de
qmail 1.03.
- Installez
OpenSSL 0.9.6, la librairie cryptographique ( ./config; make; make install ).
- Ensuite appliquez le patch
http://www.esat.kuleuven.ac.be/~vermeule/qmail/tls.patch aux sources de Qmail.
Je vous conseille de definir la variable DEBUG ( #define DEBUG 1 ) pour activer des logs
supplémentaires dans
qmail-remote.c .
- Si vous voulez installer Qmail avec les outils
spamcontrol, l'ajout des 2 patchs est non trivial,
c'est pour cela que vous trouverez
ici
une version prépatchée.
Dès lors, poursuivez avec la compilation et l'installation de Qmail
comme indiqué dans le fichier INSTALL ou UPGRADE.
Installation
Une fois le Qmail installé et configuré, on va maintenant paramétrer les aspects TLS.
- récupérer les racines des principales autorités de certification ici :
https://www.TBS-internet.com/secure/ca/tbs-trusted-roots.tgz.
- Placez le fichier clientca.pem qui se trouve dans cette archive dans /var/qmail/control/
Les racines des autorités de certification permettront d'authentifier les clients
qui viendront se connecter
sur votre serveur, si besoin est. Le patch TLS
de Qmail n'authentifie pas, par defaut, les serveurs.
- obtenir un certificat SSL/TLS pour votre serveur. Ceci sera la carte
d'identité électronique de votre serveur.
Il y a 2 grandes façon de faire. Soit utiliser un certificat standard
fournit par une autorité de certification (CA)
soit créer votre propre autorité de certification (je n'aborde pas
ce point ici, voir
http://www.openCA.org/).
Le plus simple pour démarrer consiste à utiliser un certificat de test d'un CA.
Pour se faire, on utilise OpenSSL que l'on suppose installé dans /usr/local/ssl/ :
# 2.1: fabriquez une clef privée
# (remplacez "/var/log/messages" par un fichier de log quelconque (cela sert à
# initialiser le moteur random) et "smtp.toto.com" par le nom de votre serveur)
cd /usr/local/ssl/private
openssl genrsa -rand /var/log/messages 1024 > smtp.toto.com.key
# protégez et faites une sauvegarde de cette clef
chmod 400 smtp.toto.com.key
chown root smtp.toto.com.key
# 2.2: fabriquez une demande de certificat
cd /usr/local/ssl/certs
openssl req -new -key ../private/smtp.toto.com.key > smtp.toto.com.csr
# le système vous demande alors de renseigner les champs de votre certificat
# voilà comment renseigner les champs correctement!
# Le code ISO de votre pays
# => Country Name (2 letter code) [AU]:FR
# Le nom du département dans lequel vous êtes (exemple 92 = Hauts de Seine)
# => State or Province Name (full name) [Some-State]:Hauts de Seine
# La ville
# => Locality Name (eg, city) []:Nanterre
# le nom de votre entreprise/université/association
# => Organization Name (eg, company) [Internet Widgits Pty Ltd]:TOTO
# optionnel: le nom du service/division
# => Organizational Unit Name (eg, section) []:service technique
# Très important: le nom officiel du serveur (le nom en toutes lettres qui
# figure dans la partie droite du record MX; exemple: "smtp.toto.com" dans
# "toto.com. IN MX 0 smtp.toto.com."); ce champ est vérifié lors de
# l'authentification
# => Common Name (eg, YOUR name) []:smtp.toto.com
# optionnel: ne rien mettre (valider) ou éventuellement postmaster@toto.com
# => Email Address []:
# ne rien mettre (valider)
# => A challenge password []:
# ne rien mettre (valider)
# An optional company name []:
2.3 : demandez votre certificat
-
Obtenir ici un certificat Gratuit pour 30 jours
- copier/coller votre fichier CSR (smtp.toto.com.csr)
dans la grande boite "Certificate Signing Request"
- Finissez le remplissage de la page (il faut rentrer des informations correctes, sinon l'audit sera impossible)
2.4 : installez votre certificat
Faites un copier/coller du bloc résultat (avec les lignes commencant par ----- ) et placez cela dans
un nouveau fichier smtp.toto.com.crt dans votre répertoire /usr/local/ssl/certs
3 : constitution du fichier
Il ne reste plus qu'à constituer le fichier /var/qmail/control/servercert.pem qui doit être
la concaténation du fichier de clef smtp.toto.com.key (fabriqué en 2.1) et du fichier certificat
smtp.toto.com.crt (récupéré en 2.4). Il faut protéger ce fichier :
chmod 640 servercert.pem
chown qmaild.qmail servercert.pem
4 : testez !
Lancez ou relancez votre Qmail et faites un "telnet localhost 25"
Tapez "EHLO toto" et vous devez voir en retour une ligne.
250-STARTTLS
Si ce n'est pas le cas, vérifiez les logs.
Usage
Pour tester avec un autre serveur maintenant,
envoyez un mail à
tag-ping@TBS-internet.com qui renverra votre message. Notre ligne "Received"
contiendra "with XXX encrypted SMTP" si votre message a été reçu par nous en
mode STARTTLS (notre serveur utilise un Qmail avec STARTTLS). Votre Qmail qui
doit recevoir le retour indiquera dans son champ received un
"with XXX encrypted SMTP" si il a reçu le message de notre serveur en mode TLS.
A la réception du message il ne vous reste donc plus qu'à étudier les entêtes
du message pour savoir si STARTTLS fonctionne bien dans les deux sens.
Vous pouvez aussi envoyer un email à
bounce@esmtp.org pour tester avec un serveur Sendmail.
Pour optimiser la négociation TLS, ce n'est pas obligatoire,
il est bon de fournir au serveur une clef RSA. Pour se faire, utilisez une
entrée cron du style :
35 * * * * umask 0077 ; /usr/bin/openssl genrsa -out /var/qmail/control/rsa512.new.$$ 512 > /dev/null 2>&1; chown qmaild.qmail /var/qmail/control/rsa512.new.$$ ; /bin/mv -f /var/qmail/control/rsa512.new.$$ /var/qmail/control/rsa512.pem
Qmail permet d'autoriser le relais de mail grâce à l'authentification
par certificat client. Pour activer l'authentification client, c'est ultra
simple : il faut avoir mis le fichier clientca.pem (étape 1 de installation)
et placer dans le fichier /var/qmail/control/tlsclients la liste des adresses emails
pour lesquels on veut relayer. Ainsi, si un certificat client émis par l'une des
autorités définies dans clientca.pem contient un champ email-adress qui correspond
à l'une des entrées (1 par ligne) de tlsclients, alors l'authentification est valide !
Pour tester cela, c'est simple : obtenez un certificat utilisateur pour Netscape à
http://www.tbs-certificats.com/email-securise.html
(Outlook ne présente pas les certificats clients). Ensuite tentez d'envoyer un mail
avec Netscape via votre serveur depuis une IP non autorisée à relayer.
Cela doit marcher ! Vous verrez une trace dans les entêtes de l'email ainsi transmis.
Si vous voulez faire en sorte que votre serveur s'authentifie en tant que client auprès
d'autres serveurs TLS (qmail ne demande un certificat client que pour le relais,
mais postfix et sendmail eux peuvent demander systématiquement un certificat client),
il faut placer un certificat de type client (nsCertType) dans le fichier
/var/qmail/control/clientcert.pem
Si votre certificat serveur est aussi de type client, alors vous pouvez faire un lien.
Oui, il est possible d'obtenir un certificat client Thawte pour son serveur, le
mettre dans clientcert.pem, et configurer un serveur qmail distant pour accepter
de relayer sur présentation de ce certificat.
Enfin il est possible de configurer votre qmail pour qu'il exige une présentation
d'un certificat avant l'envoi d'un mail à un serveur (authentification du serveur distant).
Par exemple, si vous voulez authentifier intranet.toto.com et exiger un canal TLS
pour lui transmettre du mail, placez dans le répertoire /var/qmail/control/tlshosts/
un fichier du nom du serveur :
intranet.toto.com.pem . Ce fichier, doit contenir la racine de l'autorité qui a signé
ce certificat. Le nom du fichier ou lien doit être FQDN.pem où FQDN est le nom en toutes
lettres du MX de la zone en question. Le plus simple, consiste a mettre les racines des
autorités dans un sous répertoire, et faire un lien vers chaque racine en guise de
fichier. Ainsi, si le serveur intranet.toto.com présente bien un certificat émis par
l'autorité spécifiée et dont le nom usuel (CN) correspond, alors le serveur est
authentifié ! Notez que cette option peut causer le refus de l'envoi si le serveur
distant ne réponds pas conformément à votre demande !
Conclusion
Vous voyez, la mise en place de TLS est simple : une fois
le patch compilé, une simple certificat a mettre en place et c'est bon !
N'hésitez pas à me fournir du feedback sur votre expérience directement par email
(tag-ssl-feedback@TBS-internet.com) et/ou à rejoindre la liste de diffusion cryptox509
(voir https://www.tbs-internet.com/ssl/liste.html).
Votre aide permettra d'améliorer cette doc et d'alimenter
https://www.tbs-internet.com/ssl/email.html.
TBS
est une société de conseil spécialisée dans les télécommunications spatiales, le
conseil aux ISPs et la sécurité du commerce électronique. TBS-internet commercialise les solutions de
Thawte
(groupe VeriSign) en France.
Sécurisation Outlook Express |
Sécurisation Netscape Communicator |
Sécurisation serveurs SMTP/POP/IMAP |
Autres documents sécurité TBS
|