Corriger les erreurs SASL, stats-writer et SSL dans Dovecot

Après une mise à jour de Dovecot, un serveur mail peut soudain refuser l’authentification SMTP, remplir les logs avec une erreur stats-writer, ou ne plus initialiser correctement TLS.

Les messages ressemblent souvent à ceci :

postfix/smtps/smtpd: warning: SASL: Connect to private/auth failed: Connection refused
postfix/smtps/smtpd: fatal: no SASL authentication mechanisms
dovecot: lda(user@example.com): Error: net_connect_unix(/run/dovecot/stats-writer) failed: Permission denied
dovecot: imap-login: Error: Failed to initialize SSL server contextLangage du code : HTTP (http)

Ces erreurs ne viennent pas forcément d’une panne grave. Elles apparaissent souvent après un changement de version, une migration Debian/Ubuntu, une modification de Postfix, ou une configuration Dovecot restée sur d’anciennes directives.

Voici une méthode propre pour diagnostiquer et corriger les erreurs SASL, stats-writer, SSL/TLS et Diffie-Hellman dans Dovecot, sans empiler des permissions au hasard.

Commencer par identifier la version de Dovecot

Avant de corriger la configuration, vérifiez la version réellement installée :

dovecot --version

Affichez ensuite la configuration active :

doveconf -n

Cette commande est indispensable. Elle affiche la configuration finale après inclusion de tous les fichiers dans /etc/dovecot/conf.d/. Elle montre aussi les erreurs de syntaxe, les directives obsolètes et les doublons.

Sur un serveur systemd, regardez aussi l’état du service :

systemctl status dovecot --no-pager

Et les logs récents :

journalctl -u dovecot -n 100 --no-pager

Pour Postfix :

journalctl -u postfix -n 100 --no-pager

Ne redémarrez pas les services en boucle avant d’avoir lu les logs. C’est satisfaisant émotionnellement, mais rarement productif.

Erreur SASL : Postfix ne trouve plus le socket Dovecot

Si Postfix affiche ce type d’erreur :

SASL: Connect to private/auth failed: Connection refused
fatal: no SASL authentication mechanismsLangage du code : HTTP (http)

Postfix essaie d’utiliser Dovecot pour l’authentification SMTP, mais il ne parvient pas à joindre le socket SASL.

Dans une configuration classique, Dovecot doit créer ce socket :

/var/spool/postfix/private/authLangage du code : PHP (php)

Et Postfix doit pointer vers lui avec une configuration du type :

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yesLangage du code : PHP (php)

Vérifiez Postfix :

postconf -n | grep -E 'smtpd_sasl|smtpd_tls|submission'Langage du code : JavaScript (javascript)

Vérifiez aussi que Postfix sait utiliser Dovecot comme backend SASL :

postconf -a

La sortie doit contenir :

dovecot
Distingo, le livret à 2%

Corriger le socket SASL dans Dovecot

Ouvrez la configuration maître de Dovecot :

nano /etc/dovecot/conf.d/10-master.conf

Dans le bloc service auth, ajoutez ou corrigez le listener utilisé par Postfix :

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}Langage du code : PHP (php)

Cette configuration crée un socket accessible par Postfix, dans son environnement chroot habituel. C’est la configuration la plus courante pour l’authentification SMTP via Dovecot SASL.

Si vous utilisez aussi un compte virtuel comme vmail, ne confondez pas les deux usages. Le socket SASL pour Postfix appartient généralement à postfix:postfix. Le socket auth-userdb ou auth-master peut, lui, concerner la livraison locale, LMTP, LDA ou les comptes virtuels.

Vérifier que le socket SASL existe

Après correction, vérifiez la configuration Dovecot :

doveconf -n

Puis rechargez Dovecot :

systemctl reload dovecot

Si le reload échoue, ne forcez pas un restart. Relisez l’erreur :

journalctl -u dovecot -n 80 --no-pager

Vérifiez ensuite que le socket existe :

ls -l /var/spool/postfix/private/authLangage du code : PHP (php)

Vous devez obtenir une ligne proche de :

srw-rw---- 1 postfix postfix ... /var/spool/postfix/private/authLangage du code : PHP (php)

Rechargez ensuite Postfix :

systemctl reload postfix

