Postfix + Dovecot : utilisateurs virtuels dans une base MySQL

Amélioration du serveur de messagerie

Note : cet article n’a pas été mis-à-jour depuis 2008, certainement que beaucoup de paramètres ont évolué.

Dans l’article intitulé Serveur de messagerie simple avec Postfix et Dovecot, il a été vu comment mettre en place un serveur de messagerie simple grâce au MTA Postfix et à Dovecot pour l’IMAP. Cet article va ajouter la gestion des utilisateurs virtuels (des adresses emails) dans une base de données MySQL. Cet approche sera beaucoup plus souple dans la gestion du serveur, l’ajout/édition/suppression d’une adresse se fera très simplement en ajoutant un utilisateur dans la base des utilisateurs virtuels, alors qu’auparavant, il fallait ré-éditer des fichiers texte.

L’article suivant de llaumgui m’a bien aidé dans la mise en place du support MySQL : http://www.llaumgui.com/post/Serveur-mail-postfix-/-postfix-mysql-/-Dovecot-/-RoundCube-/-spamassassin-sous-CentOS-5

Postfix

En premier lieu, la configuration du MTA doit être modifiée pour qu’il lise les domaines et utilisateurs virtuels dans la base MySQL et non plus dans un fichier de configuration. Il est supposé que le serveur MySQL est fonctionnel et qu’il existe une base accessible pour ajouter les tables.

Voici le schéma de la table MX_domains des domaines virtuels à créer sur le serveur MySQL :

