Mise en oeuvre d’un SMTP Postfix ou Sendmail utilisant les cerficats issus de l’IGC du CNRS
|
Le protocole
SMTP a été étendu en 1999 pour le support de
TLS (Transport Layer Security) la
version normalisée du protocole SSL (Secure Socket Layer). Cette
extension, désignée dans la suite par "Extension STARTTLS" permet d'utiliser des
certificats dans le dialogue entre un client et un serveur ou bien entre
deux serveurs de messagerie.
Cette page WWW résume les opérations nécessaires
pour la configuration d'un serveur Postfix 1.1.x ou Sendmail 8.12.x utilisant les certificats issus de
l'IGC du CNRS.
|
Sommaire
Pourquoi des
certificats dans la messagerie ?
Il y a deux raisons qui peuvent inciter à utiliser des
certificats au niveau des serveurs de messagerie.
-
Chiffrer le courrier reçu ou émis vers un ou
plusieurs domaines donnés.
-
Configurer les règles anti-relais du serveur en
fonction de certificats d'utilisateurs.
Le chiffrement entre serveurs de messagerie est une
fonctionnalité peu utilisée au CNRS. Elle est pourtant
intéressante pour des organismes qui veulent garantir la
confidentialité des échanges via Internet de courriers
électroniques entre leurs différents sites. En configurant
tous les serveurs de l'organisme pour utiliser l'extension "STARTTLS" du protocole SMTP, on
a l'assurance que tout le courrier inter-filiales est chiffré.
La configuration des règles anti-relais via les
certificats est une réponse optimale au problème que
rencontrent nos utilisateurs lorsqu'ils sont en déplacement avec
un poste de travail portable.
En effet, la configuration de la messagerie sur ce portable
mentionne explicitement le serveur qui va retransmettre les messages
envoyés depuis le portable. Ce serveur s'appelle le relais de
messagerie ou serveur SMTP sortant. C'est le serveur de messagerie du
campus ou bien celui du laboratoire.
En général, ce serveur refuse tout message
émis depuis un poste de travail qui n'est pas physiquement
raccordé au réseau du campus ou du laboratoire. C'est une
bonne chose. Elle évite que le serveur soit utilisé comme
relais pour des envois en masse de messages à caractère
publicitaire. Ce type d'envois nécessite de trouver sur
l'Internet un serveur quelconque qui autorise le relais librement, de
lui envoyer ensuite une seule fois le message accompagné de
l'adresse de plusieurs centaines de milliers de destinataires. Ce sont
alors les ressources du serveur, la bande passante du campus et de
Renater qui sont utilisées pour acheminer ces courriers. Le taux
d'erreurs dans ce type d'envoi étant très important, c'est
aussi l'administrateur de ce serveur qui aura à gérer dans
sa propre boite à lettres les dizaines de milliers de messages de
rejet.
Dans la suite, nous décrirons comment configurer le
serveur de messagerie afin de permettre à des utilisateurs
disposant de certificats personnels CNRS d'émettre sans
difficultés des messages sans pour autant laisser le serveur en
relais ouvert à tous.
La demande de
certificat pour le serveur
La demande de certiticat pour un serveur est décrite
dans la fiche "Mise en oeuvre d'un
serveur Apache utilisant les certificats de l'IGC du CNRS". Le nom
indiqué dans le certificat sera celui du nom Internet du serveur
de messagerie, tel qu'il figure dans le DNS.
Notons que l'extension "STARTTLS"
prévoit qu'un serveur de messagerie utilise deux certificats
différents :
-
le premier lorsque le serveur reçoit une connexion
depuis un autre serveur. C'est un certificat de type serveur SSL/TTS.
-
le second est utilisé lorsque le serveur de
messagerie envoie des messages. Il se comporte alors comme un client vis à vis du serveur de messagerie du destinataire. Il
nécessite donc un certificat de type client SSL/TLS.
Les certificats délivrés par l'IGC du CNRS ne
permettent pas d'obtenir un certificat client pour des machines. Dans
les configurations expliquées dans la suite, nous ne
configurerons les certificats que dans la partie serveur.
Configuration
de Postfix 1.1.x
Le support de l'extension STARTTLS est inclus dans les
distributions de Postfix. L'utilisation de certificats dans Postfix
necéssite donc que la modification du fichier de configuration
main.cf et le rajout du certificat du serveur ainsi que des
autorités de certification CNRS dans le répertoire de
Postfix.
Les exemples ci-dessous illustrent la configuration pour un
serveur Postfix 1.1.x sous Linux
RedHat 7.3 ou ultérieure. Il est supposé que le serveur
Postfix est déjà opérationnel. Nous n'aborderons
donc que les modifications nécessaires pour que les règles
anti-relais reconnaissent des certificats CNRS.
Postfix permet d'autoriser le relais de messagerie en fonction
du certificat de l'utilisateur selon deux méthodes distinctes :
-
soit le certificat de l'utilisateur est dans une liste
exhaustive de certificats acceptés,
-
soit le certificat de l'utilisateur a été
émis par une autorité de certification faisant partie
d'une liste exhaustive d'autorités acceptées.
Il n'est malheureusement pas prévu de listes de
contrôles d'accès permettant d'autoriser les certificats
des utilisateurs sur la base de leurs attributs, comme par exemple,
"autoriser tous les certificats dont l'attribut organisationalUnit (OU) est le code
de mon laboratoire".
En pratique, on peut très bien laisser tout titulaire
d'un certificat CNRS utiliser son serveur en relais de messagerie. C'est
d'ailleurs ce que nous avons fait pour le serveur
camus.dr15.cnrs.fr. Les entêtes d'un message envoyés
après authentification par un certificat contiennent le nom du
titulaire de ce certificat. Il serait donc éventuellement
très simple de repérer l'auteur d'un usage abusif de notre
relais de messagerie.
La suite décrit les modifications à effectuer
dans le fichier de configuration "main.cf"
de Postfix. Ce dernier se trouve dans le répertoire "/etc/postfix" dans les
distributions Linux Red-Hat 7.3 ou ultérieures. C'est ce
répertoire qui sera utilisé dans les exemples qui suivent.
La clé
privée du serveur
Le chemin d'accès du fichier contenant la clé
privée du serveur est indiqué par la directive "smtpd_tls_key_file" qui
s'utilise comme suit :
smtpd_tls_key_file /etc/postfix/server.key
Déplacez le fichier contenant la clé
privée du certificat de votre serveur en lieu et place du fichier
indiqué dans la directive "smtpd_tls_keyfile". Modifiez les permissions de
ce fichier afin qu'il ne soit lisible que par l'administrateur. Les
commandes Unix correspondantes sont les suivantes :
mv nom.de.votre.serveur.key /etc/postfix/server.key
chown root /etc/postfix/server.key
chmod 400 /etc/postfix/server.key
Le certificat
du serveur
Le chemin d'accès du fichier contenant le certificat du
serveur est indiqué par la directive "smtpd_tls_cert_file" qui
s'utilise comme suit :
smtpd_tls_cert_file /etc/postfix/server.crt
Déplacez le fichier contenant le certificat de votre
serveur en lieu et place du
fichier indiqué dans la directive "smtpd_tls_cert_file". Les
commandes Unix correspondantes sont les suivantes :
mv nom.de.votre.serveur.crt /etc/postfix/server.crt
chown root /etc/postfix/server.crt
Les
autorités de certification
Le chemin d'accès du fichier contenant la liste des
autorités de certification autorisées est indiqué
par la directive "smtpd_tls_CAfile"
qui s'utilise comme suit :
smtpd_tls_CAfile /etc/postfix/CAcert.pem
Copiez dans le fichier indiqué, l'une à la suite de
l'autre, toutes les autorités de certifications que vous
acceptez. Tout certificat d'utilisateur émis par l'une de
ces autorités sera reconnu comme vallide.
Vous trouverez ci-dessous un fichier "CAcert.pem" ontenant les certificats de l'autorité racine du CNRS, celui de CNRS-Standard et celui de CNRS-Plus. Recopiez ce fichier dans /etc/postfix/CAcert.pem.
Les commandes Unix pour effectuer cette opération sont :
cp CAcert.pem /etc/postfix/CAcert.pem
chown root /etc/postfix/CAcert.pem
La configuration
de Postfix
Les directives suivantes de Postfix sont à rajouter
à la fin du fichier "main.cf"
de Postfix. Elles permettent une utilisation du protocole TLS pour
toutes les connexions SMTP émises à partir d'un client ou
d'un serveur vers votre serveur de messagerie.
# RAJOUTS LOCAUX POUR AUTHENTIFICATION PAR CERTIFICATS
# Les options pour le serveur smtpd
#
smtpd_tls_cert_file = /etc/postfix/server.crt
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_tls_CAfile = /etc/postfix/CAcert.pem
smtpd_tls_received_header = yes
smtpd_use_tls = yes
smtpd_tls_ask_ccert = yes
Il est recommandé de compléter ces directives avec celles
qui permettent d'utiliser TLS pour toutes les connexions SMTP
émises à partir de votre serveur vers un serveur tiers.
Notez qu'en théorie, votre serveur aurait besoin pour
s'authentifier d'un certificat client SSL/TLS. Malheureusement, l'IGC du
CNRS n'en distribue pas. C'est pourquoi les lignes décrivant la
partie cliente ne configurent pas de certificat.
En ce qui concerne les autorités de certifications,
vous pouvez être moins restrictif et accepter le certificat de la
machine distante, même s'il n'est pas émis par l'IGC du
CNRS. Nous avons supposé que le même serveur était
aussi configuré comme serveur Apache avec mod_ssl. Nous
utiliserons donc pour Postfix une partie de la configuration d'Apache
avec mod_ssl :
# Les options pour le client smtp. Utilisent la conf. de mod_ssl
#
smtp_tls_CAfile = /etc/httpd/conf/ssl.crt/ca-bundle.crt
smtp_tls_CApath = /etc/httpd/conf/ssl.crt
smtp_use_tls = yes
Dans le cas où Apache et/ou mod_ssl ne sont pas
installés sur votre serveur, utilisez les lignes ci-dessous :
# Les options pour le client smtp. N'utilisent pas la conf. de mod_ssl
#
smtp_tls_CAfile = $smtpd_tls_CAfile
smtp_use_tls = yes
Toutes ces directives ne modifient pas la configuration des
règles anti-relais. Pour ce faire, vous devez rajouter "permit_tls_all_clientcerts"
dans la directive "smtpd_recipient_restrictions"
qui correspond à la configuration actuelle des règles
anti-relais. Repérez cette directive dans votre fichier de
configuration. Elle est variable selon les sites. Par exemple, vous
aurez :
smtpd_recipient_restrictions = permit_mynetworks,
check_relay_domains
Rajoutez à cette ligne la propriété "permit_tls_all_clientcerts".
Elle permet d'autoriser le relais de messagerie pour toute connexion
authentifiée par un certificat émis par l'une des
autorités contenues dans le fichier "CAcert.pem". Vous obtenez :
smtpd_recipient_restrictions = permit_mynetworks,
permit_tls_all_clientcerts,
check_relay_domains
Dans le cas où la directive "smtpd_recipient_restrictions"
n'existe pas dans votre fichier "main.cf",
insérez-la de la façon suivante :
smtpd_recipient_restrictions = permit_mynetworks,
permit_tls_all_clientcerts,
reject
Relancez votre
serveur Postfix
Vous pouvez relancer votre serveur Postfix par les commandes
suivantes :
postfix stop
postfix start
Effectuez des tests de connexions depuis un poste de travail
configuré pour utiliser TLS (voir ci-dessous) pour les connexions
avec votre serveur. Les journaux de Postfix contenus dans /var/log/maillog vous donneront
des indications sur les erreurs possibles.
Configuration de
Sendmail 8.12.x
Le support de l'extension STARTTLS est inclus dans les
distributions de Sendmail 8.12.x
sur les serveurs Linux. L'utilisation de certificats dans Sendmail ne
necéssite donc que la modification du fichier de configuration sendmail.mc et le rajout du
certificat du serveur ainsi que des autorités de certification
CNRS dans les répertoires appropriés.
Les exemples ci-dessous illustrent la configuration pour un
serveur Sendmail 8.12.x sous
Linux RedHat 7.3 ou ultérieure. Il est supposé que le
serveur Sendmail est déjà opérationnel. Nous
n'aborderons donc que les modifications nécessaires pour que les
règles anti-relais reconnaissent des certificats CNRS.
Sendmail permet d'autoriser le relais de messagerie en
fonction du certificat de l'utilisateur selon deux méthodes
distinctes :
-
soit le nom distingué (DN, Distinguished name) du certificat
de l'utilisateur est dans une liste exhaustive de certificats
acceptés,
-
soit le certificat de l'utilisateur a été
émis par une autorité de certification faisant partie
d'une liste exhaustive d'autorités acceptées.
-
soit le nom distingué du certificat de
l'utilisateur satisfait une expression régulière
En pratique, on peut très bien laisser tout titulaire
d'un certificat CNRS utiliser son serveur en relais de messagerie. C'est
d'ailleurs ce que nous avons fait pour le serveur
camus.dr15.cnrs.fr. Les entêtes d'un message envoyés
après authentification par un certificat contiennent le nom du
titulaire de ce certificat. Il serait donc éventuellement
très simple de repérer l'auteur d'un usage abusif de notre
relais de messagerie.
La suite décrit les modifications à effectuer
dans le fichier de configuration "sendmail.mc"
de Sendmail. Ce dernier se trouve dans le répertoire "/etc/mail" dans les
distributions Linux Red-Hat 7.3 ou ultérieures. C'est ce
répertoire qui sera utilisé dans les exemples qui suivent.
La clé
privée et le certificat du serveur
Sur Linux RedHat 7.3 et ultérieurs, le
répertoire "/usr/share/ssl/certs"
est destiné à recevoir les certificats et clés
privés destinés aux divers services utilisant SSL. Les
certificats et clés privées sont
concaténées dans un fichier qui porte le nom du service
pour lesquels ils sont destinés.
Dans le cas de Sendmail, on crée donc le fichier "/usr/share/ssl/certs/sendmail.cf"
de la façon suivante :
cd /usr/share/ssl/certs/
cat nom.de.votre.serveur.key nom.de.votre.serveur.pem > sendmail.pem
chown root sendmail.pem
chmod 400 sendmail.pem
Les
autorités de certification
A l'instar d'Apache, Sendmailest prévu pour utiliser un
fichier contenant un ensemble de certificats d'autorités
reconnues (le fichier "ca-bundle.crt")
et des certificats individuels pour les autorités de
certification comme celle du CNRS. Nous n'avons pas réussi
à faire fonctionner cette deuxième possibilité. La
solution de contournement a donc été de rajouter les
autorités de certification du CNRS dans le fichier "ca-bundle.crt".
Vous trouverez en cliquant sur ce lien
un fichier contenant les certificats de l'autorité racine du
CNRS, celui de CNRS-Standard et celui de CNRS-Plus. Sauvez ce fichier
dans le répertoire "/tmp"
puis ajoutez le à la fin de /usr/share/ssl/certs/ca-bundle.crt.
Les commandes Unix pour effectuer cette opération sont :
cd /usr/share/ssl/certs/
cat /tmp/CAcert.pem >> ca-bundle.crt
La
configuration de Sendmail
Les directives permettant d'utiliser les certificats dans
Sendmail sur Linux sont en commentaires. Repérez les quatre
lignes suivantes dans le fichier "/etc/mail/sendmail.mc" :
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
Dans chacune de ces lignes, supprimez la marque de commentaire
"dnl". Vous obtenez :
define(`confCACERT_PATH',`/usr/share/ssl/certs')
define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
Configuration
des règles anti-relais
Les règles anti-relais se configurent à l'aide
du fichier "/etc/mail/access".
L'exemple ci-dessous montre comment on peut autoriser tout utilisateur
détenant un certificat émis par l'une des
autorités du CNRS à utiliser notre serveur de messagerie
comme relais.
Rajoutez dans le fichier "/etc/mail/access"
les lignes suivantes :
CERTISSUER:/C=FR/O=CNRS/CN=CNRS-Plus RELAY
CERTISSUER:/C=FR/O=CNRS/CN=CNRS-Standard RELAY
Fabriquez la base "access.db"
associée :
cd /etc/mail
makemap hash access < access
Génération
du fichier sendmail.cf et redémarrage de Sendmail
La configuration de Sendmail est prête à être
relancée. Les commandes Unix pour effectuer cette
opération sont :
cd /etc/mail
make sendmail.cf
/etc/init.d/sendmail restart
Configurez vos
clients de messagerie
La configuration de la messagerie des postes de travail
mobiles peut maintenant être modifiée afin d'utiliser des
connexions TLS vers le serveur de messagerie. Les paragraphes ci-dessous
indiquent comment procéder pour les logiciels de messagerie les
plus communs. Dans tous les cas, on supposera que l'utilisateur du poste
de messagerie dispose déjà d'un certificat CNRS et que son
logiciel de messagerie est déjà configuré pour la
signature électronique.
Configurer
Netscape Messenger 4
Lancez Netscape Messenger. Dans le menu "Édition," puis
"Préférences", cliquez sur "Serveur de courrier".
Dans la case intitulée "Serveur de courrier sortant
(SMTP)" tapez le nom de votre serveur, tel qu'il apparait dans son
certificat.
Cochez le bouton "Si possible" qui s'affiche sous "utiliser
(SSL) ou TLS pour les messages sortants".
Cliquez ensuite sur "OK" puis une nouvelle fois sur "OK" pour
sortir de la fenêtre des préférences.
Configurer
Netscape Messenger 7 ou Mozilla 1.x
Lancez Netscape Messenger 7. Dans le menu "Édition,
puis "Paramètres de compte de messagerie/forum", faites
défiler jusqu'en bas la fenêtre de gauche qui décrit
vos comptes de messagerie. Cliquez sur "Serveur sortant (SMTP)".
Dans la case intitulée "Nom du serveur", tapez le nom
de votre serveur, tel qu'il apparait dans son certificat.
Cochez le bouton "Lorsque disponible" situé sous
"Utiliser une connexion sécurisée (SSL)".
Cliquez sur "OK" pour sortir de la fenêtre des
préférences.
Configurer
Outlook Express
A compléter