Migration de Courier-IMAP vers Dovecot sur Linux
- Mise à jour le 27 avril 2024
En raison de problèmes récurrents de performance et de service qui plante, j'ai récemment migré le service IMAP d'un serveur de messagerie de Courier-IMAP vers Dovecot. Ce dernier est réputé pour sa robustesse et sa maintenance active. Dans cet article, je partagerai les notes qui m'ont aidé à effectuer cette migration. Elles sont spécifiques à mon architecture (Courier-IMAP + Courier-SMTP avec une authentification authuserdb), mais j'espère qu'elles pourront aider d'autres personnes également. Bien sûr, il est fortement recommandé de sauvegarder vos données avant d'apporter toute modification. Bonne lecture !
- Architecture :
- Debian: 11 Bullseye
- dovecot: 2.3.13
- mail location:
/data/vmail/std.rocks/
Installation
- Installer Dovecot :
root@host:~# apt update && apt install dovecot-imapd
Dovecot fournit le script courier-dovecot-migrate.pl, qui permet de migrer de Courier-IMAP tout en préservant les UID IMAP en convertissant le fichier courierimapuiddb en un fichier dovecot-uidlist. Source : https://wiki.dovecot.org/Migration/Courier.
- Télécharger
courier-dovecot-migrate.pl
et donner les permissions en exécution :
root@host:~# wget https://raw.githubusercontent.com/dovecot/tools/main/courier-dovecot-migrate.pl
root@host:~# chmod +x courier-dovecot-migrate.pl
Migration
Conversion
- Exécuter l'outil de conversion
courier-dovecot-migrate.pl
:
root@host:~# ./courier-dovecot-migrate.pl --to-dovecot --recursive --convert /data/vmail/std.rocks/
Comptes utilisateurs
- Pour chaque utilisateur, nous devons ajouter un mot de passe Dovecot. Pour ce faire, nous pouvons utiliser la commande
doveadm pw
et ajouter le nom d'utilisateur et le mot de passe au fichier/etc/dovecot/passwd
:
root@host:~# doveadm pw -s ssha512 -p <PASSWORD>
- Exemple ici avec le mot de passe std.rocks pour l'utilisateur john@std.rocks :
root@host:~# doveadm pw -s ssha512 -p std.rocks
{SSHA512}8lhtRxyXWP5azW1OjllkVUSuMPVABNtTR/MxMVTIEYXLXjoOMwCe/7Bpr1iqPi/nKutRbPxvBddG1pk2BVpgorhZPjI=
- Modifier le fichier
/etc/dovecot/passwd
avec “username:{SSHA512}sha512generatedpassword::::::
”: :
john@std.rocks:{SSHA512}8lhtRxyXWP5azW1OjllkVUSuMPVABNtTR/MxMVTIEYXLXjoOMwCe/7Bpr1iqPi/nKutRbPxvBddG1pk2BVpgorhZPjI=::::::
- Modifier le fichier
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
:
passdb {
#méthode d'authentification
driver = passwd-file
#spécifie le format du nom d'utilisateur dans le fichier de mot de passe.
args = username_format=%u /etc/dovecot/passwd
}
userdb {
driver = static
#spécifie le chemin du répertoire principal pour la boîte aux lettres, où %d représente le domaine et %n représente le nom d'utilisateur.
args = uid=vmail gid=vmail home=/data/vmail/%d/%n
}
Configuration
- Modifier le fichier
/etc/dovecot/conf.d/10-ssl.conf
:
ssl = yes
#certificats de courier :
#ssl_cert = <etc/courier/imapd.pem
#Remarque : séparer imapd.pem de -----BEGIN PRIVATE KEY----- jusqu'à la fin pour créer server.key
#ssl_key = <etc/courier/server.key
#certificats Let's Encrypt :
ssl_cert = <etc/courier/fullchain.pem
ssl_key = <etc/courier/privkey.pem
- Modifier le fichier
/etc/dovecot/conf.d/10-mail.conf
:
mail_location = maildir:/data/vmail/%d/%n/Maildir
namespace {
prefix = INBOX.
separator = .
inbox = yes
}
- Modifier le fichier
/etc/dovecot/conf.d/10-auth.conf
:
auth_mechanisms = plain
!include auth-passwdfile.conf.ext
- Redémarrer le service dovecot :
root@host:~# systemctl restart dovecot.service
Correction des erreurs après migration
Après l'installation et la migration, j'ai dû effectuer quelques modifications, que je détaillerai ici.
Les dossiers apparaissent en double dans Thunderbird
- Désactiver le fichier de configuration
/etc/dovecot/conf.d/15-mailboxes.conf
:
root@host:~# mv /etc/dovecot/conf.d/{15-mailboxes.conf,15-mailboxes.conf.disabled}
root@host:~# systemctl restart dovecot.service
Nombre maximum de connexions
Message d'erreur : imap-login: Maximum number of connections from user+IP exceeded (mail_max_userip_connections=10): user=<john@std.rocks>
:
- Modifier le fichier
/etc/dovecot/conf.d/20-imap.conf
:
mail_max_userip_connections = 30
root@host:~# systemctl restart dovecot.service
Limite de processus atteinte
Message d'erreur : master: Avertissement : service(imap-login) : limite de processus (100) atteinte, les connexions des clients sont abandonnées
.
- Modifier le fichier
/etc/dovecot/conf.d/10-master.conf
:
default_process_limit = 200
root@host:~# systemctl restart dovecot.service
Limite d'instances Inotify pour l'utilisateur
Message d'erreur : Warning: Inotify instance limit for user 7200 (UID vmail) exceeded, disabling. Increase /proc/sys/fs/inotify/max_user_instances
.
- Modifier le fichier
/etc/sysctl.conf
:
fs.inotify.max_user_instances = 65535
fs.inotify.max_user_watches = 65535
root@host:~# sysctl -p /etc/sysctl.conf
root@host:~# systemctl restart dovecot.service
Manque de mémoire
Message d'erreur : imap(john@std.rocks)<1123794><2epGbh79Cui4hVBj> Fatal: master: service(imap): child 1313798 returned error 83 (Out of mem ory (service imap { vsz_limit=256 MB }, you may need to increase it) - set CORE_OUTOFMEM=1 environment to get core dump)
.
- Modifier le fichier
/etc/dovecot/conf.d/10-master.conf
:
default_vsz_limit = 512M
root@host:~# systemctl restart dovecot.service