Portail / Mise en place d'un système de messagerie sous Debian 11 (serveur avec accès direct à internet)(Sommaire)

Installation d'un gestionnaire des messages reçus : Dovecot.

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.

Installation.

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.

Modification du système Linux.

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

Modification de la configuration.

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)