Cette page présente une façon de configurer [:Postfix:] afin d'y activer l'authentification des connexions via SASL.

A quoi ça sert ?

L'authentification permet de connaître précisément l'utilisateur qui demande l'accès au services offerts. Cela permet alors de donner des droits supplémentaires pour à ces utilisateurs authentifiés, droits qu'on ne donnerait pas forcément à des utilisateurs quelconques (anonymes).

Le standard SASL ajoute un dialogue entre le client et le serveur pour choisir la méthode d'authentification à utiliser, ce qui autorise plus de souplesse qu'avec une simple authentification par un certificat TLS/SSL.

Un exemple d'utilisation concrète est de pouvoir offrir un service qui permet à tous vos utilisateurs d'envoyer des messages via votre serveur, même s'ils sont en dehors de votre réseau local. Normalement, puisque nos serveurs ne sont pas ouverts au relayage, ce n'est pas possible : on active donc un système qui permet aux utilisateurs de s'authentifier sur le serveur. Une fois qu'ils seront authentifiés avec leur nom d'utilisateur et leur mot de passe, on leur permet d'utiliser le serveur pour envoyer des messages à n'importe qui.

Pré-requis IMPORTANT : chiffrement des communications en TLS

Afin de pouvoir s'authentifier en toute sécurité, il est très fortement conseillé d'activer le [:../Chiffrement:chiffrement TLS] des connexions SMTP. C'est même indispensable pour la configuration présentée ici, car on y utilise le mécanisme PLAIN qui consiste à transmettre le mot de passe en clair lors de l'authentification. Ceci est souvent nécessaire pour les mécanismes sous-jacents, qui doivent recevoir le mot de passe « tel quel » afin de le crypter avec leur propre algorithme.

Installation des outils requis

Il faut installer les modules SASL et les programmes nécessaires (dont le démon d'authentification saslauthd) :

Configuration du démon d'authentification saslauthd

Ce démon sera interrogé par les systèmes qui veulent faire de l'authentification. C'est lui qui saura quel module contacter. La configuration se fait dans /etc/default/saslauthd :

START=yes # le mécanisme à utiliser (PAM est sans doute le plus générique) MECHANISMS="pam" MECH_OPTIONS="" # 5 processus en parallèle, ça suffit : THREADS=5 # Très important pour Postfix : (lire "man saslauthd") # option -m : pour Postfix, qui tourne en chroot # option -r : construit un identifiant prenom.nom@domain OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd" }}}

Il faut ensuite rendre le service d'authentification disponible depuis l'environnement chroot de Postfix :

Configuration de PAM pour utiliser MySQL

Nous avons dit à saslauthd d'utiliser PAM (Pluggable Authentication Modules). Il faut donc configurer PAM pour lui dire d'aller chercher les informations d'authentification dans MySQL.

On installe le module de PAM qui permet d'interroger une base MySQL :

Et on configure PAM pour lui dire d'utiliser ce module pour le service smtp (fichier /etc/pam.d/smtp) :

# attention, c'est sur deux lignes seulement (votre navigateur les coupe certainement) : auth required pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1 }}}

Dans cet exemple, nous avons un serveur MySQL local (127.0.0.1), avec une base mail qui contient une table adresses dans laquelle on trouve les colonnes source (le login, de type prenom.nom@auf.org) et password.

Pour plus d'information, la documentation d'utilisation du module PAM est dans /usr/share/doc/libpam-mysql/README.gz

Configuration de l'authentification SASL de Postfix

SASL est prêt, on va maintenant demander à Postfix de l'utiliser.

On précise le système d'authentification de SASL dans /etc/postfix/sasl/smtpd.conf. Dans notre cas, on passe par saslauthd :

pwcheck_method: saslauthd mech_list: PLAIN LOGIN ANONYMOUS log_level: 7 }}}

Ensuite on active le système SASL au niveau de /etc/postfix/main.cf :

smtpd_sasl_auth_enable = yes

# modifiez votre option smtpd_recipient_restrictions pour y ajouter une permission # au niveau SASL : les clients authentifiés pourront utiliser le serveur pour envoyer # des messages à qui il veulent (pas de restrictions sur les "recipients") : # smtpd_recipient_restrictions = (...), permit_sasl_authenticated, reject_unauth_destination # Sur une configuration classique, cela sera : smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

# IMPORTANT : n'offrir la possibilité de s'authentifier *que* si le canal # est sécurisé via TLS (il faut donc aussi activer TLS) # voir http://wiki.auf.org/wikiteki/Postfix/Chiffrement smtpd_tls_auth_only = yes }}}

Il faut ensuite redémarrer Postfix : # invoke-rc.d postfix restart

Mise en place du port "submission" 587/tcp (RFC 2476)

Les manipulations décrites ci-dessus permettent d'activer une authentification sécurisée sur le port 25/tcp. Or, dans le cadre de la lutte ant-virus et anti-spam, ce port est de plus en plus souvent filtré dans les réseaux, surtout les réseaux publics. Si nous proposons un service sur le port 25/tcp, il risque donc de ne pas être accessible depuis n'importe où...

Pour ce faire, on va configurer Postfix pour qu'il sache recevoir des connexions sur le port 587/tcp (submission). On imposera que ces connexions soient chiffrées en TLS et on imposera également une authentification SASL. Nous proposerons ainsi à nos utilisateurs un service leur permettant d'envoyer des mails depuis n'importe quel client de messagerie connecté à Internet (le port 587/tcp n'est pas filtré puisqu'il est censé toujours proposer des services avec authentification, donc pas (trop) de spam ni virus).

Cette technique est décrite dans la [http://www.ietf.org/rfc/rfc2476.txt RFC 2476].

Pour activer le service, il suffit de le rajouter dans le fichier /etc/postfix/master.cf :

# submission : on ouvre le port 587/tcp sur lequel on impose TLS # et on n'accepte que les clients authentifiés. Cela impose d'avoir # déjà configuré TLS et SASL, bien entendu. # service type private unpriv chroot wakeup maxproc command + args submission inet n - - - - smtpd

}}}

Notes :

Ce service est notamment activé sur la messagerie de Montréal, vous trouverez le mode d'emploi côté client ici : MessagerieAufOrg/EnvoiSmtpSortant

Erreurs classiques

Annexes et historique

Filtrage des envois selon l'adél de l'émetteur

(doc de ProgFou)

Après authentification, Postfix permet également de vérifier la ou les adéls utilisées par l'émetteur (pas obligatoire, mais peut être utile pour stopper les virus-pourriels si vous avez encore des clients Outlook et compagnie).

Par exemple, j'ai créé un fichier /etc/postfix/sender_login contenant :

Puis j'ai ajouté les lignes suivantes dans /etc/postfix/main.cf :

Après cela, l'utilisateur bgates ne peut plus utiliser d'autre adresse que bilou@microsoft.com faute de quoi son envoi sera simplement rejeté, ce avant même d'être mis dans la queue d'envoi.

Authentification via LDAP

(doc de ProgFou)

Pour une authentification directement via LDAP (déconseillée à cause des soucis avec le logiciel OpenLDAP) :

START=yes MECHANISMS="ldap" }}}

ldap_servers: ldap://127.0.0.1/ ldap_search_base: o=AuF ldap_filter: mail=%U@auf.org ldap_use_sasl: no ldap_auth_method: bind }}}

Voir /usr/share/doc/sasl2-bin/LDAP_SASLAUTHD.gz pour les options disponibles.