Solution de serveur de courrier électronique auto-hébergé (partie 1)

L'email ! Un truc vieux comme Internet, plus ancien que le Web... Un truc moins facile à configurer et à faire tourner à la maison. Avant de se lancer dans la configuration d'un (en fait de plusieurs) serveurs, il est important de comprendre les principes du courrier électronique car ils sont moins (mais beaucoup moins) accessibles que ceux du Web.

Après avoir cherché pendant longtemps, j'ai enfin trouvé comment fonctionne le système du courrier électronique sur Internet (et sur un réseau IP d'une manière générale). Pour cela, j'ai du compulsé les éléments donnés par les sites suivants:

Qu'est-ce-que ça donne ?

Le courrier électronique est une chaîne d'acteurs situés entre une personne qui envoie le courrier et celle qui la reçoit. Les acteurs de la chaîne sont des programmes qui ont différents rôles. Voici la liste de ces programmes et un bref résumé de leur rôle:

  • Le MUA: Le Mail User Agent est le programme qui sert en gros à lire ou à rédiger le courrier électronique. A la base il ne sait faire que ça et rien d'autre ! Thunderbird pour ne citer que lui est donc plus qu'un MUA car il sait envoyer et recevoir des messages en plus de permettre de les écrire et de les lire.
  • Le MSA: Le Mail Sending Agent est le programme chargé d'envoyer le message électronique vers le MTA. Il ne fait que ça: communiquer les emails que le MUA veut envoyer à un MTA. En gros, un MSA est un programme qui sait parler le protocole de mail: SMTP. C'est tout ce qu'on lui demande. On peut donc dire que Thunderbird est un MUA+MSA. Le MSA effectue le travail de lien entre le MUA et le MTA mais il peut le faire de manière intelligente: il peut notamment vérifier que l'utilisateur a bien le droit d'utiliser le MTA...
  • Le MTA: Le Mail Transport Agent est un programme qui se charge, comme son nom l'indique, de transporter le courrier électronique vers un autre MTA ou vers un MDA. C'est un programme essentiel, c'est par lui que le message électronique sort du réseau local vers Internet: vers le MTA du destinataire pour faire simple. Le MTA ne sait faire que ça: transporter d'une machine à une autre. Il ne sait pas (forcément) faire des tris compliqués ou prendre des décisions complexes (ce mail est-il un spam). En revanche, il est incollable sur SMTP et sur la gestion de l'acheminement des messages (le serveur en face ne répond pas: je signale l'erreur et je réessaye plus tard...). Le standard sur Internet pour les MTA est le protocole SMTP: même le serveur exchange de chez Micro$oft l'utilise...
  • Le MDA: Le Mail Delivery Agent est le programme qui fait le lien entre le MTA qui transporte le message et un truc pour stocker physiquement ce message dans une boîte aux lettres. Rappelons que la boîte au lettres est souvent un fichier (ou un ensemble de fichier). Il faut donc un programme dédié à cette opération de stockage. C'est à ce moment, c'est à dire une fois que l'opération délicate de tansport est terminée et qu'on est sûr d'avoir le bon message dans sa totalité qu'on peut lui appliquer des filtres et déterminer si c'est du spam ou non. En conséquence, le MDA est souvent associé au filtrage.
  • enfin, Le MRA: Le Mail Retrieval Agent est le programme qui va récupérer les messages depuis la boîte aux lettres de l'utilisateur lorsque celle-ci n'est pas accessible directement par l'utilisateur. Pour faire simple, vous n'avez pas besoin de MRA si vous avez un accès aux fichiers de la boîte aux lettres. Si votre client (pardon: votre MUA) est capable de lire ces fichiers directement (c'est le cas de Mutt), pas besoin de MRA. Dans la majorité des cas, si vos emails sont hébergés sur une machine qui ne vous appartient pas, celle de votre FAI ou celle de google par exemple, vous avez besoin de les récupérer depuis le serveur distant. Le MRA parle en POP et/ou en IMAP.

Thundebird, qu'est-ce-que c'est finalement ?

Thunderbird = MUA+MSA+MRA le tout en un ! Thunderbird est un MUA car il permet de rédiger et de lire des emails. Thunderbird est un MRA car il cause en POP/IMAP à des machines distantes. Enfin, Thunderbird est un MSA car il sait parler en SMTP directement à un MTA.

Comment tout ça fonctionne ?

Après les présentations, un petit schéma vaut plus qu'un grand discours...

Principes du courrier électronique complet:

                   +---------+          +-------+          +-------+
+-------+  écrit   |         |  envoie  |       |  SMTP    |       |
| Alice |--------->|   MUA   |--------->|  MSA  |--------->|  MTA  |::::>::::
+-------+          |         |          |       |          | envoi |       ::
                   +---------+          +-------+          +-------+       ::   serveur
                                                                           ::   d'envoi
                                                SMTP                       ::   
 ::::::::::::::::::::::::::::<::::::::::::::::::::::::::::<::::::::::::::::::
 ::
 ::.....................................................................................
 ::
 ::   +---------+          +-----+             +-------------+
 ::   |         | appelle  |     | écrit dans  | Boîte       |
 ::::>|   MTA   |--------->| MDA |============>| aux lettres |::::>::::
      |         |          |     | le fichier  | de Bob      |       ::  Sur le
      +---------+          +-----+             +-------------+       ::  serveur
                                                                     ::  qui reçoit
                          POP ou IMAP                                ::
 ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::::::::::::::::
 ::
 ::                           
 ::   +----------+              +-------+
 ::   |          |              |       |     +-------+
 :::::| POP/IMAP |------------->|  MUA  |---->|  Bob  |
      |   MRA    |              |       |     +-------+
      +----------+              +-------+

Quelques programmes connus...

Les néophytes (comme moi pour le moment) de ce sujet se doivent de connaître les programmes de référence dans le domaine. Aussi, voici quelques MxA célèbres:

  • MTA: sendmail (le plus vieux), postfix, qmail et exim4 (celui par défaut dans Debian).
  • MSA: ssmtp, msmtp, nbsmtp, esmtp, et les principaux MTA ont également des MSA intégrés.
  • MDA: procmail, maildrop
  • MRA: fetchmail, getmail
  • MUA: mutt bien sûr, Thunderbird (qui fait tout sauf MTA)

Pourquoi avoir tout cassé en plusieurs morceaux alors qu'aujourd'hui,

tout est intégré ?

Au début (enfin, c'est toujours vrai aujourd'hui), le principe retenu pour la conception de programmes sous Unix était le KISS. Du coup, à chaque rôle un programme... Et c'est ce qui a permis de mettre en place plus facilement des solutions au spam. En effet, plutôt que de devoir modifier toute la chaîne, du client (pardon, du MUA) jusqu'au MRA, il a suffit de travailler sur le MDA et tout était réglé. D'ailleurs, les programmes de MTA utilisés dans le monde entier sont les mêmes qu'il y a 20 ans: sendmail (1980s), postfix (1999), qmail, exim (1995) sont des programmes dont les origines remontent aux débuts d'Internet. Ils ont, certes, été modifiés depuis notamment sur ce qui concerne la sécurité (le protocole SMTP étant pas forcément terrible en terme de design de ce côté) mais les principes de fonctionnement n'ont pas changé.

Le fait de casser en plusieurs morceaux vous donne également plus de liberté: si vous préférrez utiliser procmail comme MDA au lieu d'un autre programme (le MDA par défaut de sendmail par exemple), rien ne vous l'interdit: vous choisissez ce qui est le plus adapté à vos besoins.

Pourquoi on a tout intégré alors qu'il semble que c'était mieux de

tout casser ?

S'il fallait demander à Madame Michu (ou à d'autres que je ne citerai pas) de mettre en place toute cette chaîne pas forcément triviale à configurer, je crains qu'elle se passe de messagerie électronique. On pourrait tout aussi bien dire que ce sont les programmes qui ne sont pas assez simples à configurer et on aura sans doute un peu raison également (n'oublions pas que l'objectif est d'installer son propre serveur de messagerie électronique).

