104 lines
5.1 KiB
Markdown
104 lines
5.1 KiB
Markdown
+++
|
||
|
||
title = "Passer ses utilisateurs IMAP du système vers Vmail (sans douleur si possible)"
|
||
date = 2018-08-20
|
||
aliases = [ "post/2018/08/20/Passer-ses-utilisateurs-IMAP-du-système-vers-Vmail-(sans-douleur-si-possible)"]
|
||
draft = true
|
||
[taxonomies]
|
||
tags = [ "système", "mail" ]
|
||
+++
|
||
|
||
Nan parce que c'est sympa et tout hein… mais tout le monde s'en fout !
|
||
|
||
<!-- more -->
|
||
|
||
Originellement, j'avais (bêtement) pensé que créer des utilisateurs système pour recevoir des courriels étaient une bonne idée. Dans les faits, il y a quelques années, c'était probablement vrai : tout le monde était propriétaire de ces mails au sens Unix, le dossier était clairement visible et ça permettait d'appliquer très très facilement des quotas.
|
||
|
||
Sauf qu'aujourd'hui, manager des utilisateurs système est plus un problème qu'autre chose :
|
||
|
||
1. les gens ne se connectent pratiquement plus à leur compte personnel… C'en est devenu un peu frustrant, mais à une époque proposer 1 ou 2 Gio de stockage accessible en SFTP avec un répertoire HTML public, c'était la classe, aujourd'hui, tout le monde s'en bat les couilles.
|
||
2. ça fait que le système et la messagerie sont très très étroitement liés, ce qui peut être problématique dans certains cas : changer de serveur peut poser un vrai problème, migrer sur un autre système également.
|
||
|
||
L'idéal serait donc d'avoir une configuration plus claire et surtout bien plus segmenté entre les différents services nécessaires :
|
||
|
||
* Postfix ne fait qu'acheminer les messages. Il n'a pas besoin de savoir qui sont les utilisateurs légitimes en local, ce n'est pas son problème.
|
||
* Dovecot devrait être capable d'authentifier les utilisateurs et de remettre les messages au bon endroit pour qu'il soit accessible. Tout devrait d'ailleurs repasser plus ou moins par lui.
|
||
|
||
On va donc voir ensemble comment on peut migrer ce bordel.
|
||
|
||
# Passage de Dovecot et Postfix en LMTP
|
||
|
||
À l'origine, j'avais une configuration très très simple pour la livraison des messages :
|
||
|
||
~~~
|
||
mailbox_command = /usr/lib/dovecot/deliver
|
||
~~~
|
||
|
||
L'idée est que Postfix fasse appel à la commande `deliver` disponible dans Dovecot. Ça marche très bien tant que tout est installé sur la même machine et avec les mêmes « versions » de logiciels. Si on commence à essayer de séparer les services sur des machines différentes, ça va commencer à sentir du cul.
|
||
|
||
Pour faire simple, lors d'une livraison locale (si Postfix détecte le domaine de messagerie dans le `mydestination` en gros), Postfix va évaluer les choses dans cet ordre :
|
||
|
||
* alias (en général dans `/etc/aliases`)
|
||
* fichiers `.forward`
|
||
* `mailbox_transport_maps`
|
||
* `mailbox_transport`
|
||
* `mailbox_command_maps`
|
||
* `mailbox_command`
|
||
* `home_mailbox`
|
||
* *(et d'autres après mais dont on se fout)*
|
||
|
||
À l'origine, j'utilisais `home_mailbox` pour que Postfix livre directement les messages dans le *Maildir* des utilisateurs. Postfix servait alors de MDA et de MTA. Au fur et à mesure que ma compréhension et mon expérience de Dovecot se sont améliorées, j'ai utilisé la commande `deliver` : Dovecot devient alors LDA (*Local Delivery Agent*).
|
||
|
||
On va garder le même état d'esprit mais en connectant Postfix à Dovecot via une socket au lieu d'une commande. On rend ainsi les deux beaucoup plus imperméables et moins interdépendants.
|
||
|
||
Pour Postfix, la configuration va être très très simple :
|
||
|
||
~~~
|
||
#mailbox_command = /usr/lib/dovecot/deliver
|
||
mailbox_transport = lmtp:inet:127.0.0.1:24
|
||
~~~
|
||
|
||
Et là normalement, tu devrais saigner du nez : « Putain ! Mais t'as mis une adresse IP en dur BORDAYLE DE MAYRDE !! *unfollow* ».
|
||
|
||
Oui, bah je sais plus pourquoi mais *localhost*, il avait du mal… Donc voilà, faites pas chier, vous vous adapterez et vous ferez les malins sur votre serveur Postfix à vous.
|
||
|
||
Dernière petite chose : il faut préciser à Postfix de ne pas accepter les messages avec des entêtes UTF-8. En effet, il se trouve que Dovecot en mode LMTP ne supporte pas les entêtes UTF-8. Si tu ne désactives pas cela, ça va vite partir en cacahouète du coup…
|
||
|
||
~~~
|
||
smtputf8_enable = no
|
||
~~~
|
||
|
||
Côté Dovecot, ça ne va pas être bien compliqué non plus. On ajoute donc le protocole LMTP aux protocoles servis par Dovecot :
|
||
|
||
~~~
|
||
protocols = imap lmtp
|
||
~~~
|
||
|
||
La liste des utilisateurs locaux transmis par Postfix à Dovecot contient l'adresse complète de la personne (vabien@teniquer.com par exemple). Il est donc nécessaire dans notre cas (authentification Unix pour le moment) de virer la partie courriel (donc la partie après le *@*) :
|
||
|
||
~~~
|
||
auth_username_format = %Ln
|
||
~~~
|
||
|
||
Enfin, il faut démarrer le service LMTP sur un port local :
|
||
|
||
~~~
|
||
service lmtp {
|
||
inet_listener ltmp {
|
||
address = 127.0.0.1 ::1
|
||
port = 24
|
||
}
|
||
}
|
||
|
||
protocol lmtp {
|
||
mail_location = maidir:~/Maildir
|
||
mail_plugins = sieve
|
||
}
|
||
~~~
|
||
|
||
*Note : il n'y a pas de port standard pour LMTP, tu es donc libre de choisir de ce que tu veux…*
|
||
|
||
On redémarre Postfix et Dovecot et on devrait normalement pouvoir continuer à recevoir des mails sans aucun souci (bon évidemment, vaut mieux tester hein, sinon, ça risque d'être un beau merdier !).
|
||
|
||
# Migration de la UserDB et de la PasswordDB
|