Ma problématique était la suivante : un client avec un serveur de messagerie sous postfix souhaitait migrer une grande partie de ses utilisateurs sur un serveur exchange, sans changer de domaine.
L'idée a été de prendre du Hosted Exchange chez OVH et de le configurer en mode non autoritatif :
Une fois que l'entrée DNS MX du domaine est modifiée pour pointer sur le serveur Exchange et propagée, cela devrait fonctionner. Lorsque le serveur Exchange reçoit des courriels, il regarde dans sa liste d'utilisateurs et si l'utilisateur est connu, il délivre le message dans la boite de réception. S'il n'est pas connu, il transmet le message au serveur postfix, soit mail.domaine.tld dans la capture ci-dessus.
Jusque la tout semble bien fonctionner, du moins pour tous les messages venant de l'extérieur. En effet, lorsque les utilisateurs du serveur postfix souhaitent envoyer un message à une adresse qui est présente sur les deux serveurs, il est délivré en local.
Lorsque les utilisateurs du serveur postfix souhaitent envoyer un message à une adresse qui n'est que sur le serveur Exchange, dans les logs postfix, on obtient le message suivant : Recipient address rejected: User unknown in local recipient table
et le message n'est pas délivré.
Tout cela est normal. En effet, le serveur postfix ne sait pas qu'il existe un autre serveur sur le domaine.
La solution consiste à modifier le fichier /etc/postfix/main.cf
pour indiquer à postfix qu'il doit agir comme un relais pour ce domaine. Pour cela on retire le domaine de mydestination
pour l'ajouter dans relay_domains
:
Voici cette partie du fichier avant :
mydestination = domaine.tld autredomaine.tld
relay_domains =
Et le voici après :
mydestination = autredomaine.tld
relay_domains = domaine.tld
Ensuite dans le fichier /etc/postfix/transport
, on indique tout d'abord les adresses des utilisateurs du serveur Exchange puis le mode de transport (smtp) et le saut suivant, soit le nom du serveur Exchange . Ensuite, pour toutes les autres adresses, on indique qu'ils doivent être traités localement. On obtient un fichier qui ressemble à cela :
exchange.user1@domaine.tld smtp:ex3.mail.ovh.net
exchange.user2@domaine.tld smtp:ex3.mail.ovh.net
exchange.user3@domaine.tld smtp:ex3.mail.ovh.net
[...]
exchange.usern@domaine.tld smtp:ex3.mail.ovh.net
domaine.tld local
On relance postfix et on peut utiliser le nouveau serveur Exchange, aussi bien en interne que depuis l'extérieur.