Mise à jour du 11/12/2021.
Pour la lecture des courriels reçus par un MTA, l'Internet a défini deux protocoles POP et IMAP. On trouve souvent le protocole POP assortie de sa version majeure comme POP3. POP est le plus ancien des deux protocoles. Son but est de rapatrier les messages reçus sur la machine du client de messagerie et de les ôter du serveur. Cette approche rencontre ses limites dès que l'on doit accéder à une même boîte-aux-lettres (BAL) depuis des clients de messagerie différents (PC et téléphone par exemple). En outre, les message peuvent être très volumineux en raison des pièces jointes. La chargement a priori pose des problèmes dès lors que le réseau est instable ou de débit insuffisant (téléphone par exemple). On lui préfèrera nettement le protocole IMAP qui laisse les messages sur le serveur IMAP et remonte vers le périphérique uniquement les informations essentielles. De cette façon, plusieurs clients de messagerie peuvent accéder simultanément à une même BAL. Le téléchargement des pièces jointes se fait uniquement à la consultation du message qui les contient.
Il nous faut donc un serveur qui gère les dossiers des BAL du MTA (réception) et qui transmette au MTA les messages à émettre. Notre choix s'est porté sur le serveur Dovecot. L'installation de ce serveur se fait via la commande :
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-pgsql
Après l'installation, on commence par sauvegarder la configuration initiale :
sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak sudo cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.bak sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.bak sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.bak sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.bak sudo cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.bak sudo cp /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf.bak sudo cp /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.bak
Là encore, il peut être pratique de réaliser un script qui effectue ces tâches tout en vous préservant d'une sauvegarde initiale à l'image de ce que nous avions fait pour Postfix.
Nous devons avant toute chose créer un compte et un groupe Linux chargés de la gestion de ce serveur. Commençons par créer le groupe vmail :
groupadd -g 5000 vmail
Poursuivons avec la création du compte vmail
useradd -g vmail -u 5000 vmail -d /var/mail
Nous devons créer maintenant le répertoire virtuel associé au domaine piapp.fr :
sudo mkdir -p /var/mail/vhosts/piapp.fr
Modifions alors le propriétaire et le groupe de ce répertoire :
sudo chown -R vmail:vmail /var/mail
Commençons par modifier la configuration de Dovecot en ajoutant au bas du fichier /etc/dovecot/dovecot.conf les lignes qui suivent :
plugin {
quota = maildir:User quota
quota_rule = *:storage=2G
quota_rule2 = Trash:storage=+10%%
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_warning3 = -storage=100%% quota-warning below %u # user is no longer over quota
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
# Utilisation d'un compte sans droits d'administration pour exécuter la vérification des quotas
user = vmail
unix_listener quota-warning {
}
}
Ici nous allouons à chaque utilisateur une BAL de 2 gio. Le script /usr/local/bin/quota-warning.sh surveille ce quota et prévient l'utilisateur lorsque ce dernier atteint les valeurs de80, 95 et 100%. Il vous appartient d'écrire un tel script :
#!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster@piapp.fr Subject: Avertissement de quota Votre boîte aux lettres à atteint $PERCENT% de son maximum. EOF
Fixez les droits (utilisateur et groupe tous les droits, autre uniquement lecture et exécution) sur le fichier via la commande :
sudo chmod 775 /usr/local/bin/quota-warning.sh
Ouvrez ensuite le fichier /etc/dovecot/conf.d/10-mail.conf et apportez les modifications aux lignes 30 et 218 :
[devrait être ligne 30] mail_location = maildir:/var/mail/vhosts/%d/%n [devrait être ligne 218] mail_plugins = $mail_plugins quota
Modifions ensuite les règles d'autorisation vai la modification du fichier /etc/dovecot/conf.d/10-auth.conf :
[décommentez ce qui devrait être la ligne 10] disable_plaintext_auth = yes [modifiez la ligne qui devrait être 100] auth_mechanisms = plain login [commentez la ligne qui devrait être 122] #!include auth-system.conf.ext [décommentez ce qui devrait être la ligne 123] !include auth-sql.conf.ext
Ouvrez maintenant le fichier /etc/dovecot/conf.d/auth-sql.conf.ext, supprimez son contenu et remplacez-le par :
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = prefetch
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Ouvrez le fichier /etc/dovecot/dovecot-sql.conf.ext, supprimez son contenu et remplacez-le par :
driver = pgsql
connect = host=127.0.0.1 dbname=mail user=adminmail password=[mot de passe sans quote ni crochets]
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email AS user, password, \
'vmail' AS userdb_uid, 'vmail' AS userdb_gid, \
CONCAT('/var/mail/vhosts/piapp.fr/',SPLIT_PART(email,'@',1)) AS userdb_home, \
CONCAT('*:storage=', quota) AS userdb_quota_rule \
FROM virtual_users WHERE email='%u';
user_query = \
SELECT CONCAT('/var/mail/vhosts/piapp.fr/',SPLIT_PART(email,'@',1)) AS home, \
'vmail' AS uid, 'vmail' AS gid, CONCAT('*:storage=', quota) AS quota_rule \
FROM virtual_users WHERE email='%u';
iterate_query = SELECT SPLIT_PART(email,'@',1) AS username, \
SPLIT_PART(email,'@',2) AS domain \
FROM virtual_users;
Ouvrez le fichier /etc/dovecot/conf.d/20-imap.conf, modifiez ce qui devrait être la ligne 94 :
mail_plugins = $mail_plugins imap_quota
Ouvrez le fichier /etc/dovecot/conf.d/10-master.conf. Son contenu indique à Dovecot comment écouter les connexions et quoi en faire. Ici on n'utilise Dovecot qu'avec des connexions chiffrées (port différent de 0). Supprimez toutes les lignes et remplacez-les par les suivantes.
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}Ouvrez le fichier /etc/dovecot/conf.d/10-ssl.conf. Modifiez les lignes indiquées :
[devrait être ligne 6] ssl = required [devrait être ligne 12] ssl_cert = </etc/letsencrypt/live/www.piapp.fr/fullchain.pem [devrait être ligne 13] ssl_key = </etc/letsencrypt/live/www.piapp.fr/privkey.pem [devrait être ligne 53] ssl_dh = </etc/ssl/private/dhparam.pem [devrait être ligne 59] ssl_min_protocol = TLSv1.1 [décommentez ce qui devrait être la ligne 62] ssl_cipher_list = ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
Le fichier /etc/ssl/private/dhparam.pem n'existe pas. Il faut le créer via la commande openssl dhparam -out /etc/ssl/private/dhparam.pem 4096. Notez que sa construction est assez longue. Ouvrez le fichier /etc/dovecot/conf.d/15-lda.conf. Modifiez ce qui devrait être la ligne 7 :
postmaster_address = postmaster@piapp.fr
Pour affecter des répertoires par défaut dans la BAL de chaque nouvel utilisateur, modifiez le fichier /etc/dovecot/conf.d/15-mailboxes.conf.
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Archive {
auto = subscribe
special_use = \Archive
}Pour activer Dovecot auprès du MTA, ouvrez le fichier /etc/postfix/main.cf et ajoutez au bas du fichier la section :
# Autorisation compte dovecot smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes # Aucune gestion de la distribution locale via le protocole LMTP de Dovecot # et indication du lieu de stockage des courriels virtual_transport = lmtp:unix:private/dovecot-lmtp
Il ne reste plus qu'à changer quelques droits et à relancer les serveurs :
sudo chown -R vmail:dovecot /etc/dovecot sudo chmod 770 /etc/dovecot sudo service dovecot restart sudo service postfix restart
Vous pouvez maintenant connecter un client de messagerie comme Thunderbird ou Outlook.
Rédaction par Jean-Marie Piatte (1983-2021)