Tester l’authentification SMTP

Après correction, testez le port submission :

openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.comLangage du code : CSS (css)

Dans la session SMTP, tapez :

EHLO test

Vous devez voir une ligne indiquant les mécanismes d’authentification disponibles, par exemple :

250-AUTH PLAIN LOGIN

Si AUTH n’apparaît pas, Postfix ne voit toujours pas correctement Dovecot SASL, ou la configuration du port submission ne l’expose pas comme prévu.

Erreur stats-writer : Permission denied

Après une mise à jour Dovecot 2.3 ou supérieure, vous pouvez voir cette erreur :

Error: net_connect_unix(/run/dovecot/stats-writer) failed: Permission deniedLangage du code : JavaScript (javascript)

Ou, selon la distribution :

Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission deniedLangage du code : JavaScript (javascript)

/var/run pointe souvent vers /run. Donc les deux chemins peuvent désigner le même endroit.

Cette erreur signifie qu’un processus lié à Dovecot essaie d’écrire dans le socket de statistiques, mais n’a pas les permissions nécessaires. Cela arrive souvent avec dovecot-lda, LMTP, un utilisateur virtuel comme vmail, un webmail, PostfixAdmin, Usermin, ou un service qui lance des commandes Dovecot avec un utilisateur différent.

Vérifier les permissions du socket stats-writer

Commencez par regarder le socket actuel :

ls -l /run/dovecot/stats-writer
ls -l /run/dovecot/stats-reader

Vous pouvez obtenir quelque chose comme :

srw-rw---- 1 root dovecot 0 ... /run/dovecot/stats-writer

Dans ce cas, seuls root et les membres du groupe dovecot peuvent écrire dans ce socket.

Identifiez ensuite l’utilisateur qui déclenche l’erreur. Dans les logs, cherchez le processus concerné :

journalctl -u dovecot -n 200 --no-pager | grep -i stats-writer
grep -Ri "stats-writer" /var/log/mail.log /var/log/maillog 2>/dev/nullLangage du code : JavaScript (javascript)

Si l’erreur vient de lda ou lmtp lancé comme vmail, il faut permettre à cet utilisateur d’accéder au socket. Si elle vient de www-data, vérifiez pourquoi votre serveur web doit parler directement à Dovecot. Ce n’est pas toujours nécessaire.

Correction prudente : ajouter l’utilisateur au groupe dovecot

Si l’utilisateur qui déclenche l’erreur doit vraiment accéder à Dovecot, la correction la plus prudente consiste souvent à l’ajouter au groupe dovecot.

Exemple pour un utilisateur virtuel vmail :

usermod -aG dovecot vmail

Exemple pour www-data, seulement si vous avez confirmé que votre webmail ou outil d’administration en a besoin :

usermod -aG dovecot www-data

Vérifiez ensuite :

id vmail
id www-data

Puis redémarrez les services concernés pour que les nouveaux groupes soient pris en compte :

systemctl restart dovecot
systemctl restart postfix

Si l’utilisateur concerne PHP-FPM, redémarrez aussi le pool PHP concerné :

systemctl restart php8.3-fpmLangage du code : CSS (css)

Adaptez la version PHP à votre serveur.

Correction alternative : élargir le mode du socket stats-writer

Une autre solution consiste à rendre le socket stats-writer accessible plus largement.

Dans /etc/dovecot/conf.d/10-master.conf, ajoutez ou corrigez :

service stats {
  unix_listener stats-writer {
    mode = 0666
  }
}

Cette solution est connue pour faire disparaître l’erreur. Elle est aussi plus large en termes de permissions. Sur un serveur mono-usage, cela peut être acceptable. Sur un serveur multi-utilisateur, je préfère limiter l’accès par groupe quand c’est possible.

Ne faites pas simplement :

chmod 666 /run/dovecot/stats-writer

Cette modification disparaîtra au prochain redémarrage de Dovecot, car le socket est recréé par le service. Corrigez la configuration, pas seulement le fichier temporaire.

Éviter les blocs stats-writer en double

Si Dovecot refuse de démarrer après ajout du bloc service stats, vous avez peut-être défini plusieurs fois le même listener.

Cherchez les occurrences :

grep -R "stats-writer" /etc/dovecot/Langage du code : JavaScript (javascript)

