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

Note : [:JeanChristopheAndré:Je] présente ici l'installation sur une Debian Sarge ou Etch.

Installation des outils requis

Afin de pouvoir s'authentifier en toute sécurité, il est fortement conseillé d'activer le [:../Chiffrement:chiffrement TLS] des connexions SMTP. C'est même indispensable pour la configuration que je présente ici, car on y utilise le mécanisme PLAIN qui consiste à transmettre le mot de passe en clair lors de l'authentification (nécessaire pour certains mécanismes sous-jacents).

Dans tous les cas, il faut au moins installer les modules SASL :

$ sudo aptitude install libsasl2-modules

Configuration de l'authentification SASL de Postfix

Authentification via PAM, LDAP ou IMAP

Il faut ici utiliser l'authentification externe via saslauthd.

Pour ce faire, il faut installer les outils SASL :

$ sudo aptitude install sasl2-bin

On indiquera le système d'authentification dans /etc/postfix/sasl/smtpd.conf :

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS

On spécifiera la méthode d'authentification dans /etc/default/saslauthd :

START=yes
MECHANISMS="pam"

ou bien :

START=yes
MECHANISMS="ldap"

ou encore :

START=yes
MECHANISMS="rimap"
PARAMS="-O localhost" # serveur imap

Pour LDAP il faudra alors créer un fichier supplémentaire /etc/saslauthd.conf :

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.

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

$ sudo invoke-rc.d saslauthd start # astuce pour créer le répertoire de travail
$ sudo invoke-rc.d saslauthd stop
$ sudo mkdir -p /var/spool/postfix/var/run
$ sudo mv /var/run/saslauthd /var/spool/postfix/var/run/
$ sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run/
$ sudo usermod -G $(id -Gn postfix | tr ' ' ','),sasl postfix # pour ajouter postfix au groupe sasl
$ sudo invoke-rc.d saslauthd start

Authentification via MySQL

<!> Attention : cette solution n'a pas encore été testée ! /!\ Je (JeromeSantini) vient de tester, et j'ai l'impression que cette méthode nécessite d'avoir le mot de passe en clair dans la base ? en tous cas, pas réussi à faire marcher avec le mot de passe au format compatible crypt() :-(

Dans ce cas on n'a pas besoin de saslauthd mais il faut en revanche installer les modules SQL :

$ sudo aptitude install libsasl2-modules-sql

Voici un exemple de configuration dans /etc/postfix/sasl/smtpd.conf :

pwcheck_method: auxprop
mech_list: PLAIN LOGIN ANONYMOUS
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: XXXXX
sql_database: system
sql_select: SELECT password FROM system WHERE username='%u'

Configuration de Postfix pour utiliser SASL

On pourra utiliser l'extrait de configuration suivant dans /etc/postfix/main.cf :

# n'offrir la possibilité de s'authentifier *que* si on est sécurisé via TLS
smtpd_tls_auth_only = yes

#===== SASL
# compatibilité avec les clients bogués (de chez Micro$oft...)
#broken_sasl_auth_clients = yes
#----- connexion entrante
smtpd_sasl_auth_enable = yes
#smtpd_sasl_security_options = noanonymous, noplaintext
#----- connexion sortante
#smtp_sasl_auth_enable = no
#smtp_sasl_password_maps = hash:$config_directory/saslpass
#smtp_sasl_security_options = noplaintext, noanonymous

# filtrage des envois pour n'autoriser que ceux authentifiés
smtpd_recipient_restrictions = ..., permit_sasl_authenticated, reject_unauth_destination

Il faut bien évidement penser à redémarrer (et non recharger) Postfix :

$ sudo invoke-rc.d postfix restart

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

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 pourriels).

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

bilou@microsoft.com bgates

(Ne pas oublier de lancer postmap /etc/postfix/sender_login.)

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

smtpd_sender_login_maps = hash:$config_directory/sender_login
smtpd_sender_restrictions = ..., reject_sender_login_mismatch, ...

(Ne pas oublier de recharger Postfix.)

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.

Discussions

Exemples

Authentification avec MySQL, via PAM

<!>L'authentification des mots de passe au format "crypt" peut fonctionner avec "saslauthd + pam" cependant avec l'encodage md5 c'est pas encore au point.

Ci-dessous ma configuration dans le cadre d'un mot de passe formaté "crypt". <!> On installe le module pour que "Pam" puisse fonctionner avec "mysql"

$ sudo aptitude install libpam-mysql

Système d'authentification dans /etc/postfix/sasl/smtpd.conf :

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS
log_level: 7

Le "log_level" à ce niveau est très utile et permet de visualiser les retours d'erreur dans /var/log/auth.log.

Dans le répertoire /etc/pam.d, on crée un fichier appelé "smtp" qui contient les lignes suivantes :

auth required pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1 encrypt=1
account sufficient pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1 encrypt=1

Si les configuration globales énoncées plus haut ont été respectées, il suffit de relancer les processus :

# /etc/init.d/postfix restart
# /etc/init.d/saslauthd start

<!>