Le protocole SMTP
09/02/2005
 Christian CALECA 
Liste des cours

Un SMTP "perso"

Accueil ] [ Les bases ] [ les Profondeurs ] [ Un SMTP "perso" ] [ Installation de Postfix ] [ Config avancée ] [ Conclusions ]


Que voulons-nous faire ?

Ce qui est utile

Construire un serveur SMTP capable de relayer le courrier de nos postes locaux sans avoir à utiliser le serveur SMTP de notre fournisseur d'accès.

Notez cependant ceci :

Pour faire face à cette vérole de la messagerie que l'on appelle le "spam", de plus en plus de MTA destinataires n'acceptent plus de messages en provenance de MTA non connus. Dans le cadre d'un abonnement classique à un accès haut débit permanent, nous rencontrerons de plus en plus de problèmes de refus de la part des SMTP destinataires.

Quel intérêt alors, de monter son propre SMTP ?

Ce qui est du luxe

Au point où nous en sommes, autant réaliser un système de messagerie local. Je pourrai ainsi par exemple, envoyer un message à mes fils, situés dans leurs chambres respectives, quelques mètres plus loin :)

La seule chose que nous ne pourrons pas faire, c'est créer un système qui nous permette de recevoir du courrier directement sur notre domaine privé depuis l'Internet en se créant sa propre adresse de messagerie. Il nous manque peu de choses pour le faire, mais elles sont nécessaires:

De quoi avons-nous besoin ?

De pas grand chose. Juste une machine sous Linux et même si elle est seule et directement connectée au Net, elle est parfaitement capable d'envoyer du courrier  par elle-même, sans avoir à spécifier de serveur SMTP tiers. Il suffit qu'un MTA y soit installé, ce qui est la plupart du temps le cas si l'on choisit une option standard d'installation.

Les applications de ce type les plus connues sous Linux sont:

Configuration utilisée ici

Comme d'habitude, un petit réseau local de quelques hôtes sous Windows 98 ou supérieur, une passerelle Linux pour relier le tout à l'Internet. Cette passerelle, un P200 avec 128 Mo de RAM effectue le masquage d'adresses et sert également de DNS (Voir les chapitres consacrés à ce sujet). 

Comment nous y prendre ?

Notes de sécurité

Attention toutefois à ce que vous faites!

Sur une liaison permanente comme la notre, même avec une IP dynamique, il ne faut pas faire n'importe quoi.

Nous sommes en train de monter un serveur SMTP qui peut éventuellement servir de relais pour des utilisateurs mal intentionnés. Fréquentez un peu fr.comp.mail pour voir ce qu'il peut se passer dans le petit monde des administrateurs de messagerie.

Il faut savoir que ces administrateurs sont confrontés aux problèmes créés par les "spammers" (sorte d'abrutis qui passent leur temps à inonder les boîtes aux lettres de messages inutiles, obscènes, voire vérolés). Normalement, pas mal de dispositions sont prises pour essayer de bloquer ces messages indésirables. Il est bon de ne jamais perdre de vue qu'il y a sur l'Internet des administrateurs professionnels qui se décarcassent pour que ça marche le mieux possible,  et qu'il vaut mieux éviter de leur casser le travail.


Anatomie de Postfix

Postfix est un système de messagerie modulaire, contrairement à la plupart de ses concurrents. Vous avez ci-dessous le schéma fonctionnel dont  nous allons essayer d'analyser grossièrement le fonctionnement. Tout ce qui suit peut être considéré comme une traduction libre de la documentation officielle du produit. Le site officiel de Postfix se trouve à l'adresse www.postfix.org

anatomie

Les files d'attente de Postfix

Il y a cinq  files d'attente pour les messages :

Réception d'un e-mail

email Lorsqu'un message arrive dans le système Postfix, quelle que soit son origine, son premier arrêt se fait dans "incoming". La figure ci contre montre les composants qui sont invoqués  lors de l'arrivée d'un nouveau message.

Origine du message

Le Message est posté localement.

Le programme Postfix "sendmail" (ne pas confondre avec le MTA concurrent) le dépose dans la file "maildrop" d'où il est retiré par le daemon "pickup". Ce daemon effectue quelques contrôles "sanitaires" dans le but de protéger le reste du système Postfix. Dans le but d'éviter des accidents, les permissions du répertoire contenant "maildrop" sont telles que tout le monde peut y écrire, mais aucun utilisateur ne peut en effacer le contenu.

Le message vient du réseau

Le serveur SMTP Postfix reçoit le message et effectue quelques contrôles "sanitaires", toujours dans le but de protéger le reste du système Postfix. Le serveur SMTP peut être configuré pour implémenter des contrôles UCE (Unsollicited Commercial Email) sur la base d'une liste noire locale où issue du réseau, de vérifications sur les DNS (domaine de l'expéditeur) où d'autres requêtes sur les informations concernant l'émetteur.

Traitement du message

Le message n'est pas livrable

Un e-mail est généré automatiquement par le système Postfix  dans le but de renvoyer ce message à son expéditeur. Ce sont les daemons "bounce" (rebond) où "defer" (livraison) qui annoncent la mauvaise nouvelle.

Un e-mail est également généré automatiquement par le système Postfix dans le but de prévenir le responsable de la messagerie en cas de problème. Le système Postfix peut être configuré  pour alerter en cas de problème de protocole SMTP, de violation de règles de sécurité UCE etc. (Ce chemin est indiqué sur le graphique par la flèche sans label).