Et inspectez la configuration finale :

doveconf -n | sed -n '/service stats/,/}/p'Langage du code : JavaScript (javascript)

Gardez un seul bloc clair. Les correctifs copiés-collés à plusieurs endroits finissent souvent par créer des erreurs plus bruyantes que le problème initial.

Erreur SSL : Diffie-Hellman et anciennes directives Dovecot

Après une mise à jour Dovecot, vous pouvez aussi rencontrer des erreurs SSL/TLS liées à Diffie-Hellman ou à d’anciennes directives.

Ancienne directive Dovecot 2.2 :

ssl_parameters_regenerate = 168
ssl_dh_parameters_length = 4096

En Dovecot 2.3, cette logique a été remplacée par un fichier DH explicite :

ssl_dh = </etc/dovecot/dh.pemLangage du code : JavaScript (javascript)

Le caractère < est volontaire. Dans Dovecot 2.3, il indique à Dovecot de lire le contenu depuis le fichier.

Vous pouvez générer un fichier DH avec :

openssl dhparam -out /etc/dovecot/dh.pem 4096
chown root:root /etc/dovecot/dh.pem
chmod 0644 /etc/dovecot/dh.pem

Cette génération peut prendre du temps. C’est normal. Le serveur a l’air de méditer, mais il travaille.

Dovecot 2.3 ou 2.4 : attention aux noms de directives SSL

Avant de modifier 10-ssl.conf, vérifiez votre version :

dovecot --version

Sur Dovecot 2.3, vous verrez souvent des directives comme :

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_dh = </etc/dovecot/dh.pem
ssl_min_protocol = TLSv1.2Langage du code : JavaScript (javascript)

Sur Dovecot 2.4, la documentation actuelle utilise de nouveaux noms pour certains réglages TLS, par exemple :

ssl_server_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pemLangage du code : JavaScript (javascript)

Ne mélangez pas aveuglément les syntaxes 2.3 et 2.4. Si doveconf -n indique une directive inconnue, adaptez la configuration à votre version installée plutôt que de forcer l’ancienne syntaxe.

Corriger ssl_protocols devenu ssl_min_protocol

Une ancienne configuration pouvait contenir :

ssl_protocols = !SSLv3

En Dovecot 2.3, on utilise plutôt :

ssl_min_protocol = TLSv1.2

Sur un serveur moderne, TLS 1.2 reste un minimum raisonnable pour compatibilité large. TLS 1.3 sera négocié automatiquement si le serveur, OpenSSL et le client le supportent.

Évitez les anciennes valeurs trop permissives. IMAP et SMTP transportent des identifiants. Les clients mail n’ont pas besoin d’un musée SSL ouvert en permanence.

Vérifier les certificats utilisés par Dovecot

Affichez les chemins configurés :

doveconf -n | grep -E 'ssl_|cert|key|dh'Langage du code : JavaScript (javascript)

Vérifiez que les fichiers existent :

ls -l /etc/letsencrypt/live/mail.example.com/fullchain.pem
ls -l /etc/letsencrypt/live/mail.example.com/privkey.pem
ls -l /etc/dovecot/dh.pem

Dovecot doit pouvoir lire la clé privée. Si vous utilisez Let’s Encrypt, les permissions et groupes dépendent de votre distribution et de votre méthode de déploiement. Ne mettez pas la clé privée en lecture globale pour “régler vite fait”. Réparez les groupes et permissions proprement.

Vérifiez le certificat :

openssl x509 -in /etc/letsencrypt/live/mail.example.com/fullchain.pem -noout -subject -issuer -dates

Vérifiez la clé privée :

openssl pkey -in /etc/letsencrypt/live/mail.example.com/privkey.pem -noout -check

Tester IMAPS et POP3S avec OpenSSL

Testez IMAPS sur le port 993 :

openssl s_client -connect mail.example.com:993 -servername mail.example.comLangage du code : CSS (css)

Testez POP3S si vous l’utilisez :

openssl s_client -connect mail.example.com:995 -servername mail.example.comLangage du code : CSS (css)

Vous cherchez notamment :

Verify return code: 0 (ok)Langage du code : JavaScript (javascript)

Si la chaîne de certificats est incomplète, vérifiez que vous utilisez bien fullchain.pem, pas seulement cert.pem.

