Gérer des domaines virtuels avec Postfix et Dovecot

Les autres tutoriels présent sur ce site sont dédié pour un serveur mail se basant sur des comptes UNIX. Ici, nous allons gérer des domaines dit “virtuels”. C'est à dire que postfix saura accepter différents destinataires (tel que contact@domaine.com et contact@domaine2.com) que l'on aura au préalable autorisé à communiquer avec le serveur.

Il existe plusieurs moyens de gérer des comptes, soit avec une base de donnée mysql, ou avec un annuaire LDAP ou mais encore par fichier. Nous allons utiliser la dernière solution car elle demande pas de nouvelle installation.

Configuration de postfix

Admettons que l'on parte de la configuration effectué dans ce tutoriel. Cela concerne uniquement la rubrique SMTP et IMAP. On peut mettre de côté le chiffrement et l'installation de Rainloop.

Commençons par ajouter dans le main.cf :

#VIRTUEL
virtual_mailbox_domains = domaine.com domaine2.com
virtual_mailbox_base = /var/mail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual

Voici la documentation pour savoir à quoi servent ces directives. La plus importante est $virtual_mailbox_domains qui cite les domaines que l'on souhaite gérer.

Attention! Le domaine ne doit pas être listé dans la directive $mydesination. Sinon il mettra le mail à l'emplacement /var/mail comme si c'était un compte UNIX.

Pour s'assurer de ne pas perdre un mail en cours de route, on peut ajouter des alias de comptes UNIX vers les adresses mails virtuels :

nano /etc/aliases
contact: contact@domaine.com
root: contact@domaine.com

Appliquons ces changements :

newaliases

On se devra de créer les 2 fichiers ci-dessous avec le contenu respectif dont le contenu du 1er fichier est facultatif :

nano /etc/postfix/virtual
boss@toto.com   user-unix
contact@domaine.com     contact@domaine2.com
nano /etc/postfix/vmailbox
contact@domaine.com        domaine.com/contact/
user@domaine.com           domaine.com/user/
contact@domaine2.com        domaine2.com/contact/
user@domaine2.com           domaine2.com/user/

Il reste plus que postfix prennent en compte ces modifications :

postmap /etc/postfix/virtual
postmap /etc/postfix/vmailbox
/etc/init.d/postfix reload

Ci-dessus, nous avons renseigné un uid et un gid à 5000 dont-il concernera un utilisateur spécifique qui aura pour rôle de placer les mails dans les boites respectives :

groupadd vmail -g 5000
useradd vmail -r -g 5000 -u 5000 -d /var/mail -m -c "facteur"

On indique que cet utilisateur sera le propriétaire de son dossier home :

chown vmail /var/mail

Ainsi, si un compte s'authentifie une première fois à l'aide de Dovecot, son dossier sera créé automatiquement.

Configuration de Dovecot

On peut commencer par activer les logs pour nous permettre de rapidement trouver l'éventuel soucis rencontré :

nano /etc/dovecot/dovecot.conf
log_path = /var/log/dovecot.log
debug_log_path = /var/log/dovecot-debug.log
info_log_path = /var/log/dovecot-info.log
log_timestamp = "%Y-%m-%d %H:%M:%S "

auth_verbose=yes
auth_debug=yes
mail_debug=yes

Puis on ajoute ces directives pour que Dovecot puisse utiliser les comptes virtuel au lieu des comptes UNIX :

# VIRTUEL :
mail_access_groups = vmail
default_login_user = vmail
first_valid_uid = 5000
first_valid_gid = 5000
mail_location = maildir:/var/mail/%d/%n

userdb {
driver = static
args = uid=5000 gid=5000 home=/var/mail/%d/%n allow_all_users=yes
}

passdb {
    driver = passwd-file
    args = scheme=SHA256 /etc/dovecot/passwd
}

Forcer la génération des dossiers

Cette section est facultative mais peut être utile si l'on veut que l'utilisateur puisse utiliser des dossiers tel que Drafts, Junk, Trash, Sent, etc…

Pour s'abonner à ses dossier, il faut modifier le fichier suivant en rajouter uniquement la directive “auto” :

nano /etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
# These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    special_use = \Drafts
    auto = subscribe
  }
  mailbox Trash {
    special_use = \Trash
    auto = subscribe
  }
  mailbox Sent {
    special_use = \Sent
    auto = subscribe
  }

Vérifions qu'il n'y ait pas de soucis de syntaxe :

doveconf -n > /dev/null

Comptes mails

Il reste plus qu'a créer les comptes compte :

doveadm pw -s sha256 | cut -d '}' -f2

Il nous suffira alors d'ajouter ce mot de passe écrit en base64 dans le fichier suivant :

nano /etc/dovecot/passwd
contact@domaine.com:CT59X9uqz6kkSIYbEQdbP7pTKgfZRbSaRJGSUvXoMK0=

Effectuer des tests

Pour vérifier que tout fonctionne bien, vous pouvez utiliser le client Mutt dont voici un fichier d'exemple de configuration :

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

.muttrc
 # config de base
set from = "user@domain.com"
set realname = "Bruno TATU - Container"
set editor = "vim -c 'set tw=72' -c 'set wrap'"
set signature=~/.mutt/signature
 
# compte imap : 
set imap_user = "user@domain.com"
set folder = "imaps://mail.domain.com:993"
 
set imap_check_subscribed
set mail_check = 12
set timeout = 10
set imap_keepalive = 300
 
set spoolfile = "imaps://user@domain.com@mail.domain.com:993/INBOX"
set spoolfile = "+INBOX"
 
# compte smtp :
set smtp_url = "smtps://user@domain.com@mail.domain.com:465/"
set move = no 
 
set pager_index_lines=7
set pager_stop
 
# comportement :
set quit
set delete 
 
set sidebar_visible = yes
set sidebar_width   = 24
color sidebar_new green default