Date de publication: le lundi 14 mai 2007 Ă 12h15
Dernière modification: par Pascal BOYER le dimanche 15 juillet 2007 à 08h48
« Article précédent: Postfix : le fichier main.cf
» Article suivant: Postfix : tables et contrôle anti-spam
Avant propos
Dans cet article je développe le fonctionnement de SASL et présente des solutions à certains problèmes qui peuvent subvenir lors de sa mise en oeuvre.
Je présente également, à la fin de cet article, la configuration d’un client mail, en l’occurence Thinderbird , permettant l’utilisation du serveur Postfix en tant que relais. Il ne s’agit bien évidemment pas d’une utilisation en relais ouvert !
Installation
Définition
SASL est un protocole d’authentification.
C’est la RFC 2554 - SMTP Service Extension for Authentication qui définit le protocole d’authentification à un serveur SMTP à l’aide du protocole SASL (p153).
Quel est l’enjeu ?
Avant même de configurer, dans le fichier de configuration main.cf de Postfix, une quelconque règle relative à SASL, voici, dans les grandes lignes, comment fonctionne le serveur Postfix:
- Les seules personnes à pouvoir envoyer du courrier vers l’extérieur sont celles dont les machines se trouvent sur les (sous)réseaux définis par la règle mynetworks ou dont les adresses IP ont été spécifiquement indiquées dans cette même règle. Cela permettant à Postfix de ne pas fonctionner en relais ouvert. Il ne peut donc pas relayer (=envoyer) le courrier d’une machine qui ne serait pas définie par la valeur de $mynetworks . Et c’est tant mieux qu’il en soit ainsi.
Maintenant, supposons que vous partiez régulièrement en déplacement ou en voyage avec un ordinateur portable. Dans de nombreux hôtels, il est désormais courant qu’une connexion Internet soit comprise dans le prix de la chambre. Et vous voudriez bien pouvoir envoyer des mails en utilisant votre serveur Postfix. C’est à dire l’utiliser comme relais .
En l’état actuel de la configuration de Postfix, cette oportunité est impossible car l’adresse IP allouée à votre portable depuis votre chambre d’hôtel est inconnue de Postfix. Toute tentative de l’utiliser pour envoyer un mail se soldera par un échec.
La solution: le protocole SASL
Le fonctionnement conjoint de Cyrus IMAP et de SASL veut que toute création d’une Bà L sur le serveur IMAP soit liée à la création d’un login et d’un mot de passe. Il s’ensuit que toute personne ayant une Bà L sur ce serveur IMAP possède un login et un mot de passe lui permettant de s’identifuer auprès du serveur IMAP.
Au niveau de Postfix, on va donc utiliser le protocole SASL afin d’authentifier, en toute sécurité, les utilisateurs ayant une Bà L, donc un couple login/passwd, sur le serveur IMAP. Ceci leur permettra d’utiliser le serveur Postfix pour relayer leur courrier vers toutes les destinations du monde.
Le principe, tout comme avec l’authentification auprès du serveur IMAP, consistant à simplement vérifier la présence du couple login/passwd dans la table sasldb2 .
Fonctionnement
Le protocole SASL est utilisé pour authentifier les utilisateurs auprès du serveur SMTP.
Installer l’authentification SASL implique de choisir un modèle d’authentification (GSSAPI NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5)(p154) et un mécanisme d’authentification (passwd, shadow, PAM, sasldb, kerberos, OTP, LDAP)(p156).
Avec Postfix (et sous Debian), ce fichier est: /etc/postfix/sasl/ smtpd.conf . C’est dans ce fichier que l’on indique la méthode d’authentification que l’on souhaite utiliser. (p157)
Si la méthode choisie est saslauthd , cela implique que Postfix devra utiliser le serveur d’authentification saslauthd . Le démon saslauthd est plus flexible que pwcheck en ce sens qu’il peut effectuer les authentifications en utilisant PAM et diverses autres sources:
- /etc/shadow
- /etc/passwd
Pourquoi un serveur d'authentification externe ?
Et bien parce que Postfix, s’excutant avec des droits insuffisants pour interroger les fichiers /etc/passwd , /etc/shadow , /etc/pam.d/ ... et autres, c’est le serveur saslauthd qui le fera à sa place.
Les mécanismes d’authentification supportés par le serveur saslauthd sont renvoyés par la commande:
saslauthd -v
saslauthd 2.1.19 authentication mechanisms: sasldb getpwent kerberos4 kerberos5 pam rimap shadow ldap
Le mot clef MECHANISMS peut donc prendre une de ces huit valeurs.
- Le mécanisme d’authentification gouverne les défis et les réponses entre client et serveur ainsi que la façon dont ils seront encodés pour la transmission (p154).
- Le modèle d’authentification indique comment le serveur vérifiera et stockera le mot de passe (p154).
Mise en oeuvre
Comme indiqué dans l’article Postfix : le fichier main.cf , la mise en oeuvre de l’authentification des clients auprès du serveur smtpd par le serveur saslauthd se fait essentiellement grâce à ces deux règles:
- smtpd_sasl_auth_enable = yes
- smtpd_sasl_local_domain =
Configuration du client
Voici ce qui doit être correctement configuré dans le client mail. Ici il s’agit de Thunderbird.
Nom de login
Sélectionner le nom de votre compte. Sur la figure ci-dessous c’est Perso :
Puis sélectionner Voir les paramètres pour ce compte :
Et enfin, dans la fenĂŞtre gauche, Serveur sortant (SMTP) :
Le champ qui nous intéresse est Nom d’utilisateur : car en fonction de la valeur de la règle smtpd_sasl_local_domain = la valeur à renseigner dans ce champ ne sera pas la même.
- Si cette règle est ainsi définie:
...alors le champ ne doit être renseigner qu’avec le simple login de l’utilisateur:
- En revanche, si la règle est ainsi définie:
...alors le champ doit être renseigner avec le login pleinement qualifié de l’utilisateur:
Attention Ă certaines restrictions
Une des restrictions qui pose problème pour la réussite de l’authentification de l’utilisateur auprès du serveur SMTP est:
postfix/smtpd[19888]: < mut38-1-82-67-64-88.fbx.proxad.net[82.67.64.88]: RCPT TO:<virginie@yahoo.fr>
...et dont l’adresse mail (ci-dessus <virginie@yahoo.fr> ) qui suit cette commande ne correspond pas à la valeur de la règle:
Or la variable $mydestination vaut la valeur de la règle:
Or que vaut la règle myhostname :
Donc, tant que la commande RCPT TO: ne sera pas suivie d’une adresse de type xxx@ euphorie.linuxorable.fr , toutes les tentatives d’envoi de mail seront rejetées.
Première solution
Deuxième solution
Renseigner la règle relay_domains = d’une liste de domaines vers lesquels le serveur acceptera de relayer les mails.
Troisième solution
Ajouter, à la règle smtpd_client_restrictions = et avant la restriction reject_unauth_destination , la restriction permit_sasl_authenticated .
Ainsi, toute personne authentifiée par le serveur saslauthd pourra envoyer des mails vers n’importe quelle destination.
Commentaires