CREATE TABLE IF NOT EXISTS `MX_domains` (
	`id` tinyint(8) NOT NULL auto_increment,
	`domain` varchar(128) NOT NULL,
	PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Et la table MX_users qui contiendra les informations des utilisateurs :

CREATE TABLE IF NOT EXISTS `MX_users` (
	`id` tinyint(8) NOT NULL auto_increment,
	`email` varchar(128) NOT NULL,
	`password` varchar(128) NOT NULL,
	`name` varchar(128) NOT NULL default '',
	`uid` smallint(5) unsigned NOT NULL default '1000',
	`gid` smallint(5) unsigned NOT NULL default '1000',
	`domain` varchar(128) NOT NULL default '',
	`maildir` varchar(255) NOT NULL default '',
	`is_imap` tinyint(1) unsigned NOT NULL default '1',
	`is_active` tinyint(1) NOT NULL default '1',
	PRIMARY KEY  (`id`),
	UNIQUE KEY `address` (`email`),
	KEY `domain` (`domain`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

A noter que le champ email désigne la partie de l’adresse email avant l’arobase, par exemple pour toto@exemple.net, il faudra renseigner seulement toto dans le champ email. Le mot de passe quand à lui sera un hash MD5 dans la base.

Maintenant, il faut éditer le fichier main.cf de configuration de Postfix, en changeant ces deux lignes :

virtual_mailbox_domains = /etc/postfix/domains
virtual_mailbox_maps = hash:/etc/postfix/user_mailboxes_path

Par :

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailboxes.cf

Le préfixe mysql indique bien que les données vont être extraites de la base de données relationel. Mais les
deux fichiers mysql_virtual_domains.cf et mysql_virtual_mailboxes.cf correspondant contenant les
requêtes SQL ne sont pas encore crées. Les voici :

mysql_virtual_domains.cf

user = dbuser
password = dbpassword
dbname = mailserver
hosts = localhost
query = SELECT id FROM MX_domains WHERE domain='%s'

mysql_virtual_mailboxes.cf

user = dbuser
password = dbpassword
dbname = mailserver
hosts = localhost
query = SELECT maildir FROM MX_users WHERE email='%s' AND is_active=1

Postfix peut être redémarré :

# /etc/init.d/postfix restart

Dovecot

La première chose à faire est d’ajouter le module MySQL pour Dovecot, sous Fedora :

# yum install dovecot-mysql

En ce qui concerne sa configuration, les manipulations sont un peu similaires, à savoir, créer des fichiers de requêtes SQL pour
que le serveur IMAP ramène les bonnes données de la base et non plus d’un fichier plat. Voici la partie qui va être
modifiée du fichier /etc/dovecot.conf pour passer de :

mechanisms = plain
	passdb passwd-file {
	args = /etc/postfix/dovecot/users.conf
}

A ceci :

mechanisms = plain login digest-md5 cram-md5
passdb sql {
	args = /etc/postfix/dovecot/mysql_users.cf
}

On note l’ajout des mécanismes avec hash : digest-md5 (je n’avais mis que la gestion de mot de passe en texte brut dans l’article précédent). Ainsi que la vérification du mot de passe qui ne se fait plus par un fichier mais par une requête SQL dans le fichier mysql_users.cf sous /etc/postfix/dovecot/ (choix arbitraire), comme suit :

driver = mysql
connect = host=localhost dbname=mailserver user=dbuser password=dbpassword
default_pass_scheme = PLAIN-MD5
password_query = SELECT password FROM MX_users \
WHERE email = '%n' AND is_active = 1
user_query = SELECT concat(email, '@', domain) AS user \
FROM MX_users WHERE email = '%n'

Dovecot veut l’adresse complète comme nom d’utilisateur, donc on utilise la fonction concat() de MySQL pour la construire.

A noter que la partie userdb pourrait être dans une table également, mais elle est laissée comme telle en static, car l’emplacement des messages ne bougera pas dans ce cas-ci, ils seront toujours sous /home/vmail/domaine/utilisateur et seront crées automatiquement lors d’ajout de nouvelles boîtes virtuelles :

userdb static {
	# Chemin vers les BAL
	args = uid=vmail gid=vmail home=/home/vmail/%d/%n/
}

Redémarrage de Dovecot :

# /etc/init.d/dovecot restart

Tout devrait fonctionner maintenant. Pour ajouter/supprimer/éditer un utilisateur, il suffit de le faire dans la base de données, par exemple par l’intermédiaire de phpMyAdmin ou d’un script bash (ou autre langage) qui fera peut-être l’objet d’un prochain article.

Note : les anti-slash \ ne sont pas à taper, ils indiquent que j’ai coupé les lignes pour que ça ne dépasse pas du cadre. Il s’agit d’une seule et même ligne.

14 réflexions sur « Postfix + Dovecot : utilisateurs virtuels dans une base MySQL »

  1. Bonjour, j’ai suivi ce tuto en complément du premier sur Postfix + Dovecot, D’ailleurs je dois que tu es le seul à être simple, et compréhensif, en suivant ton tuto Postfix et Dovecot ont fonctionné tout de suite.

    Bref, j’ai donc voulu rajouter la gestion par Mysql.

    Lorsque je me connecte en telnet cela fonctionne très bien, que ce soit depuis le server debian:

    root@mail:~# telnet 127.0.0.1 143
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN AUTH=DIGEST-MD5 AUTH=CRAM-MD5] Dovecot ready.
    10 login test2@help.info test2
    10 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
    20 select inbox
    * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
    * 0 EXISTS
    * 0 RECENT
    * OK [UIDVALIDITY 1354702862] UIDs valid
    * OK [UIDNEXT 1] Predicted next UID
    * OK [HIGHESTMODSEQ 1] Highest
    20 OK [READ-WRITE] Select completed.
    30 list ""*
    * LIST (\HasNoChildren) "." "INBOX"
    30 OK List completed.
    40 logout
    * BYE Logging out
    40 OK Logout completed.
    Connection closed by foreign host.

    Lorsque j’essaye de rajouter ce compte a Outlook, il arrive bien à se connecter au serveur IMAP, mais pas au SMTP.

    Et un dernier soucis, je souhaite installer Roundcube, je l’ai installé en suivant divers tutos, tout est au vert, sauf:
    l’authentification SMTP et IMAP.

    Je te remercie d’avance.
    Merci encore pour tes tutos.

    J’espère avoir été assez clair dans ma demande.

    1. Merci pour ton message, toujours content de savoir qu’un de mes articles a pu aider quelqu’un ;]

      Et qu’est-ce que disent les logs (serveur) lorsque tu essaies d’envoyer un email depuis Outlook? Coté firewall, les bons ports sont ouverts?

      1. Alors, cela a un peu évolué.

        Lorsque je n’utilise pas Mysql pour postfix et dovecot:

        – Je peux envoyer et revecoir des mails depuis Outlook sans soucis.

        – Je peux faire une telnet distant sur les ports 25 et 143

        – Je ne peux pas me connecter avec roundcube.

        Lorsque j’utilise postfix et dovecot AVEC Mysql:

        – Je ne peux pas enregistrer le compte sur Outlook

        – Je ne peux pas faire de telnet local sur le port 25

        – Je ne peux pas faire de telnet distant sur les 25 et 143

        – Je ne peux toujours pas me connecter avec roundcube.

        Concernant les ports, ce n’est pas vraiment gênant, il s’agit de monter un serveur de messagerie local pour ma boite, c’est sur un réseau de prod coupé d’internet.
        J’ai pris un vieux PC, installé une Squeeze. Installé Xampp, (oui j’avoue j’ai choisis la facilité).

        Et ensuite j’ai attaqué postfix + dovecot + mysql + roudcube, mais étant assez novice …

        Merci de ta réponse aussi rapide, j’espère que tu pourra m’éclairer

    1. Je suis désolé, je suis au boulot là, j’ai pas trop le temps de m’appuyer sur ton problème maintenant.
      Je suis vosgien oui, Vosges du sud, et j’ai fait mes études à St-Dié. Mais je vis à Rome depuis un peu plus de deux ans.

      1. Oui, je comprend bien, désolé de t’avoir dérangé.

        Non je te disais, parce que j’ai ma belle famille qui habite à Ban-de-laveline.

        Bref, si tu as le temps et l’envie, je serais ravi d’avoir tes conseils plus tard. Par contre je ne pourrais te donner les confs le soir étant donné que c’est à mon travail.

        Merci

        1. Bonjour, je reviens

          Alors le problème commence quand je veux utiliser le sasl.
          J’ai pu voir plusieurs tutos en traitant, mais à chaque différents,
          notamment au niveau du path du socket

          Toi tu mets => /var/run/dovecot/auth-client
          Et d’autres => /var/spool/postfix/private/auth

          Et dans le deux cas je n’ai aucunes correspondances avec ces chemins.

          J’en profite pour t’envoyer mes conf actuelles, fonctionnelles, sans sasl.


          POSTFIX
          ——–

          main.cf

          alias_database = $alias_maps
          alias_maps = hash:/etc/aliases
          append_dot_mydomain = no
          biff = no
          broken_sasl_auth_clients = yes
          command_directory = /usr/sbin
          config_directory = /etc/postfix
          daemon_directory = /usr/lib/postfix
          data_directory = /var/lib/postfix
          debug_peer_level = 2
          delay_warning_time = 4h
          html_directory = no
          inet_interfaces = all
          mail_owner = postfix
          mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
          mailbox_size_limit = 512000000
          mailq_path = /usr/bin/mailq.postfix
          manpage_directory = /usr/share/man
          masquerade_domains = help.info
          message_size_limit = 50000000
          mydestination = $myhostname, localhost.$myhostname, localhost
          mydomain = help.info
          myhostname = mail.local.help.info
          mynetworks = 192.168.2.0/24, 192.168.1.0/24, 127.0.0.0/8
          myorigin = $myhostname
          newaliases_path = /usr/bin/newaliases
          queue_directory = /var/spool/postfix
          readme_directory = no
          recipient_delimiter = +
          relayhost = [smtp.orange.fr]
          sendmail_path = /usr/sbin/sendmail
          setgid_group = postdrop
          #smtp_generic_maps = hash:/etc/postfix/generic
          smtpd_banner = $myhostname ESMTP
          smtpd_recipient_limit = 50
          unknown_local_recipient_reject_code = 550
          #virtual_alias_maps = hash:/etc/postfix/user_aliases
          virtual_gid_maps = static:6000
          virtual_mailbox_base = /home/vmail
          virtual_mailbox_domains = /etc/postfix/domains
          virtual_mailbox_limit = 512000000
          virtual_mailbox_maps = hash:/etc/postfix/user_mailboxes_path
          virtual_minimum_uid = 6000
          virtual_uid_maps = static:6000

          master.cf

          #
          # Postfix master process configuration file. For details on the format
          # of the file, see the master(5) manual page (command: « man 5 master »).
          #
          # Do not forget to execute « postfix reload » after editing this file.
          #
          # ==========================================================================
          # service type private unpriv chroot wakeup maxproc command + args
          # (yes) (yes) (yes) (never) (100)
          # ==========================================================================
          smtp inet n – – – – smtpd
          #submission inet n – – – – smtpd
          # -o smtpd_tls_security_level=encrypt
          # -o smtpd_sasl_auth_enable=yes
          # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
          # -o milter_macro_daemon_name=ORIGINATING
          #smtps inet n – – – – smtpd
          # -o smtpd_tls_wrappermode=yes
          # -o smtpd_sasl_auth_enable=yes
          # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
          # -o milter_macro_daemon_name=ORIGINATING
          #628 inet n – – – – qmqpd
          pickup fifo n – – 60 1 pickup
          cleanup unix n – – – 0 cleanup
          qmgr fifo n – n 300 1 qmgr
          #qmgr fifo n – – 300 1 oqmgr
          tlsmgr unix – – – 1000? 1 tlsmgr
          rewrite unix – – – – – trivial-rewrite
          bounce unix – – – – 0 bounce
          defer unix – – – – 0 bounce
          trace unix – – – – 0 bounce
          verify unix – – – – 1 verify
          flush unix n – – 1000? 0 flush
          proxymap unix – – n – – proxymap
          proxywrite unix – – n – 1 proxymap
          smtp unix – – – – – smtp
          # When relaying mail as backup MX, disable fallback_relay to avoid MX loops
          relay unix – – – – – smtp
          -o smtp_fallback_relay=
          # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
          showq unix n – – – – showq
          error unix – – – – – error
          retry unix – – – – – error
          discard unix – – – – – discard
          local unix – n n – – local
          virtual unix – n n – – virtual
          lmtp unix – – – – – lmtp
          anvil unix – – – – 1 anvil
          scache unix – – – – 1 scache
          #
          # ====================================================================
          # Interfaces to non-Postfix software. Be sure to examine the manual
          # pages of the non-Postfix software to find out what options it wants.
          #
          # Many of the following services use the Postfix pipe(8) delivery
          # agent. See the pipe(8) man page for information about ${recipient}
          # and other message envelope options.
          # ====================================================================
          #
          # maildrop. See the Postfix MAILDROP_README file for details.
          # Also specify in main.cf: maildrop_destination_recipient_limit=1
          #
          maildrop unix – n n – – pipe
          flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
          #
          # ====================================================================
          #
          # Recent Cyrus versions can use the existing « lmtp » master.cf entry.
          #
          # Specify in cyrus.conf:
          # lmtp cmd= »lmtpd -a » listen= »localhost:lmtp » proto=tcp4
          #
          # Specify in main.cf one or more of the following:
          # mailbox_transport = lmtp:inet:localhost
          # virtual_transport = lmtp:inet:localhost
          #
          # ====================================================================
          #
          # Cyrus 2.1.5 (Amos Gouaux)
          # Also specify in main.cf: cyrus_destination_recipient_limit=1
          #
          #cyrus unix – n n – – pipe
          # user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
          #
          # ====================================================================
          # Old example of delivery via Cyrus.
          #
          #old-cyrus unix – n n – – pipe
          # flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
          #
          # ====================================================================
          #
          # See the Postfix UUCP_README file for configuration details.
          #
          uucp unix – n n – – pipe
          flags=Fqhu user=uucp argv=uux -r -n -z -a$sender – $nexthop!rmail ($recipient)
          #
          # Other external delivery methods.
          #
          ifmail unix – n n – – pipe
          flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
          bsmtp unix – n n – – pipe
          flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
          scalemail-backend unix – n n – 2 pipe
          flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
          mailman unix – n n – – pipe
          flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
          ${nexthop} ${user}

          cpt => Script maison pour modifier ou rajouter des comptes

          #!/bin/bash
          # +—————————————————-+
          # | |
          # | Script de création des comptes |
          # | pour Postfix |
          # | |
          # +—————————————————-+
          # Le 06/12/2012
          #
          date=`date ‘+%A %d %B %Y à %T’`
          #
          > /etc/postfix/user_mailboxes_path
          #
          echo « # +——————————————————-+ » >> /etc/postfix/user_mailboxes_path
          echo « # | | » >> /etc/postfix/user_mailboxes_path
          echo « # | Base des comptes email | » >> /etc/postfix/user_mailboxes_path
          echo « # | Postfix | » >> /etc/postfix/user_mailboxes_path
          echo « # | | » >> /etc/postfix/user_mailboxes_path
          echo « # +——————————————————-+ » >> /etc/postfix/user_mailboxes_path
          #
          #
          echo «  » >> /etc/postfix/user_mailboxes_path
          echo «  » >> /etc/postfix/user_mailboxes_path
          echo « webmaster@help.info help.info/webmaster/ » >> /etc/postfix/user_mailboxes_path
          echo «  » >> /etc/postfix/user_mailboxes_path
          #
          #
          echo « # Controle qualité » >> /etc/postfix/user_mailboxes_path
          echo «  » >> /etc/postfix/user_mailboxes_path
          #
          #
          echo « # Direction » >> /etc/postfix/user_mailboxes_path
          echo «  » >> /etc/postfix/user_mailboxes_path
          #
          #
          echo « # Service commercial » >> /etc/postfix/user_mailboxes_path
          echo «  » >> /etc/postfix/user_mailboxes_path
          #
          #
          o « # +—————————————————-+ » >> /etc/postfix/user_mailboxes_path
          echo « # | | » >> /etc/postfix/user_mailboxes_path
          echo « # | Base mise à jour le | » >> /etc/postfix/user_mailboxes_path
          echo « # | $date | » >> /etc/postfix/user_mailboxes_path
          echo « # | | » >> /etc/postfix/user_mailboxes_path
          echo « # +—————————————————-+ » >> /etc/postfix/user_mailboxes_path
          rm /etc/postfix/user_mailboxes_path.db
          postmap /etc/postfix/user_mailboxes_path


          DOVECOT

          dovecot.conf

          # On veut des BAL IMAP
          protocols = imap

          # Chemin des les logs
          log_path = /var/log/dovecot.log
          info_log_path = /var/log/dovecot-info.log

          # Je ne veux pas de SSL
          #ssl_disable = yes
          disable_plaintext_auth = no

          # Les BAL seront au format Maildir
          mail_location = maildir:/home/vmail/%d/%n

          # Optimisations
          dotlock_use_excl=yes
          maildir_copy_with_hardlinks=yes

          # Configuration de l’authentification
          auth_verbose = yes
          auth default {
          mechanisms = plain
          passdb passwd-file {
          # Chemin vers les utilisateurs dovecot (les adresses email gérées)
          args = /etc/dovecot/passwd
          }
          userdb static {
          # Chemin vers les BAL
          args = uid=vmail gid=vmail home=/home/vmail/%d/%n/
          }
          }

          mdp => script maison pour modifier ou rajouter les mots de passe

          #!/bin/bash
          # +—————————————————-+
          # | |
          # | Script de création des mdp |
          # | pour Dovecot |
          # | |
          # +—————————————————-+
          #
          # Le 06/12/2012
          #
          date=`date ‘+%A %d %B %Y à %T’`
          #
          > /etc/dovecot/passwd
          #
          echo « # +—————————————————-+ » >> /etc/dovecot/passwd
          echo « # | | » >> /etc/dovecot/passwd
          echo « # | Base de mot de passe Dovecot | » >> /etc/dovecot/passwd
          echo « # | | » >> /etc/dovecot/passwd
          echo « # +—————————————————-+ » >> /etc/dovecot/passwd
          echo «  » >> /etc/dovecot/passwd
          echo «  » >> /etc/dovecot/passwd
          echo «  » >> /etc/dovecot/passwd
          echo « webmaster@help.info:`dovecotpw -p motdepasse` » >> /etc/dovecot/passwd

          echo «  » >> /etc/dovecot/passwd
          echo «  » >> /etc/dovecot/passwd
          echo « # +—————————————————-+ » >> /etc/dovecot/passwd
          echo « # | | » >> /etc/dovecot/passwd
          echo « # | Base mise à jour le | » >> /etc/dovecot/passwd
          echo « # | $date | » >> /etc/dovecot/passwd
          echo « # | | » >> /etc/dovecot/passwd
          echo « # +—————————————————-+ » >> /etc/dovecot/passwd

          MAJ => une fois les précédents scipts édités, je lance maj

          #!/bin/bash
          # +—————————————————-+
          # | |
          # | Script de création des comptes |
          # | pour Postfix |
          # | et |
          # | des mots de passe |
          # | pour Dovecot |
          # | |
          # +—————————————————-+
          #
          # Edité par Popowicz Mikaël Le 10/12/2012 Pour l’Union des forgerons
          #
          echo off
          echo « +——————————————————+ »
          echo « | | »
          echo « | Mise à jour des configurations du serveur de mail | »
          echo « | | »
          echo « +——————————————————+ »
          echo « | I] Mise à jour des comptes | »
          echo « | ————————– | »
          cpt
          echo « | Terminée | »
          echo « | | »
          echo « | II] Mise à jour des mots de passe | »
          echo « | ——————————— | »
          mdp
          echo « | Termniée | »
          echo « | | »
          echo « | III] Prise en compte des nouvelles confs | »
          echo « | —————————————- | »
          service postfix reload
          service dovecot reload
          echo « | Terminée | »
          echo « | | »
          echo « | IV] Redémarrage des programmes | »
          echo « | —————————— | »
          /etc/init.d/postfix restart
          /etc/init.d/dovecot restart
          echo « | Terminé | »
          echo « | | »
          echo « | | »
          echo « | | »
          echo « | | »
          echo « | Félicitations ! Le serveur de mail à bien enregistré | »
          echo « | les nouvelles configurations | »
          echo « | | »
          echo « +——————————————————+ »
          exit

          Le décalage des barres dans les scripts sont du, pour certains, au fait que j’ai copié les fichier de debian à windows.

          Voilà, ce n’est pas extraordinaire mais bon cela me suffit pour l’instant.
          Mais j’aimerais tout de même avancer, d’un premier pas vers le sasl, puis vers le tls, et enfin le tout sous mysql.

  2. Mes articles sont un peu anciens, certains paramètres ont certainement évolué. Il se trouve que je retravaille sur ce sujet ces temps-ci, je mettrai certainement à jour certains points.

    Tu dis n’avoir aucune correspondance en ce qui concerne le socket utilisé par Postfix /var/spool/postfix/private/auth (ou /var/run/dovecot/auth-client), c’est un problème pour le fonctionnement du serveur, car Postfix va utiliser le module SASL de Dovecot. Dans ton fichier de config Dovecot, je ne vois pas les lignes nécessaires :


    auth default {
    mechanisms = plain login
    socket listen {
    client {
    # Un socket est exporté pour pouvoir etre utilisé par un client.
    # Ici c'est notre serveur SMTP Postfix
    path = /var/run/dovecot/auth-client
    mode = 0660
    user = postfix
    group = postfix
    }
    }
    }

    1. Non je n’ai pas mis, ces lignes, pour que mon serveur soit opérationnel sans sasl.

      Lorsque je fait un
      ls l /var/spool/postfix/private/
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 anvil
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 bounce
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 bsmtp
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 defer
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 discard
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 error
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 ifmail
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 lmtp
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 local
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 maildrop
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 mailman
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 proxymap
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 proxywrite
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 relay
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 retry
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 rewrite
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 scache
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 scalemail-backend
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 smtp
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 tlsmgr
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 trace
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 uucp
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 verify
      srw-rw-rw- 1 postfix postfix 0 10 déc. 14:45 virtual

      ici pas de « auth »

      ls l /var/run/dovecot
      srw——- 1 root root 0 10 déc. 14:45 auth-worker.11990
      srwxrwxrwx 1 root root 0 10 déc. 14:45 dict-server
      lrwxrwxrwx 1 root root 25 10 déc. 14:45 dovecot.conf -> /etc/dovecot/dovecot.conf
      drwxr-x— 2 root dovecot 4096 10 déc. 14:45 login
      -rw——- 1 root root 6 10 déc. 14:45 master.pid

      ici pas de « auth-client »

      est-ce « auth-worker » qu’il faut utiliser ?

  3. Et bien, j’ai réussi a activer le sasl, enfin, après quelques recherches, et j’ai trouvé ceci:

    main.cf :

    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    broken_sasl_auth_clients = yes

    dovecot.conf :

    socket listen {
    master {
    path = /var/run/dovecot/auth-master
    mode = 0600
    user = vmail
    group = vmail
    }
    client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = vmail
    group = vmail
    }
    }

    Cela ne change pas beaucoup de la conf que tu recommande.
    En tout cas je tenais à t’en informer, et puis cela pour peut-être aider quelqu’un d’autre.

    Maintenant je vais continuer à suivre ton tuto sur tls.

    Merci encore

      1. Je t’embête une dernière fois, j’ai réussi à mettre le TLS.

        Mais ^^ il y un mais, il y des choses étranges.

        si j’ai bien tout compris, avec l’ensemble SASL et TLS je devrais m’authentifier pour la réception et l’envoi.

        Lorsque je me connecte avec Outlook:
        Je met bien tls dans les options avancées pour l’imap et le smtp qui restent respectivement sur les port 143 et 25.

        Je me connecte, je reçois et j’envois, OR je n’ai pas configurer les paramètres serveur sortant dans Outlook, tout est décoché. Il est donc bizarre qu’il n’y ait pas d’erreurs d’authentification lors de l’envoi.

        Lorsque je me connecte avec Roundcube, je suis obligé de mettre les identifiants identiques à ceux de la connexion IMAP pour que l’envoi fonctionne.

        Alors sur Roundcube je m’authentifie à l’envoi et pas sur Outlook.

        Une autre bizarrerie, normalement avec l’option dans dovecot :
        disable_plaintext_auth = yes
        je ne devrais pas pouvoir, en telnet, faire une LOGIN avant STARTTLS, or je le peux tout à fait.

        Mais par contre si je ne configure tls dans les paramètres IMAP d’Outlook, lui n’arrivera pas à se connecter.

        Et aussi, concernant le certificat, Outlook me demande de l’accepter, mais Roundcube ne m’en parlera jamais.

        Merci encore une fois

        1. Je n’ai pas d’Outlook sous la main pour essayer.. Peut-être a-t-il une sorte de mécanisme de test de compte, s’il trouve que TLS est nécessaire il essaie en utilisant les identifiants IMAP. Ou peut-être je dis juste des conneries ;>

          Pour le disable_plaintext_auth, c’est à approfondir en effet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *