blog.phenobarbital.info http://blog.phenobarbital.info/2015/02/migrando-correos-imap-usando-dovecot-imapsync-o-imapcopy/ Migrando correos IMAP usando dovecot, imapsync o imapcopy phenobarbital Esta semana me tocó migrar un servidor de correo IMAP viejo hacia un nuevo servidor, decidí documentar 3 de las herramientas que uso para migrar y sincronizar entre buzones para aquellos que tengan dudas, dichas herramientas son imapsync, doveadm e imapcopy. La primera es revisaremos es doveadm. Doveadm: migrando diferentes formatos de buzones Doveadm es un comando administrativo de Dovecot, si usan dovecot como servidor IMAP (como yo) sabrán que dovecot soporta diferentes espacios de buzones IMAP e incluso diferentes dialectos de buzón (mbox, dbox, maildir, maildir+) y doveadm es una herramienta interesante para migrar desde diferentes formatos físicos de buzones. ¿Cuándo usar doveadm? Cuando tenemos un respaldo físico de los buzones, más no tenemos ningún servidor disponible, doveadm leerá directamente el archivo/directorio físico del buzón y lo inyectará en el servidor local/remoto que le indiquemos. Veamos un ejemplo: He creado un directorio (/srv/viejocorreo/) donde he copiado unos viejos “mbox” (formato: mailbox) de unos usuarios, tenían 2 mbox, uno para el INBOX y otro para sus carpetas personales, entonces el comando es bastante sencillo, simplemente ejecuté en el servidor dovecot: doveadm -v sync -u
[email protected] -f mbox:/srv/viejocorreo/home/soporte/mail:INBOX=/srv/viejocorreo/inbox/soporte El comando es bastante simple, pide una sincronización (sync) de la cuenta (-u)
[email protected] con el contenido de los buzones que están declarados luego de “-f”, en este caso, un mbox: y el mail:INBOX, y listo!. ¿Qué hace dovecot?, simplemente dovecot usará el proceso dovecot-deliver para “inyectar” todo correo que consiga en los mailboxes al usuario indicado. ¿Sencillo no? ¿Y qué pasa si no tengo acceso físico a los buzones?, he allí donde entran imapsync e imapcopy. IMAPSYNC Prefiero imapsync, es una herramienta muy madura, muy estable, está escrita en perl, por desgracia, ya no está empaquetada para Debian y hay que instalarla desde un fuente. Pero tranquilos, su instalación es sencilla: Instalamos las dependencias: apt-get install libdate-manip-perl libterm-readkey-perl libterm-readkey-perl libdigest-hmac-perl libdigest-hmac-perl libdate-manip-perl libmail-imapclient-perl 1/4 etc) –host1: servidor de origen de los correos –user1: usuario origen de los correos –password1: clave del usuario1 Y se repite lo mismo para el destino (host2. En mi caso específico.1 /usr/share/man/man1/imapsync. entonces el comando quedó así: 2/4 . PLAIN. } imapsync syntax OK pod2man imapsync > imapsync. echo "Read the INSTALL file to solve Perl module dependencies!". password2.com/imapsync/imapsync. NTLM. etc). ejecuten: perl -MCPAN -e shell ) Compilamos: make install El proceso de instalación se verá así: make install perl -c imapsync || { echo.1 mkdir -p /usr/bin install imapsync /usr/bin/imapsync chmod 755 /usr/bin/imapsync mkdir -p /usr/share/man/man1 install imapsync.1 chmod 644 /usr/share/man/man1/imapsync.makepasswd rcs perl-doc git libunicode-map-perl libunicode-string-perl Luego. clonamos el fuente e imapsync: git clone git://github. Usando imapsync Para usar imapsync ejecutamos el siguiente comando: imapsync --authmech1 LOGIN --host1 <source_hostname> --user1 <source_username>-password1 <source_password> --authmech2 LOGIN --host2 <target_hostname> --user2 <target_username> --password2 <target_password> Donde: –authmech: significa el mecanismo de autenticación IMAP (LOGIN. usé imapsync para migrar entre servidores IMAPS (imap seguro). exit 1. user2.git cd imapsync Ejecutamos la instalación de las dependencias de imapsync (vía cpan): sh examples/install_modules_linux. authmech2.1 Y ya tenemos instalado imapsync.sh (NOTA: si desean saber si CPAN está activo en su distribución. 0.10 newserver=10.10 SourcePort 143 3/4 . no es tan completa (por ejemplo.txt echo "Migracion completa. me hice un breve script que carga la lista de direcciones y claves desde un archivo de texto.0.0.0.0. como bash “todo lo puede”.imapsync --authmech1 LOGIN --host1 <source_hostname> --ssl1 \ --port1 993 --authmech2 LOGIN --host2 <target_hostname> -user1 <username> -password1 <password> --user2 <username> --password2 <password> --ssl2 \ --port2 993 --noauthmd5 --nosyncacls --syncinternaldates --allowsizemismatch -subscribe_all Además.log" fi done<migrar_correo. no soporta SSL) y requiere un archivo de configuración para ejecutarse. do user=( $p ) uid=${p%@*} pass=${user[1]} echo "Migrando correo de usuario ${uid}" /usr/bin/imapsync --authmech1 LOGIN --host1 $oldserver --authmech2 LOGIN --host2 $newserver --user1 $uid --password1 $pass --user2 $uid --password2 $pass -syncinternaldates --allowsizemismatch --subscribe_all if [ $? -eq 0 ]. Para tener imapcopy simplemente instalamos: apt-get install imapcopy Y creamos su archivo de configuración: vim /etc/ImapCopy.0.11 while read p.cfg Archivo: /etc/ImapCopy." exit 0 Nota: Pueden descargar el script desde este gist: https://gist.github. sirve a los mismos propósitos que imapsync.0 # Copyright (C) 2010 Jesus Lara oldserver=10. then echo "migracion de ${uid} completa" else echo "ERROR en buzon ${uid}" echo "${uid} >>error_buzon.cfg SourceServer 10.info> # version: 2.com/phenobarbital/2380a0e9e1f1d07e1c42 Usando IMAPCOPY Una herramienta ya empaquetada en Debian se llama imapcopy. permitiendo automatizar la migración de muchos buzones: #!/bin/bash # sincronizar correo entre servidores desde una lista # Authors: # Jesus Lara <jesuslara@phenobarbital. Trash” para evitar que copie la papelera de todos los usuarios a copiar o “DebugDst” y “DebugSrc” si deseamos ver la salida del proceso de migración. Nota: pueden usar stunnel para crear un tunel SSL entre los servidores IMAPs y así poder usar imapcopy. simplemente ejecutamos: imapcopy Y comienza el proceso de migración. servidor destino y en una linea.info" "superpassword" "jesuslara@phenobarbital. el buzón origen y destino que vamos a sincronizar.11 DestPort 143 # SourceUser SourcePassword DestinationUser DestinationPassword Copy "
[email protected] 10. Luego de creado el archivo de configuración.info" "superpassword" Entonces.0. Podemos. 4/4 . indicamos servidor origen. agregar entre las opciones a “skipfolder INBOX.