Authentification SASL avec Postfix


ATTENTION ATTENTION ATTENTION

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.

Comment Postfix utilise les informations d'authentification SASL

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.

Quelles implémentations SASL sont supportées

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.

Building Postfix with Dovecot SASL support

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 :

Compiler les librairies Cyrus-SASL

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''.

Compiler Postfix avec le support de Cyrus-SASL

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 :

(pour Cyrus SASL version 1.5.5):
% 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"
(pour Cyrus SASL version 2.1.1):
% 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 

(pour Cyrus SASL version 1.5.5):
% 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"
(pour Cyrus SASL version 2.1.1):
% 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"

Activer l'authentification SASL dans le serveur SMTP de Postfix

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

Configuration de Dovecot SASL pour le serveur SMTP de Postfix

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.

Configuration de Cyrus SASL pour le serveur SMTP de Postfix

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.

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.

Pour les mêmes raisons vous devrez limiter la liste des plugins utilisés par l'authentification.

Lancer le logiciel dans une cage chroot en activant le support SASL est un exercice intéressant.

Tester l'authentification SASL dans le serveur SMTP de Postfix

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.

Dépanner SASL

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.

Activer l'authentification SASL dans le client SMTP de 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à.

Références

Valid HTML 4.01! traduction par Xavier Guimard - Retour au menu