#pragma section-numbers 2

Procédure générale

  1. baisser le DNS
  2. créer toutes les mailboxes et aliases sur le serveur de destination
  3. virer les MX pour pointer vers le nouveau serveur
  4. pour chaque mailbox
    1. Migrer le contenu des mailboxes IMAP ou collecter les courriels POP
    2. Fermer le compte sur le serveur original
  5. diriger les domains imap et pop vers le nouveau serveur
  6. remonter les TTLs

Cette documentation veut être une version générique de la /VieilleDocumentation qui était trop chaotique et spécifique à certaines configurations. On décrit d'abord une procédure générale et on précise avec certains setups connus.

DNS TTLs

(Cette étape est facultative) Avant tout, il faut avoir le contrôle sur le DNS. Baisser le TTL à 1h au moins 24h avant la migration finale.

Créer chaque mailbox et alias sur le nouveau serveur

Ici, il faut s'assurer que le serveur de destination acceptera les courriels existants sur l'ancien site. Il faut créer chaque mailbox et alias. Tester la livraison locale d'au moins 1 mailbox et 1 alias.

On peut utiliser swaks pour tester l'envoi d'un courriel vers la mailbox:

swaks --to courriel@domain.tld --server new.mailserver.tld

Dans certains cas (par exemple si le DNS est déjà sur notre serveur AlternC), il est impossible de créer des boîtes courriel tant que le MX point ailleurs. La solution ici est de basculer le MX rapidement vers notre serveur et immédiatement après remettre l'ancien MX dans le zonefile (/var/alternc/bind/zones/example.com). On peut ensuite créer les mailboxes.

Virer les MX

On peut alors pointer les MX vers le nouveau serveur. Tester la livraison d'un alias et d'une mailbox de l'extérieur.

Pour chaque mailbox

Assurer vous d'avoir des backups pour des courriels. Roulez la job de backup juste avant de faire les migrations!

Migrer le contenu des mailboxes IMAP, collecter les messages POP

Il y a plusieurs façon de migrer les courriels enter les serveurs.

Sans accès shell aux serveurs mais vous avez accès au mot de passe

larch

pas encore tester

  1. Installation:

    apt install larch

Pros: support le ssl, tls, pause/connection coupé

Imapcopy
  1. Installation:

    apt install imapcopy
    • N.B. imapcopy support pas le ssl/tls, mais c'est possible d'utiliser stunnel pour le faire au besoin

    • N.B. ça semble utiliser pas mal de réseau en local pour la xfer, donc il est avisé d'utiliser d'un endroit avec une connection haut débit

  2. Créer un fichier de configuration, imapcopy.cfg:

    SourceServer mail.example.com
    SourcePort 143
    DestServer mail.koumbit.net
    DestPort 143
    
    DenyFlags "\Recent"
    converttimezone "UTC" "+0000"
    converttimezone "UT"  "+0000"
    
    Copy    "info@example.com"         "password"       "info@example.com"        "password1"
    Copy    "info@x.org"            "xxxx"       "info@x.org"           "xxxx"
  3. Tester les connections:

    imapcopy -t
  4. Rouler la migration:

    imapcopy -e -s
    • N.B. C'est pas parallèle, donc tu pourrais créer plusieurs dossiers avec des fichiers de configuration pour rouler la migration des boîtes en parallèle

ImapSync

https://imapsync.lamiral.info/

Imapsync est un outils permettant de synchroniser le contenu des boîtes courriels (courriels, dossiers)

Il est disponible en 2 versions:

Version installable
Version en ligne (pour les clients)

https://imapsync.lamiral.info/X/

L'utilisation est assez simple:

pour migrer source@exemple.net vers dest12@exemple.net

imapsync \
--host1 imap.sourcehost.net --user1 source@exemple.net --password1 1ns3kure!p4ss!! \
--host2 imap.desthost12.net --user2 dest12@exemple.net --password2 1ns3kure!p4ss!!

ATTENTION!

Les mots de passe seront visible dans l'historique et dans le process en cours! On peut utiliser --passfile1 au lieu (voir man pages)

On peut utiliser plusieurs options pour faire tests au préalable:

Dovecot : si vous avez accès shell/root aux 2 serveurs de courriels

Vérifier les détails de chaque paramètres et faire des tests! Ça peut être mortel.

serveurdisnation# doveadm sync -u user@fqdn -R ssh remote_server doveadm dsync-server -u user@fqdn

Il y a quelques détails à prendre en compte:

Rsync : si vous avez un accès shell/root aux 2 serveurs de courriels

rsync -rz /old/user/Maildir/ new.example.com:/path/to/user/Maildir/

Si les formats sont différents, il faut passer par un protocole commun (par exemple IMAP) en utilisant un logiciel comme imapcopy, offlineimap ou mutt.

Pour les boîtes POP, il faut aller chercher les mails en POP pour s'assurer qu'il ne reste plus de courriers sur le serveur.

Fermer le compte sur le serveur original

Remonter les TTLs

Conserver les mots de passe d'un alternC à un autre

Si on migre beaucoup de courriels d'un alternC à un autre, il peut être utile de faire suivre les mots de passe. Cette méthode fonctionne correctement entre les versions 3.11 et 3.5. Les comptes doivent avoir été préalablement créés dans le alternC de destination, et on doit avoir accès aux deux serveurs.

Sur le serveur d'origine, créer un fichier texte contenant les courriels à migrer, un par ligne. Puis exporter les mots de passe à l'aide de ce script (adapter la variable database au besoin):

#
# Export mailbox password to file for each email listed in input file
# Output: email password (one email by line)
# Args: path to file containing emails, path to output file

if [ $# -ne 2 ]
then
echo Arguments missing \! - Usage: export_mail_pwd.sh [path_to_file containing emails one by line] [output_file]
exit
fi

database='alternc'

while read email
do
echo Processing $email
address=`echo $email | awk -F @ {'print $1'}`
domain=`echo $email | awk -F @ {'print $2'}`
password=`mysql -N --database="$database" --execute "SELECT password FROM address LEFT JOIN domaines ON address.domain_id=domaines.id WHERE address='$address' AND domaine='$domain';"`
echo $email $password >> $2
done < $1

Copier le fichier créé par le script sur le serveur de destination et rouler le script d'import (adapter la variable database au besoin):

#
# Import mailbox password to table address in alternc database
# Args: path to file containing emails and password, one by line (format: email password)

if [ $# -ne 1 ]
then
echo An argument is missing \! - Usage: import_mail_pwd.sh [path_to_file containing emails and passwords one by line]
exit
fi

database='system'

while read email_password
do
email=`echo $email_password | awk -F ' ' {'print $1'}`
password=`echo $email_password | awk -F ' ' {'print $2'}`
echo Processing $email
address=`echo $email | awk -F @ {'print $1'}`
domain=`echo $email | awk -F @ {'print $2'}`
# Update mysql
mysql --database="$database" --execute "UPDATE address SET password='$password' LEFT JOIN domaines ON address.domain_id=domaines.id WHERE address='$address' AND domaine='$domain';"
done < $1


CategoryMigration CatergoryProcedure

MigrationCourriels (last edited 2021-03-02 17:37:41 by nina)