Valider la configuration avant redémarrage

Avant de redémarrer Dovecot, validez la configuration :

doveconf -n > /tmp/dovecot-effective.confLangage du code : JavaScript (javascript)

Si la commande échoue, corrigez d’abord l’erreur. Si elle réussit, vous pouvez recharger Dovecot :

systemctl reload dovecot

Si vous avez modifié les sockets SASL utilisés par Postfix, rechargez aussi Postfix :

systemctl reload postfix

Si les erreurs persistent ou si les sockets sont recréés seulement au démarrage complet, utilisez un redémarrage contrôlé :

systemctl restart dovecot
systemctl restart postfix

Ensuite, surveillez les logs en direct :

journalctl -u dovecot -u postfix -f

Commandes de diagnostic utiles

Voici les commandes que j’utilise le plus souvent pour diagnostiquer ce type d’incident :

# Version Dovecot.
dovecot --version

# Configuration effective.
doveconf -n

# Configuration liée à SSL/TLS.
doveconf -n | grep -E 'ssl_|cert|key|dh'

# Configuration Postfix liée à SASL.
postconf -n | grep -E 'smtpd_sasl|smtpd_tls|submission'

# Backends SASL supportés par Postfix.
postconf -a

# Socket SASL Postfix.
ls -l /var/spool/postfix/private/auth

# Sockets stats Dovecot.
ls -l /run/dovecot/stats-*

# Logs Dovecot.
journalctl -u dovecot -n 100 --no-pager

# Logs Postfix.
journalctl -u postfix -n 100 --no-pager

# Erreurs mail classiques.
grep -Ei 'sasl|stats-writer|ssl|tls|dovecot|postfix' /var/log/mail.log 2>/dev/null | tail -n 100Langage du code : PHP (php)

Exemple de configuration Dovecot 2.3 propre

Voici une base typique pour un serveur Dovecot 2.3 avec Postfix SASL, comptes virtuels et TLS Let’s Encrypt.

Dans /etc/dovecot/conf.d/10-master.conf :

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

  unix_listener auth-userdb {
    mode = 0660
    user = vmail
    group = vmail
  }
}

service stats {
  unix_listener stats-writer {
    mode = 0666
  }
}Langage du code : PHP (php)

Dans /etc/dovecot/conf.d/10-ssl.conf pour Dovecot 2.3 :

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_dh = </etc/dovecot/dh.pem
ssl_min_protocol = TLSv1.2Langage du code : JavaScript (javascript)

Adaptez évidemment mail.example.com, les chemins de certificats, l’utilisateur virtuel et les permissions à votre serveur.

Exemple de logique pour Dovecot 2.4

Sur Dovecot 2.4, ne recopiez pas une configuration 2.3 sans vérifier les noms de directives. La configuration TLS a évolué, et la documentation actuelle utilise notamment des réglages comme :

ssl_server_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pemLangage du code : JavaScript (javascript)

La commande qui tranche reste toujours :

doveconf -n

Si Dovecot vous dit qu’une directive est inconnue, croyez Dovecot. Il est têtu, mais généralement bien informé sur sa propre configuration.

Faut-il ignorer l’erreur stats-writer ?

Parfois, oui. Si le mail est bien délivré, si l’authentification fonctionne, si IMAP répond correctement, et si l’erreur stats-writer apparaît rarement, elle peut être peu critique.

Cependant, je préfère la corriger si elle remplit les logs ou si elle masque d’autres erreurs. Des logs trop bruyants deviennent inutiles. Le jour où une vraie panne arrive, elle se cache dans le carnaval.

La bonne approche :

  • identifier quel processus déclenche l’erreur ;
  • vérifier s’il doit vraiment accéder à Dovecot ;
  • corriger par groupe si possible ;
  • utiliser mode = 0666 seulement si c’est le compromis retenu ;
  • documenter la raison dans le fichier de configuration.