Un MTA n'est pas simple à configurer car on peut faire des milliers de choses avec: router des emails ailleurs, faire des contrôles, ne pas accepter des fichiers plus gros que xMo, faire des notifications à certaines personnes, et j'en passe (surtout que je suis néophyte dans le sujet), etc... De plus, un MTA mal configuré peut relayer du SPAM (et vous pouvez être tenu pour responsable).

Pour l'instant, comme ça semble complexe, le modèle qui a émergé est l'hébergement des serveurs par des spécialistes. Tout ce qui ne nécéssite pas de serveur (MUA/MSA/MRA) est souvent intégré dans le client. Même Mutt qui respecte bien la chaîne et qui est un simple MUA (mais qui fait plein de trucs) sait faire du SMTP, du POP et du IMAP. Du coup, on en revient à un modèle plus simple mais qui s'éloigne un peu de l'origine. C'est ainsi que tous vos emails sont hébergés (et donc potentiellement lus) par d'autres personnes.

Et parfois, certaines madame Michu ne savent même pas qu'il existe des clients de messagerie électronique qu'on peut installer sur sa machine. Les webmails ont le vent en poupe... Est-ce-bien ? Je dirais que ça peut être utile quand on se déplace. Mais rien n'empêche d'installer son propre serveur de webmail sur sa propre machine... Ainsi, il n'y a que moi qui garde mes emails qui n'ont rien à faire chez les autres: je veux qu'on les transporte jusqu'à moi mais après, c'est à moi de gérer ce qui m'appartient.

Pourquoi ne pas utiliser tout simplement GMail ?

D'abord, c'est interessant de savoir comment ça fonctionne: même Gmail suit le modèle indiqué. Google a des MDA, il a des serveurs SMTP (donc des MTA), le MUA peut être celui de google (l'interface web) ainsi que des serveurs POP et IMAP qui permettent à votre MRA de récupérer les emails. Pour pouvoir lire vos emails et les analyser, il y a forcément quelquechose au niveau du MTA et du MDA qui sont tous les deux directement gérés par Google pour récupérer les informations via des filtres (ou comment passer d'un filtre anti-spam à filtre qui fait de la pub !), etc...

Ensuite, ces principes ont toujours cours actuellement; le fait de les comprendre vous permet de voir ce qu'est vraiment Internet à la base. Ne pas oublier que Google lit vos emails pour faire de la pub ciblée !

Quand c'est trop simple, c'est blasant ;-)

Et puis, si je trouvais le moyen pour madame Michu de devenir sa propre hébergeuse de services mails en deux clics au lieu de faire du Minitel 2.0 ?

Conclusion:

C'est sûr, la chaîne de courrier électronique est d'un concept moins simple que celle du mail avec son modèle client-serveur à deux acteurs. Il est indispensable de connaître ses principes avant d'envisager la configuration d'un "serveur de messagerie électronique" car les programmes eux, se qualifient en temps que MTA ou MDA ou MRA.

Le prochain article de cette série sera complètement technique... mais il me faut un peu de temps avant d'arriver à monter un truc adapté à mes besoins et sécurisé !