Sur un serveur mail, les erreurs SASL dans les logs Postfix peuvent vite donner envie de fermer le terminal et d’aller vivre dans une forêt sans SMTP. Mauvaise nouvelle : les arbres ne relaient pas les mails. Bonne nouvelle : cette erreur se diagnostique proprement.
Le message typique ressemble à ceci :
Oct 10 11:35:05 mail postfix/smtpd[18553]: sql_select option missing
Oct 10 11:35:05 mail postfix/smtpd[18553]: auxpropfunc error no mechanism available
Oct 10 11:35:05 mail postfix/smtpd[18553]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql
L’ancien réflexe consistait parfois à commenter smtpd_sasl_path = private/auth dans Postfix. Aujourd’hui, ce n’est pas une bonne recommandation générique. Cette ligne est indispensable dans une configuration Postfix + Dovecot SASL classique.
La bonne méthode consiste d’abord à répondre à une question simple : Postfix utilise-t-il Cyrus SASL ou Dovecot SASL ?
Comprendre le rôle de SASL dans Postfix
SASL sert à gérer l’authentification SMTP, notamment pour les utilisateurs qui envoient du courrier via le port de soumission 587. C’est ce qui permet à un client mail de s’authentifier avant d’envoyer un message.
Postfix ne vérifie pas forcément lui-même les mots de passe. Il délègue cette partie à une implémentation SASL.
Les deux cas les plus courants sont :
| Backend SASL | Usage | Configuration typique |
|---|---|---|
| Dovecot SASL | Postfix réutilise l’authentification Dovecot | smtpd_sasl_type = dovecot et smtpd_sasl_path = private/auth |
| Cyrus SASL | Postfix utilise la bibliothèque Cyrus SASL | smtpd_sasl_type = cyrus ou valeur par défaut selon distribution |
L’erreur sasl_auxprop_plug_init for plugin: sql concerne généralement Cyrus SASL et son plugin SQL, pas Dovecot SASL.
Étape 1 : vérifier le support SASL de Postfix
Commencez par voir quelles implémentations SASL sont disponibles dans votre Postfix :
postconf -a
Exemple de sortie :
cyrus
dovecot
Si vous voyez dovecot, Postfix peut utiliser la socket d’authentification Dovecot. Si vous voyez cyrus, Postfix peut utiliser Cyrus SASL.
Vous pouvez aussi vérifier le support SASL côté client SMTP/LMTP :
postconf -A
Pour cette erreur précise, le plus important reste le serveur SMTP Postfix, donc postconf -a.
Étape 2 : lire la configuration SASL active
Affichez les paramètres SASL actifs de Postfix :
Besoin d'un coup de main ?
Ce bug qui traîne depuis des semaines, ce plugin qui casse votre mise en page, cette fonctionnalité que personne n'arrive à implémenter proprement — c'est exactement ce que je règle au quotidien depuis 20 ans.
Parlons de votre problème →postconf -n | grep -i sasl
Cas Dovecot SASL attendu :
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/authLangage du code : PHP (php)
Cas Cyrus SASL possible :
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
Si vous utilisez Dovecot, ne commentez pas smtpd_sasl_path = private/auth. Cette valeur indique à Postfix où trouver la socket d’authentification créée par Dovecot, généralement sous /var/spool/postfix/private/auth.
Cas recommandé : Postfix avec Dovecot SASL
Sur beaucoup de serveurs mail modernes, Dovecot gère déjà l’authentification IMAP/POP. Il est donc logique de le réutiliser pour SMTP AUTH dans Postfix.
Configuration Postfix typique dans /etc/postfix/main.cf :
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostnameLangage du code : PHP (php)
Dans Dovecot, la socket doit être exposée pour Postfix. Exemple dans la configuration Dovecot :
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
auth_mechanisms = plain loginLangage du code : PHP (php)
Ensuite, rechargez les services :
sudo systemctl reload dovecot
sudo systemctl reload postfix
Ou redémarrez si vous venez de changer profondément la configuration :
sudo systemctl restart dovecot
sudo systemctl restart postfix
Avec cette architecture, l’erreur du plugin SQL Cyrus SASL ne devrait pas apparaître, sauf si une autre partie de la configuration charge encore Cyrus SASL.
Cas Cyrus SASL : corriger le plugin SQL
Si vous utilisez volontairement Cyrus SASL avec un backend SQL, l’erreur indique que Cyrus tente de charger le plugin SQL, mais que sa configuration est incomplète ou que le plugin n’est pas installé.
Installez d’abord les modules SASL nécessaires. Sur Debian ou Ubuntu :
sudo apt update
sudo apt install libsasl2-modules libsasl2-modules-sql sasl2-bin
Le paquet libsasl2-modules-sql fournit le plugin SQL Cyrus SASL pour MySQL/MariaDB, PostgreSQL et SQLite.
Ensuite, vérifiez le fichier de configuration Cyrus SASL utilisé par Postfix. Selon la distribution, il peut se trouver ici :
/etc/postfix/sasl/smtpd.conf
/etc/sasl2/smtpd.conf
/usr/lib/sasl2/smtpd.conf
Sur Debian/Ubuntu, vérifiez en priorité /etc/postfix/sasl/smtpd.conf et /etc/sasl2/smtpd.conf, selon votre paquet Postfix et votre historique de configuration.
Exemple de configuration Cyrus SASL avec SQL
Voici un exemple minimal de configuration Cyrus SASL utilisant le plugin SQL. À adapter à votre base et à votre schéma.
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mailuser
sql_passwd: mot_de_passe_solide
sql_database: mailserver
sql_select: SELECT password FROM users WHERE email = '%u@%r'Langage du code : HTTP (http)
Le message sql_select option missing indique justement que sql_select n’est pas défini alors que Cyrus SASL tente d’utiliser le plugin SQL. Vous avez donc deux solutions cohérentes :
- soit vous utilisez vraiment Cyrus SASL + SQL, et vous ajoutez une configuration SQL complète ;
- soit vous n’utilisez pas Cyrus SASL + SQL, et vous corrigez la configuration pour ne plus charger ce plugin.
Ne laissez pas Cyrus SASL chercher un plugin SQL “au cas où”. Un serveur mail aime les configurations explicites. Le flou, lui, finit toujours dans mail.log.
Si vous n’utilisez pas SQL avec Cyrus SASL
Si votre serveur utilise saslauthd, PAM, LDAP ou un autre backend, ne configurez pas auxprop_plugin: sql.
Exemple avec saslauthd :
pwcheck_method: saslauthd
mech_list: plain loginLangage du code : HTTP (http)
Dans ce cas, retirez ou commentez les lignes liées au plugin SQL :
# auxprop_plugin: sql
# sql_engine: mysql
# sql_hostnames: 127.0.0.1
# sql_user: mailuser
# sql_passwd: mot_de_passe
# sql_database: mailserver
# sql_select: SELECT password FROM users WHERE email = '%u@%r'Langage du code : PHP (php)
Puis rechargez les services concernés :
sudo systemctl restart saslauthd
sudo systemctl reload postfix
Vérifier la socket Dovecot si vous utilisez Dovecot SASL
Si votre configuration Postfix indique smtpd_sasl_type = dovecot, vérifiez que la socket existe :
sudo ls -l /var/spool/postfix/private/authLangage du code : PHP (php)
Vous devriez voir une socket Unix appartenant généralement à postfix:postfix, avec des droits compatibles avec Postfix.
Exemple attendu :
srw-rw---- 1 postfix postfix 0 May 16 18:42 /var/spool/postfix/private/authLangage du code : PHP (php)
Si le fichier n’existe pas, vérifiez Dovecot :
sudo systemctl status dovecot --no-pager
sudo journalctl -u dovecot -n 100 --no-pager
Vérifiez aussi que Postfix ne tourne pas en chroot avec un chemin inattendu. Sur Debian/Ubuntu, l’utilisation de private/auth relatif à /var/spool/postfix évite justement beaucoup de soucis de chroot.
Tester l’authentification SMTP
Pour tester SMTP AUTH proprement, utilisez swaks. Installez-le si nécessaire :
sudo apt update
sudo apt install swaks
Test sur le port submission 587 avec STARTTLS :
swaks \
--server mail.example.com \
--port 587 \
--tls \
--auth LOGIN \
--auth-user user@example.com \
--auth-password 'mot_de_passe' \
--from user@example.com \
--to test@example.netLangage du code : CSS (css)
Surveillez les logs pendant le test :
sudo journalctl -u postfix -f
Selon votre distribution, les logs peuvent aussi se trouver dans :
/var/log/mail.log
/var/log/maillogLangage du code : JavaScript (javascript)
Vérifier la configuration Postfix sans redémarrer à l’aveugle
Avant de relancer Postfix, vérifiez la configuration :
sudo postfix check
Affichez les paramètres réellement modifiés :
postconf -n
Et filtrez les paramètres SASL :
postconf -n | grep -i sasl
Cette approche évite de changer trois services à la fois, puis de ne plus savoir quelle modification a corrigé — ou cassé — l’authentification.
Cas Courier : ancien setup à moderniser
L’ancien article redémarrait tous les services Courier avec une boucle sur /etc/init.d/. Aujourd’hui, ce n’est plus une bonne pratique à recommander.
Si vous utilisez encore Courier pour l’authentification, vérifiez d’abord les services exacts :
systemctl list-units 'courier*' --type=serviceLangage du code : PHP (php)
Puis redémarrez uniquement le service concerné.
Cela dit, si vous maintenez un serveur mail moderne, Dovecot est généralement plus courant pour IMAP/POP et SASL avec Postfix. Une migration Courier vers Dovecot peut valoir le coup si le serveur porte encore une pile ancienne.
Ne mélangez pas Dovecot SASL et Cyrus SASL sans raison
Un serveur mail devient fragile quand plusieurs couches d’authentification se superposent sans intention claire.
Évitez les mélanges du type :
- Postfix configuré en Dovecot SASL ;
- fichier
smtpd.confCyrus SASL encore présent ; saslauthdactif sans usage clair ;- plugin SQL installé mais non configuré ;
- ancien Courier encore lancé par inertie.
Choisissez un chemin. Documentez-le. Testez-le. Le mail est déjà assez tatillon sans lui offrir un labyrinthe d’authentification.
Checklist de correction rapide
- Lisez l’erreur complète dans les logs Postfix.
- Vérifiez les backends disponibles avec
postconf -a. - Lisez la configuration SASL avec
postconf -n | grep -i sasl. - Si vous utilisez Dovecot, gardez
smtpd_sasl_path = private/auth. - Si vous utilisez Cyrus + SQL, installez
libsasl2-modules-sqlet configurezsql_select. - Si vous n’utilisez pas SQL, retirez
auxprop_plugin: sql. - Vérifiez la socket Dovecot si
smtpd_sasl_type = dovecot. - Testez SMTP AUTH avec
swaks. - Rechargez uniquement les services concernés.
Articles liés sur SkyMinds
- Fail2Ban : protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO
- Serveur dédié : la mise à jour vers Debian 8 Jessie
- Linux : vider un fichier sans le supprimer avec truncate
- Comment sécuriser efficacement votre serveur SSH avec SSH-Audit
À retenir
L’erreur _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql indique généralement que Cyrus SASL tente de charger un plugin SQL mal configuré ou absent.
Ne corrigez pas cela en commentant smtpd_sasl_path = private/auth au hasard. Si vous utilisez Dovecot SASL, cette ligne est normale et nécessaire.
La bonne correction dépend de votre architecture : avec Dovecot, vérifiez la socket private/auth. Avec Cyrus SASL + SQL, installez le plugin SQL et configurez sql_select. Si vous n’utilisez pas SQL, retirez la référence au plugin SQL. Le serveur mail aime les choix nets. Les demi-configurations, lui, les transforme en logs.
Sources
- Postfix : documentation officielle SASL
- Dovecot : Postfix and Dovecot SASL
- Cyrus SASL : options pwcheck_method, auxprop_plugin et SQL
- Debian : paquet libsasl2-modules-sql
Besoin d'un coup de main ?
Ce bug qui traîne depuis des semaines, ce plugin qui casse votre mise en page, cette fonctionnalité que personne n'arrive à implémenter proprement — c'est exactement ce que je règle au quotidien depuis 20 ans.
Parlons de votre problème →