Checklist de réparation Dovecot après mise à jour

  • Vérifier la version avec dovecot --version.
  • Afficher la configuration effective avec doveconf -n.
  • Lire les logs Dovecot et Postfix avec journalctl.
  • Vérifier que Postfix supporte Dovecot SASL avec postconf -a.
  • Vérifier smtpd_sasl_type et smtpd_sasl_path.
  • Corriger le socket /var/spool/postfix/private/auth.
  • Vérifier les permissions du socket SASL.
  • Identifier le processus qui déclenche stats-writer.
  • Corriger les permissions du socket stats-writer ou les groupes utilisateurs.
  • Adapter les directives SSL à Dovecot 2.3 ou 2.4.
  • Vérifier les chemins fullchain.pem, privkey.pem et dh.pem.
  • Tester IMAPS avec openssl s_client.
  • Tester SMTP submission avec openssl s_client -starttls smtp.
  • Recharger Dovecot et Postfix.
  • Surveiller les logs en direct.

Besoin d’aide pour réparer Dovecot, Postfix ou votre serveur mail ?

Besoin d’un administrateur système pour réparer votre serveur mail ?

Si Dovecot ou Postfix ne redémarre plus après une mise à jour, que SASL refuse l’authentification, ou que TLS casse vos connexions IMAP/SMTP, je peux vous aider à diagnostiquer la panne proprement.

J’interviens sur les serveurs Linux, Postfix, Dovecot, TLS, DNS, SPF, DKIM, DMARC et WordPress pour remettre les services mail en état, corriger les permissions, sécuriser les certificats et documenter la configuration.

  • Diagnostic Postfix, Dovecot, SASL, LMTP, LDA et comptes virtuels.
  • Correction des sockets, permissions, groupes système et services systemd.
  • Configuration TLS, certificats Let’s Encrypt, DANE/TLSA, SPF, DKIM et DMARC.
  • Analyse des logs mail, files d’attente, rejets SMTP et erreurs IMAP.
  • Intervention propre, testée et documentée.

Vous voulez éviter de transformer une mise à jour mail en séance d’exorcisme serveur ? Contactez-moi. Je vous aiderai à remettre Postfix et Dovecot d’aplomb.

FAQ : erreurs Dovecot SASL, stats-writer et SSL

Pourquoi Postfix affiche “SASL: Connect to private/auth failed” ?

Postfix ne trouve pas ou ne peut pas accéder au socket Dovecot SASL. Vérifiez smtpd_sasl_type = dovecot, smtpd_sasl_path = private/auth, puis le listener Dovecot /var/spool/postfix/private/auth.

Où déclarer le socket SASL pour Postfix dans Dovecot ?

Dans /etc/dovecot/conf.d/10-master.conf, dans le bloc service auth, avec un unix_listener /var/spool/postfix/private/auth appartenant généralement à postfix:postfix en mode 0660.

Que signifie l’erreur stats-writer Permission denied ?

Un processus Dovecot, LDA, LMTP, webmail ou outil d’administration essaie d’écrire dans le socket de statistiques Dovecot sans avoir les permissions nécessaires. Il faut identifier l’utilisateur concerné, puis corriger les groupes ou le mode du socket.

Puis-je mettre stats-writer en mode 0666 ?

Oui, c’est un contournement connu. Mais sur un serveur multi-utilisateur, préférez d’abord une correction par groupe si elle suffit. Ne faites pas un simple chmod manuel sur le socket : il sera perdu au redémarrage.

Pourquoi ssl_dh ne fonctionne plus après mise à jour ?

La syntaxe dépend de la version Dovecot. En Dovecot 2.3, on utilise ssl_dh = </etc/dovecot/dh.pem. En Dovecot 2.4, la documentation actuelle utilise notamment ssl_server_dh_file. Vérifiez toujours avec dovecot --version et doveconf -n.

Comment tester TLS sur Dovecot ?

Utilisez openssl s_client -connect mail.example.com:993 -servername mail.example.com pour IMAPS. Pour SMTP submission via Postfix, utilisez openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.com.

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.

2 pensées sur “Corriger les erreurs SASL, stats-writer et SSL dans Dovecot”

  1. Re: Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission denied))

    Don’t change the dovecot writer/reader permissions just to get this working. It will break with future config upgrades and widens dovecot’s socket permissions too far which could lead to increased security issues. If you want your web server user www-data (or whatever PHP/PHP-FPM is running as) to be able to make changes to dovecot, add the dovecot group to the www-data username.

    usermod -a -G dovecot www-data

    Répondre

Opinions