Servidor de correo – Migración de emails con IMAPCOPY entre servidores Debian (parte 15)

Esta es una entrada dentro de la serie para la instalación de un servidor de correo completo. Índice completo de contenidos pincha aquí.


La migración de mensajes entre servidores no es una tarea fácil, siempre que queramos que sea transparente para el usuario. Como en nuestro caso vamos a migrar entre dos servidores con Debian, vamos a necesitar instalar IMAPCOPY en un servidor, pudiendo ser alguno de los implicados en la migración de correo u otro cualquiera, y además el programa Stunnel en cada servidor de correo, el antiguo y el nuevo, adicional al software de migración de mensajes, pero verás que es una tarea fácil.

Primero debemos de tener el buzón creado en el servidor nuevo, aunque no esté en uso en estos momentos.

Luego instalamos el paquete en un servidor cualquiera, pudiendo ser el servidor de correo antiguo o nuevo. Proponemos hacerlo en el nuevo:

apt-get install imapcopy

Este programa NO hace uso de puertos SSL/TLS, es decir que no se puede utilizar el puerto IMAPs 993. Hace uso del puerto no seguro IMAP 143, y si no tenemos este configurado en Dovecot no vamos a poder utilizar este método tal cual se instala. Para ello levantaremos un túnel en cada servidor para conectar un puerto cualquiera con el de IMAPs 993, como veremos más adelante.

Ahora hacemos una copia del archivo de configuración para realizar la migración /usr/share/doc/imapcopy/examples/ImapCopy.cfg. En este indicaremos los datos de servidores origen y destino, cuentas origen y destino, …

cp /usr/share/doc/imapcopy/examples/ImapCopy.cfg
/usr/share/doc/imapcopy/examples/ImapCopy.cfg.orig

Luego editamos el archivo original /usr/share/doc/imapcopy/examples/ImapCopy.cfg, indicando los datos del servidor antiguo y el nuevo, apuntando al puerto IMAP 143, e indicando los datos del buzón a migrar con las credenciales que tiene configurado en cada servidor:

…
SourceServer servidorantiguo.loquesea.com
SourcePort 143
…
DestServer email.tiraquelibras.com
DestPort 143
…
DebugSrc
DebugDst
…
#       SourceUser    SourcePassword   DestinationUser DestinationPassword
Copy    "email1@tiraquelibras.com"         "passwdSrvAntiguo"       "email@ti                                                                                      raquelibras.com"           "passwdSrvNuevo"

Para migrar varios buzones al mismo tiempo creamos una línea por cada buzón a migrar.

Como no podemos hacer uso del puerto seguro 993, ya que no funciona con IMAPCOPY, tenemos que hacer uso del programa stunnel4 para levantar una conexión desde un puerto cualquiera al puerto de IMAPs 993.

Ejecutamos los siguientes comandos en los dos servidores de correo:

apt-get install stunnel4

Ahora creamos un certificado en cada servidor para poder levantar el túnel SSL local:

openssl req -new -x509 -days 3650 -nodes -out /etc/stunnel/stunnel.pem -keyout /etc/stunnel/stunnel.pem

Ahora creamos el archivo de configuración en cada servidor, con los datos de configuración del túnel SSL local, dentro del archivo /etc/stunnel/email.tiraquelibras.com.conf:

  • Servidor de correo antiguo, destinamos el puerto 1143 local:
; Some debugging stuff useful for troubleshooting
debug = 7

; Pfad for pid file
pid = /tmp/stunnel4-xyz00.pid

; Use it for client mode
client = yes

; Service-level configuration

[imap]
accept = 1143
connect = servidorantiguo.loquesea.com:993
retry = yes
  • Servidor de correo nuevo, destinamos el puerto 1144 local:
; Some debugging stuff useful for troubleshooting
debug = 7

; Pfad for pid file
pid = /tmp/stunnel4-xyz00.pid

; Use it for client mode
client = yes

; Service-level configuration

[imap]
accept = 1144
connect = email.tiraquelibras.com:993
retry = yes
  • Creamos las reglas en el IPTABLES de ambos servidores, si lo estuviéramos usando:
    • Servidor antiguo:
iptables -A INPUT  -p tcp -m tcp --dport 1143 -j ACCEPT
    • Servidor nuevo:
iptables -A INPUT  -p tcp -m tcp --dport 1144 -j ACCEPT

Ahora levantamos el túnel en cada servidor:

stunnel4 /etc/stunnel/email.tiraquelibras.com.conf

Vemos como en cada servidor el túnel se levanta:

  • Servidor antiguo:
# netstat -an | grep 114tcp        0      0 0.0.0.0:1143            0.0.0.0:*               LISTEN
  • Servidor nuevo:
# netstat -an | grep 114tcp        0      0 0.0.0.0:1144            0.0.0.0:*               LISTEN

Una vez acabamos de configurar todo lo necesario en ambos servidores de correo, volvemos al servidor en donde hemos instalado el programa de migración IMAPCOPY y agregamos los nuevos puertos al archivo de configuración para lanzar la migración, en el archivo /usr/share/doc/imapcopy/examples/imapcopy.cfg:

SourceServer servidorantiguo.loquesea.com
#SourcePort 143
SourcePort 1143

###################
# Destinationserver
###################
DestServer email.tiraquelibras.com
#DestPort 143
DestPort 1144

Ahora ya podemos lanzar la sincronización desde el servidor de correo antiguo, en donde tenemos el software IMAPCOPY instalado, de los mensajes de un buzón a otro. Primero probamos si funciona con el comando en el mismo directorio en el que tenemos el archivo de configuración para la migración de mensajes.:

cd /usr/share/doc/imapcopy/examples

imapcopy -t

Esto no aplica nada, solo hace una simulación de migración. Al final debería de indicar si se realizó o no correctamente la simulación.

Si todo ha ido bien y no tenemos que revisar ningún error, podemos ejecutar la migración con el comando:

cd /usr/share/doc/imapcopy/examples

imapcopy

Una vez finalizada la migración cerramos el túnel en cada servidor de correo. Primero vemos cuál es el proceso que lo mantiene levantado, lo matamos, confirmamos que no está el puerto levantado:

# netstat -an | grep 114
tcp        0      0 0.0.0.0:1143            0.0.0.0:*  
             
# ps -fea | grep tunnel
root      5668     1  0 sep11 ?        00:00:13 stunnel4 /etc/stunnel/email.tiraquelibras.com.conf
root     11205 10821  0 10:58 pts/0    00:00:00 grep tunnel

# kill -9 5668

# netstat -an | grep 114

# ps -fea | grep tunnel
root     11217 10821  0 10:58 pts/0    00:00:00 grep tunnel

Y eliminamos la regla en el FIREWALL en cada servidor. Primero miramos cuál es la posición que ocupa cada regla y luego la eliminamos indicando esta posición. Por ejemplo, imaginemos que la posición es la 19:

# iptables -L -n -v --line-numbers
…
19       0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1143
…

# iptables -D INPUT 19

Recuerda asegurarte de indicar la posición correcta de tu regla.

Los mensajes quedarían migrados entre ambos buzones.


Índice general pincha aquí.

One Reply to “Servidor de correo – Migración de emails con IMAPCOPY entre servidores Debian (parte 15)”

Comments are closed.