Postfix : corriger l’erreur SASL _sasl_plugin_load failed pour le plugin SQL

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 SASLUsageConfiguration typique
Dovecot SASLPostfix réutilise l’authentification Dovecotsmtpd_sasl_type = dovecot et smtpd_sasl_path = private/auth
Cyrus SASLPostfix utilise la bibliothèque Cyrus SASLsmtpd_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.

Kinsta: Premium Managed WordPress hosting

Étape 2 : lire la configuration SASL active

Affichez les paramètres SASL actifs de Postfix :

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.

Distingo, le livret à 2%

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.conf Cyrus SASL encore présent ;
  • saslauthd actif 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-sql et configurez sql_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

À 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

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Laisser un commentaire