TacticalWiki

SecureMailServer

HomePage :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.179.210

Serveur de mail sécurisé


Cette page décrit mes tribulations pour mettre en place un serveur d'envoi / réception de mails entièrement sécurisé. Autrement dit, pas un open relay, mais surtout un serveur qui évite de faire transiter en clair messages et mots de passe sur le réseau...

Niveau: Les explications qui suivent supposent que vous avez une certaine expérience dans l'installation de logiciels Linux, des notions de sécurité, et que vous savez générer et utiliser les certificats X.509.

Logiciels



Objectifs



Les moyens


Tout d'abord, au revoir aux bons vieux ports 25 et 110; vos logiciels clients devront utiliser SMTPS et POP3S, respectivement sur les ports 465 et 995. Il s'agit là des versions SSL des deux services.

Toutefois, si votre serveur SMTP est MX d'une zone, il va être amené à recevoir des messages venant d'autres MTA, qui seront eux beaucoup plus tolérants - enfin, comme à peu près n'importe quel FAI de cette planète. Il va donc falloir laisser le port 25 ouvert. Mais cela nous pose un petit problème de conscience; en effet, si l'on omet la configuration SSL d'un client POP, on atterrira sur le port 110, et la connexion sera refusée sans autre forme de procès. Mais si l'on omet cette configuration en ce qui concerne l'envoi des mails... le client va atterrir sur le port 25 (où la connexion sera acceptée, car tout de même, vous avez envie de recevoir des mails sur votre domaine que vous venez de renouveler pour 2 ans) et va tranquillement s'authentifier - en clair - avant d'envoyer les mails. Aïe. Ouille. Courage, tout n'est pas perdu, nous le verrons plus loin.

Installation du serveur POP3


Sous Mandrakelinux, fastoche, un petit urpmi imap (oui, le serveur pop3(s) pour xinetd est dedans...), et c'est joué. Reste à générer un joli certificat SSL pour remplacer /etc/ssl/imap/ipop3sd.pem, si vous ne souhaitez pas utiliser ce dernier, défini par défaut. C'est une bonne idée, notamment si vous avez créé votre propre autorité de certification.

Attention! Votre fichier PEM est censé contenir certificat et clé privée. Un chmod 600 s'impose donc.

Plus qu'à cocher les bonnes cases dans le centre de contrôle, ou éditer les bons fichiers de /etc/xinetd.d/. Et devinez quoi, ça marche.

Installation du serveur SMTP


Là, c'est moins évident. L'essentiel peut être accompli simplement en installant Postfix et Webmin, et en administrant le premier via le dernier; cela vous évitera d'éditer à la main les fichiers de /etc/postfix, tout en assurant un minimum de sécurité (vérifier que l'on est pas open relay, limiter les taux de traitement de mails à des valeurs raisonnables, masquage du numéro de version dans la bannière...). Toutefois, Webmin ne nous permet malheureusement pas (encore) de configurer SASL ou de passer en mode SSL.

Postfix et SSL / TLS


Le démon SSL (SMTPS) est activé dans le fichier /etc/postfix/master.cf en ajoutant (ou en dé-commentant) la ligne:

smtps inet n - y - - smtpd -v
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

Il faudra ensuite ajouter quelques paramètres à /etc/postfix/main.cf, le fichier de configuration principal. Le certificat lui-même et la clé privée peuvent se situer dans un même PEM (c'est le cas ici); encore une fois, attention à n'autoriser la lecture de la clé privée que par root.

smtpd_use_tls = yes
smtpd_tls_ask_ccert = yes
smtpd_tls_CAfile = /etc/ssl/imap/mail.pem
smtpd_tls_key_file = $smtpd_tls_CAfile
smtpd_tls_cert_file = $smtpd_tls_CAfile


NB: si le POP et le SMTP sont une même machine accédée par un même nom (mail.example.org), vous pouvez très bien utiliser le même couple certificat / clé privée pour les deux.

Authentification via SASL


Configurons le backend SASL dans le fichier /etc/postfix/sasl/smtpd.conf; on emploie ici le démon saslauthd, qui pourra être lui-même configuré à loisir selon la source d'authentification souhaitée (PAM par défaut sous Mandrakelinux).

pwcheck_method: saslauthd
mech_list: digest-md5


Grâce à l'utilisation du seul mécanisme digest-md5, le mot de passe ne transitera pas en clair sur le réseau, même si le logiciel client est accidentalement configuré pour se connecter sur le port 25 (non SSL). Si vous êtes sûr de vous et considérez le cryptage SSL comme suffisant, vous pouvez vous spécifier mech_list: digest-md5 plain login et donc permettre aux clients ne gérant pas MD5 de s'authentifier.

On va maintenant intégrer la notion d'authentification au sein de notre SMTP même. On indique donc dans le fichier /etc/postfix/main.cf que l'authentification via SASL est activée, en précisant que le relais est autorisé pour les utilisateurs authentifiés.

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_application_name = smtpd
broken_sasl_auth_clients = yes
smtp_sasl_password_maps = hash:/var/lib/sasl2/sasl.db


Piège! A quoi sert la dernière ligne, puisqu'on utilise PAM et pas sasldb? Excellente question. En toutes circonstances, le démon saslauthd requiert la présence d'une base SASL valide, même si elle s'avère inutile en pratique. Il faut donc en créer une contenant un utilisateur bidon avec la commande saslpasswd2 -c dummy -f sasl.db. Attention à l'emplacement de cette base; si le démon smtpd est chrooté, le chemin indiqué derrière hash: correspond au chemin dans la prison chroot.

Il reste à préciser la configuration de l'authentification PAM pour l'application smtp (dans le fichier /etc/pam.d/smtp), sans quoi toute tentative de Postfix échouera lamentablement.

auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth


Voilà! Nous disposons maintenant d'un serveur de mail universellement accessible sans risque, pour l'envoi et la réception de nos chers messages.

Références


http://www.defcon1.org/html/Software_Articles/Webserver/Postfix/postfix.html
http://www.postfix.org/SASL_README.html
http://sapiens.wustl.edu/~sysmain/info/postfix/postfix_configure.html
http://www.mandrakesecure.net/en/docs/postfix-sasl.php
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]