Le message est livrable

Le message est transmis par l'agent de livraison local soit par l'intermédiaire d'une entrée de la base de donnée des "alias" au niveau du système, soit par le fichier ".forward" au niveau de l'utilisateur. Nous reviendrons sur ces notions un peu complexes dans la configuration de Postfix.

Le daemon "cleanup" implémente le dernier traitement du message. Il ajoute le champ "Form:" et d'autres en-têtes dans le message, arrange les adresses de réponses dans le format "user@fully.qualified.domain" et optionnellement extrait les adresses des destinataires de l'en-tête. Le daemon "cleanup" insère le résultat dans une seule file d'attente: "incoming" et notifie le "queue manager" (qmgr sur le schéma complet) de l'arrivée d'un nouveau message. Le daemon "cleanup" peut être configuré pour transformer les adresses sur la base des tables de consultation "canonical" et "virtual". Nous verrons également celà dans la configuration de Postfix.

Sur la requête du daemon "cleanup", le daemon "trivial-rewrite" ré écrit les adresses dans le format standard "user@fully.qualified.domain".

Livraison du message

Chaque fois qu'un message est déposé dans la file d'attente "incoming", l'étape suivante consiste à le livrer. La figure ci contre montre les principaux composants de la fonction de livraison de Postfix. livraison

Le gestionnaire de file d'attente est le coeur du système de messagerie Postfix. Il contacte les agents de livraison "local", "smtp" ou "pipe" (les anglophones ont un langage parfois amusant: faire un "pipe" sur une "queue", ça peut prêter à confusion) et envoie une demande de livraison avec le chemin d'accès au fichier qui contient la file d'attente, l'adresse de l'expéditeur, le nom de l'hôte à qui il faut livrer si la destination n'est pas locale, et une où plusieurs adresses de destinataires.

Le gestionnaire maintient une file d'attente "deferred" séparée pour chaque message qui n'a pas pu être livré, de manière à ce qu'un compte-rendu de livraison trop volumineux ne vienne pas ralentir l'accès des autres files.

Le gestionnaire maintient une petite file d'attente "active" avec juste quelques messages prêts pour la livraison. "active" agit comme une petite fenêtre sur les files d'attentes "incoming" ou "deferred". Cette méthode évite au gestionnaire de faire des débordements de mémoire si le serveur est fortement chargé.

Optionnellement, le gestionnaire fait "rebondir" le message pour les destinataires qui sont référencés dans la table "relocated". Cette table contient des informations sur les utilisateurs qui ont changé d'adresse.

Sur la demande du gestionnaire de file d'attente, le daemon "trivial-rewrite" résout les destinations. Par défaut, il fait uniquement la distinction entre les destinations locales où distantes. Des informations de routage additionnelles peuvent être spécifiées dans la table "transport".

Sur la demande du gestionnaire de file d'attente, les daemons "bounce" et "defer" générent des rapports  de non-livraison lorsqu'un message ne peut être acheminé, soit à cause d'une erreur non récupérable, soit parce que le destinataire n'est pas joignable pendant une durée trop longue.

L'agent  local de la livraison sait gérer les boîtes aux lettres de type UNIX, les bases de données du type "alias" de sendmail (le MTA concurrent), les fichiers de type . forward de l'utilisateur. De multiples agents locaux de livraison peuvent être exécutés en parallèle, mais la livraison en parallèle au même utilisateur est habituellement limitée.

En même temps que l'agent de livraison "sendmail", l'agent de livraison "local" implémente l'interface utilisateur familière de sendmail (le MTA concurrent)

L'agent de la livraison locale a des possibilités pour utiliser d'autres moyens de livraison locale: vous pouvez le configurer pour livrer aux fichiers de boîte aux lettres dans les répertoires locaux d'utilisateur, et vous pouvez même le configurer pour déléguer la livraison de boîte aux lettres à une commande externe telle que le programme populaire "procmail".

Le client smtp recherche une liste d'échangeurs de courrier pour l'hôte de destination, trie la liste par préférence, et essaye chaque adresse alternativement jusqu'à ce qu'il trouve un serveur qui répond. Sur un système  postfix chargé, vous verrez plusieurs processus de client de smtp fonctionner en parallèle.

Le "pipe" est l'interface de sortie vers d'autres transports de courrier (Le programme "sendmail" est l'interface d'entrée). Le système de courrier Postfix peut par  exemple livrer du courrier  par l'intermédiaire du protocole  UUCP. Ce protocole vénérable est encore largement répandu. Par défaut, Postfix comprend des adresses de type "bang path" (Rassurez-vous, ici on parle de SMTP, pas de UUCP qui n'est plus de mise sur Internet, mais seulement dans des réseaux privés).

Conclusion

Si vous avez eu le courage de lire cette page jusqu'ici, vous êtes un brave. Si en plus, vous avez tout compris, alors vous êtes remarquable!

Pour résumer la situation, disons que Postfix sait faire les choses suivantes:

Il y a tout de même un détail qu'il ne faut pas laisser dans l'ombre: Postfix n'est pas un serveur POP ni IMAP. Même s'il sait livrer du courrier local, il ne sait pas gérer les boîtes aux lettres pour des clients distants. Si l'on veut réaliser cette opération, il faudra ajouter un autre logiciel, ce que nous n'allons d'ailleurs pas nous priver de faire...


Précédente ] [ Accueil ] [ Suivante ]