SwordArMor

Réplication master/master entre deux serveurs mail avec dovecot-dsync

En gros, ça sert à éviter de faire exploser votre queue de mails

Peut-être avez-vous déjà un serveur mail secondaire pour votre domaine, qui discutent entre eux avec du SMTP tout simple. Cela fonctionne très bien tant que le serveur principal n’est pas trop longtemps dans le noir, sinon vous verrez votre queue grandir de façon démentielle (enfin, celle de postfix).
Il existe alors une parade à ce problème si vous avez installé dovecot, le dsync. Ce n’est plus postfix, mais dovecot qui se chargera de synchroniser les mails entre les deux serveurs, allégeant ainsi le premier.

Il y a quelques vérifications à faire avant d’entamer la configuration

Dans mon cas, je veux synchroniser un serveur sous gentoo avec un autre sous debian oldstable (wheezy à ce jour). Or dans le wiki de dovecot, il est précisé « NOTE: v2.2 is highly recommended for this. Earlier versions can't do incremental metadata syncing. This means that the more mails a mailbox has, the slower it is to sync it. ». Et comme debian aime bien les paquets pas à jour, il faut commencer par prendre la version des backports.
Une fois ceci fait, il faut s’assurer que doveadm user '*' ressorte bien la liste des utilisateurs. Et ce, sur les deux serveurs. J’utilise un backend MySQL, il faut donc que dans le fichier /etc/dovecot/dovecot-sql.conf.ext j’ai un truc du genre iterate_query = SELECT username AS user FROM mailbox;.
Sous gentoo, je n’ai pas eu à modifier les useflags pour utiliser dsync.

Et maintenant on peut configurer

Dans /etc/dovecot/conf.d/10-mail.conf il faut ajouter replication à la variable mail_plugins : mail_plugins = $mail_plugins [vos autres plugins] replication.
Puis, dans /etc/dovecot/conf.d/10-master.conf, on ajoute

service doveadm {
	inet_listener {
		port = $port
		ssl = yes
	}
}
doveadm_port = $port
doveadm_password = $passwd
service replicator {
	process_min_avail = 1
	unix_listener replicator-doveadm {
		mode = 0600
	}
}
service aggregator {
	fifo_listener replication-notify-fifo {
		user = dovecot
	}
	unix_listener replication-notify {
		user = dovecot
	}
}
Les valeurs commençant par un dollar sont à remplacer selon votre envie, il faut juste être cohérent :).
Pour l’utilisateur du service aggregator, j’utilise dovecot sous debian et mail sous gentoo.
Ensuite, il faut éditer /etc/dovecot/conf.d/90-plugin.conf pour préciser le serveur avec lequel on veut synchroniser les mails :
plugin {
[autres variables]
mail_replica = tcps:$fqdn_du_serveur_en_face
}
Enfin, comme je suis un gros psychomaniaque du chiffrement, il faut préciser les paramètres SSL dans /etc/dovecot/conf.d/10-ssl.conf :

ssl = yes
ssl_cert = </etc/ssl/certs/swordarmor.fr.crt
ssl_key = </etc/ssl/private/swordarmor.fr.key
ssl_client_ca_dir = /etc/ssl/certs/

Tests et conclusion

Pour tester votre configuration, vous pouvez utiliser doveadm sync -A -d et vérifier que vous avez bien tous les mails de l’autre côté. Attention cependant, la synchronisation peut prendre pas mal de temps la première fois.
Si ça fonctionne, réglez le postfix du secondaire pour lui dire qu’il n’est plus serveur secondaire mais serveur principal sur votre domaine (oui, vous aurez deux serveurs principaux). Avec tout ceci, vous devriez pouvoir éteindre l’un des deux serveurs deux semaines si vous voulez et quand même avoir accès à tous vos mails en IMAP.