Les gens inquiets d'installer Postfix peuvent espérer que Postfix est plus sûr que les autres serveurs de messagerie. La librairie Cyrus SASL est un code très long et en l'utilisant avec le client et le serveur SMTP, Postfix devient aussi sûr que les autres systèmes qui l'utilisent.
Le support SASL de Postfix (RFC 2554) peut être utilisé pour authentifier les clients SMTP distants sur le serveur SMTP de Postfix et pour authentifier le client SMTP de Postfix auprès des serveurs SMTP distants.
Lorsqu'un message arrive, Postfix enregistre le nom d'utilisateur fournit, la méthode d'authentification et l'adresse de l'expéditeur dans le fichier de logs et éventuellement autorise l'accès via la restriction anti-spam permit_sasl_authenticated.
Postfix n'enregistre pas les informations d'authentification SASL dans les en-têtes du message et ne les passe pas dans les commandes SMTP lorsqu'il transfert le courrier car celà ne regarde pas les autres serveurs. Ceux qui doivent y accéder les trouverons dans les fichier de logs. Un jour, les en-têtes de message de Postfix pourront être configurés pour enregistrer le nom d'utilisateur SASL sans avoir à éditer le code C.
Ce document couvre les sujets suivants :
Lors d'un envoi de message, Postfix peut examiner le nom de machine du serveur ou le domaine de destination (partie droite de l'adresse) au regard d'une table et si un couple login/mot-de-passe est trouvé, il l'utilisera pour s'authentifier au serveur.
Ce document décrit le fonctionnement de Postfix avec les implémentations SASL suivantes :
Postfix version 2.3 introduit un mécanisme de plug-in qui fournit le support de multiples implémentations SASL. Pour connaître les implémentations compilées dans Postfix, utilisez les commandes suivantes :
% postconf -a (SASL support in the SMTP server) % postconf -A (SASL support in the SMTP+LMTP client)
Bien entendu, ces commandes ne sont pas disponibles dans les versions antérieures de Postfix.
Le support SASL Dovecot est disponible dans Postfix versions 2.3 et supérieures. Le code source de Dovecot est disponible via http://www.dovecot.org/. A l'heure de l'écriture de ces lignes, seul la partie serveur du support SASL est disponible, ainsi, vous ne pouvez l'utiliser pour vous authentifier auprès du serveur de votre fournisseur de réseau. Dovecot utilise son propre processus démon pour l'authentification. Ceci maintien simple le processus de compilation de Postfix car il n'y a pas lieu de lui lier d'autres librairies.
Pour générer les nécessaires Makefiles, lancez ce qui suit dans le répertoire racine de Postfix :
% make makefiles CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\"'
Après celà, lancez "make" comme indiqué à la page INSTALL.
Notes :
Le paramètre "-DDEF_SASL_SERVER" n'est pas nécessaire ; il rend simplement la configuration de Postfix un peu plus simple car vous n'avez pas à indiquer le type de plug-in SASL utilisé dans le fichier main.cf.
Si vous voulez supporter LDAP ou TLS, vous devrez intégrer leurs CCARGS et AUXLIBS dans la ligne de commande ci-dessus.
Postfix semble fonctionner avec cyrus-sasl-1.5.5 ou cyrus-sasl-2.1.1, disponibles à l'adresse suivante :
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/.
IMPORTANT : si vous installez les librairies Cyrus SASL par défaut, vous devrez créer le lien symbolique /usr/lib/sasl -> /usr/local/lib/sasl pour la version 1.5.5 ou /usr/lib/sasl2 -> /usr/local/lib/sasl2 pour la version 2.1.1.
Forcément, la version 5 de Microsoft Internet Explorer nécessite une méthode d'authentification SASL non-standard. Pour l'activer, spécifiez ``./configure --enable-login''.
Pour compiler Postfix avec le support de l'authentification SASL, ce qui suit suppose que les fichiers include de Cyrus SASL sont situé dans le répertoire /usr/local/include et les librairies dans le répertoire /usr/local/lib.
Sur certains systèmes ceci construit les définitions nécessaires au Makefile :
% make tidy # si vous utilisez des sources ayant déjà été compilées % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"
% make tidy # si vous utilisez des sources ayant déjà été compilées % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2"
Sur Solaris 2.x vous devez indiquer les informations pour lier les librairies sinon ld.so ne trouvera pas les librairies partagées SASL
% make tidy # si vous utilisez des sources ayant déjà été compilées % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include" AUXLIBS="-L/usr/local/lib \ -R/usr/local/lib -lsasl"
% make tidy # si vous utilisez des sources ayant déjà été compilées % make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \ -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib \ -R/usr/local/lib -lsasl2"
Pour activer le support SASL dans le serveur SMTP :
/etc/postfix/main.cf: smtpd_sasl_auth_enable = yes
Pour autoriser le relais de courrier des utilisateurs authentifiés :
/etc/postfix/main.cf: smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated ...
Pour reporter les noms de login SASL dans les en-têtes de message Received: (Postfix versions 2.3 et supérieures):
/etc/postfix/main.cf: smtpd_sasl_authenticated_header = yes
Note : les noms de login SASL seront ainsi connus du monde entier.
Les anciens clients SMTP Microsoft utilisent une version non standard de la syntaxe du protocole AUTH et s'attendent à ce que le serveur SMTP réponde au EHLO avec "250 AUTH=stuff" au lien de "250 AUTH stuff". Pour accueillir de tels clients (en complément des clients conformes), utilisez ce qui suit :
/etc/postfix/main.cf: broken_sasl_auth_clients = yes
Le support SASL de Dovecot est disponible sur les versions 2.3 et supérieures de Postfix. Du coté de Postfix, vous devez indiquer l'emplacement de la socket du démon d'authentification Dovecot. Nous utilisons un chemin relatif au répertoire des files d'attentes de Postfix, ainsi le mécanisme fonctionne que Postfix fonctionne en cage (chroot) ou non :
/etc/postfix/main.cf: smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
Du coté de Dovecot, vous devez également indiquer l'emplacement de la socket du démon d'authentification. Dans ce cas nous indiquons un chemin absolu. Dans l'exemple ci-dessous, nous supposons que le répertoire des files d'attente de Postfix est /var/spool/postfix/.
/chemin/vers/dovecot.conf: auth default { mechanisms = plain login passdb pam { } userdb passwd { } socket listen { client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } }
Reportez-vous à la documentation de Dovecot pour la configuration et le fonctionnement du serveur d'authentification Dovecot.
Vous devez indiquer dans le fichier /usr/local/lib/sasl/smtpd.conf (SASL version 1.5.5) ou /usr/local/lib/sasl2/smtpd.conf (SASL version 2.1.1) comment le serveur doit valider les mots de passe des clients.
Note : certaines distributions de Postfix sont modifiées et cherchent le fichier smtpd.conf dans /etc/postfix.
Note : certaines distributions de Cyrus SASL recherchent le fichier smtpd.conf dans /etc/sasl2.
Pour effectuer les authentifications au travers du fichier des mots de passe UNIX :
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: pwcheck
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: pwcheck
Le nom du fichier du répertoire /usr/local/lib/sasl (Cyrus SASL version 1.5.5) ou /usr/local/lib/sasl2 (Cyrus SASL version 2.1.1) utilisé par la librairie SASL pour la configuration peut être indiqué avec :
/etc/postfix/main.cf: smtpd_sasl_application_name = smtpd
Le démon pwcheck est inclus dans les sources de cyrus-sasl.
IMPORTANT : les processus de Postfix doivent avoir les droits lecture+exécution sur le répertoire /var/pwcheck sinon l'authentification risque d'échouer.
Autre possibilité avec les versions Cyrus SASL 1.5.26 et supérieures (y compris 2.1.1), essayez :
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: saslauthd
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: saslauthd
Le démon saslauthd est également inclus dans les sources de cyrus-sasl. Il est plus flexible que pwcheck en ce sens qu'il peut effectuer les authentifications en utilisant PAM et diverses autres sources. Pour utiliser PAM, lancez saslauthd avec "-a pam".
Pour authentifier avec la base propre de Cyrus SASL :
/usr/local/lib/sasl/smtpd.conf: pwcheck_method: sasldb
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: auxprop
Ceci utilisera le fichier de mots de passe de SASL (défaut: /etc/sasldb dans la version 1.5.5, ou /etc/sasldb2 dans la version 2.1.1), qui est maintenu avec la commande saslpasswd ou saslpasswd2 (parties des logiciels Cyrus SASL). Sur certains systèmes mal supportés, la commande saslpasswd doit être lancée plusieurs fois avant d'arrêter de se plaindre. Le serveur SMTP de Postfix doit avoir accès au fichier sasldb - vous devriez jouer avec les permissions des groupes. Avec le mécanisme d'authentification OTP, le serveur doit également avoir un accès en écriture sur le fichier /etc/sasldb2 or /etc/sasldb (ou sur la base de données SQL si utilisée).
IMPORTANT: Pour que sasldb fonctionne, assurez-vous que le domaine SASL (royaume) corresponde à un nom de domaine pleinement qualifié.
EXEMPLE:
% saslpasswd -c -u `postconf -h myhostname` exampleuser
% saslpasswd2 -c -u `postconf -h myhostname` exampleuser
Vous pouvez connaître le royaume des utilisateurs dans sasldb avec sasldblistusers (Cyrus SASL version 1.5.5) ou sasldblistusers2 (Cyrus SASL version 2.1.1).
Du coté de Postfix, vous ne pouvez avoir qu'un royaume par instance smtpd, et seuls les utilisateurs appartenant à ce royaume pourront s'authentifier. La variable Postfix smtpd_sasl_local_domain contrôle le royaume utilisé par smtpd :
/etc/postfix/main.cf: smtpd_sasl_local_domain = $myhostname
IMPORTANT : tout les utilisateurs doivent pouvoir s'authentifier en utilisant TOUS les mécanismes annoncés par Postfix sinon la négociation pourrait aboutir à un mécanisme non supporté et l'authentification échouera. Par exemple si vous configurez SASL pour utiliser saslauthd pour les authentifications via PAM (pluggable authentification modules), seuls les mécanismes PLAIN et LOGIN sont supportés et ont une chance de réussir alors que la librairie SASL supporte d'autres mécanismes tels DIGEST-MD5. Ceci arrive car ces mécanismes sont conçus sous forme de plugins et la librairie SASL n'a aucun moyen de savoir que votre source d'authentification est PAM. Ainsi vous devrez limiter la liste des mécanismes anoncés par Postfix.
/usr/local/lib/sasl2/smtpd.conf: mech_list: plain login
Pour les mêmes raisons vous devrez limiter la liste des plugins utilisés par l'authentification.
/usr/local/lib/sasl2/smtpd.conf: pwcheck_method: auxprop auxprop_plugin: sql
Lancer le logiciel dans une cage chroot en activant le support SASL est un exercice intéressant.
Pour tester la partie serveur, connectez-vous au serveur SMTP, vous devriez être capable de suivre l'échange suivant. Les informations envoyées par le client sont en gras.
220 server.host.tld ESMTP Postfix EHLO client.host.tld 250-server.host.tld 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH DIGEST-MD5 PLAIN CRAM-MD5 250 8BITMIME AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz 235 Authentification successful
Remplacez dGVzdAB0ZXN0AHRlc3RwYXNz par l'encodage base64 de la chaîne utilisateur\0utilisateur\0password (le \0 représente un octet nul). L'exemple ci-dessus correspond au nom d'utilisateur `test' avec le mot de passe `testpass'.
Pour générer les informations d'authentification encodées en base64, vous pouvez utiliser l'une des commandes suivantes :
% printf 'username\0username\0password' | mmencode
% perl -MMIME::Base64 -e \ 'print encode_base64("username\0username\0password");'
% printf 'username\0username\0password' | openssl base64
La commande mmencode est une part des logiciels metamail. MIME::Base64 is disponible sur le site http://www.cpan.org/.
Lorsque vous postez des négotiations SASL dans les listes publiques, surtout n'oubliez pas qu'il est très facile de retrouver le couple login/mot-de-passe codé en base64.
Vous trouverez un répertoire "sample" dans les sources de Cyrus SASL. Lancez make, changez l'utilisateur en postfix (commande su) (ou en l'utilisateur passé dans le paramètre mail_owner) :
% su postfix
puis lancez le serveur et le client issus de la compilation dans deux terminaux séparés. Utilisez strace / ktrace / truss pour constater et résoudre les problèmes. Répetez l'opération précédente jusqu'à réussir à vous authentifier avec le client. Après seulement, retournez à Postfix.
Activez l'authentification SASL du coté client et spécifiez une table contenant des informations utilisateur/mot-de-passe par machine ou destination. Postfix regarde d'abord le nom de machine; si aucune entrée n'est trouvée, il consulte la table avec la destination prochaine. Généralement, c'est la partie droite de l'adresse de messagerie, mais ce peut être l'information contenue dans le paramètre relayhost ou dans une table transport.
/etc/postfix/main.cf: smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd /etc/postfix/sasl_passwd: foo.com username:password bar.com username [mail.fai] username:password [mail.fai]:submission username:password
Postfix version 2.3 supporte des informations de mot-de-passe SASL par utilisateur. Pour rechercher le mot de passe SASL de Postfix par utilisateur avant de le chercher par destination, indiquez :
/etc/postfix/main.cf: smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd /etc/postfix/sasl_passwd: user@example.com username:password bar.com username [mail.myisp.net] username:password [mail.myisp.net]:submission username:password
Note : certains serveurs SMTP supportent uniquement l'authentification PLAIN ou LOGIN. Par défaut, le client SMTP de Postfix n'utilise pas de méthodes d'authentification qui envoient le mot de passe en clair et retarde la livraison avec le message d'erreur : "Authentication failed: cannot SASL authenticate to server". Pour activer l'authentification en clair, indiquez par exemple :
/etc/postfix/main.cf: smtp_sasl_security_options = noanonymous
Le fichier des mots de passe SASL du client est ouvert avant que le serveur SMTP n'entre dans la cage chroot ainsi vous pouvez laisser le fichier dans le répertoire /etc/postfix.
Note : certains serveurs SMTP supportant les mécanismes d'authentification qui, bien que disponibles sur le système client, ne fonctionne pas en pratique ou ne possèdent pas les éléments appropriés pour s'authentifier. Il est possible avec le paramètre smtp_sasl_mechanism_filter de restreindre la liste des mécanismes serveur que le client smtp(8) prendra en consideration :
/etc/postfix/main.cf: smtp_sasl_mechanism_filter = !gssapi, !external, static:all
Dans l'exemple ci-dessus, Postfix refusera d'utiliser les mécanismes qui requierent une infrastructure particulière tel Kerberos.
Le client SMTP de Postfix SMTP est compatible avec les serveurs SMTP qui utilisent la syntaxe non-standard "AUTH=method..." dans la réponse à la commande EHLO ; il n'y a pas besoin d'une configuration particulière pour celà.
traduction par Xavier Guimard - Retour au menu