{"id":695,"date":"2019-10-24T17:08:55","date_gmt":"2019-10-24T15:08:55","guid":{"rendered":"https:\/\/www.tiraquelibras.com\/blog\/?p=695"},"modified":"2021-02-02T11:02:45","modified_gmt":"2021-02-02T10:02:45","slug":"servidor-de-correo-migracion-de-emails-con-imapcopy-entre-servidores-debian-parte-15-15","status":"publish","type":"post","link":"https:\/\/blog.tiraquelibras.com\/?p=695","title":{"rendered":"Servidor de correo &#8211; Migraci\u00f3n de emails con IMAPCOPY entre servidores Debian (parte 15)"},"content":{"rendered":"<p>Esta es una entrada dentro de la serie para la instalaci\u00f3n de un servidor de correo completo. \u00cdndice completo de contenidos pincha <a href=\"https:\/\/blog.tiraquelibras.com\/?p=601\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<hr \/>\n<p>La migraci\u00f3n de mensajes entre servidores no es una tarea f\u00e1cil, siempre que queramos que sea transparente para el usuario. Como en nuestro caso vamos a migrar entre dos servidores con <strong>Debian<\/strong>, vamos a necesitar instalar <strong>IMAPCOPY<\/strong> en un servidor, pudiendo ser alguno de los implicados en la migraci\u00f3n de correo u otro cualquiera, y adem\u00e1s el programa\u00a0<strong>Stunnel<\/strong> en cada servidor de correo, el antiguo y el nuevo, adicional al software de migraci\u00f3n de mensajes, pero ver\u00e1s que es una tarea f\u00e1cil.<\/p>\n<p>Primero debemos de tener el buz\u00f3n creado en el servidor nuevo, aunque no est\u00e9 en uso en estos momentos.<\/p>\n<p>Luego instalamos el paquete en un servidor cualquiera, pudiendo ser el servidor de correo antiguo o nuevo. Proponemos hacerlo en el nuevo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get install imapcopy<\/pre>\n<p>Este programa <span style=\"color: #ff0000;\"><strong>NO<\/strong> <\/span>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\u00e9todo tal cual se instala. Para ello levantaremos un t\u00fanel en cada servidor para conectar un puerto cualquiera con el de IMAPs 993, como veremos m\u00e1s adelante.<\/p>\n<p>Ahora hacemos una copia del archivo de configuraci\u00f3n para realizar la migraci\u00f3n <strong><em>\/usr\/share\/doc\/imapcopy\/examples\/ImapCopy.cfg<\/em><\/strong>. En este indicaremos los datos de servidores origen y destino, cuentas origen y destino, \u2026<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">cp \/usr\/share\/doc\/imapcopy\/examples\/ImapCopy.cfg\r\n\/usr\/share\/doc\/imapcopy\/examples\/ImapCopy.cfg.orig\r\n<\/pre>\n<p>Luego editamos el archivo original <strong><em>\/usr\/share\/doc\/imapcopy\/examples\/ImapCopy.cfg<\/em><\/strong>, indicando los datos del servidor antiguo y el nuevo, apuntando al puerto IMAP 143, e indicando los datos del buz\u00f3n a migrar con las credenciales que tiene configurado en cada servidor:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">\u2026\r\nSourceServer servidorantiguo.loquesea.com\r\nSourcePort 143\r\n\u2026\r\nDestServer email.tiraquelibras.com\r\nDestPort 143\r\n\u2026\r\nDebugSrc\r\nDebugDst\r\n\u2026\r\n#       SourceUser    SourcePassword   DestinationUser DestinationPassword\r\nCopy    \"email1@tiraquelibras.com\"         \"passwdSrvAntiguo\"       \"email@ti                                                                                      raquelibras.com\"           \"passwdSrvNuevo\"\r\n\r\n<\/pre>\n<p>Para migrar varios buzones al mismo tiempo creamos una l\u00ednea por cada buz\u00f3n a migrar.<\/p>\n<p>Como no podemos hacer uso del puerto seguro 993, ya que no funciona con <strong>IMAPCOPY<\/strong>, tenemos que hacer uso del programa <strong><em>stunnel4<\/em><\/strong> para levantar una conexi\u00f3n desde un puerto cualquiera al puerto de IMAPs 993.<\/p>\n<p>Ejecutamos los siguientes comandos en los dos servidores de correo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get install stunnel4<\/pre>\n<p>Ahora creamos un certificado en cada servidor para poder levantar el t\u00fanel SSL local:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">openssl req -new -x509 -days 3650 -nodes -out \/etc\/stunnel\/stunnel.pem -keyout \/etc\/stunnel\/stunnel.pem<\/pre>\n<p>Ahora creamos el archivo de configuraci\u00f3n en cada servidor, con los datos de configuraci\u00f3n del t\u00fanel SSL local, dentro del archivo <strong><em>\/etc\/stunnel\/email.tiraquelibras.com.conf<\/em><\/strong>:<\/p>\n<ul>\n<li>Servidor de correo antiguo, destinamos el puerto 1143 local:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">; Some debugging stuff useful for troubleshooting\r\ndebug = 7\r\n\r\n; Pfad for pid file\r\npid = \/tmp\/stunnel4-xyz00.pid\r\n\r\n; Use it for client mode\r\nclient = yes\r\n\r\n; Service-level configuration\r\n\r\n[imap]\r\naccept = 1143\r\nconnect = servidorantiguo.loquesea.com:993\r\nretry = yes\r\n<\/pre>\n<ul>\n<li>Servidor de correo nuevo, destinamos el puerto 1144 local:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">; Some debugging stuff useful for troubleshooting\r\ndebug = 7\r\n\r\n; Pfad for pid file\r\npid = \/tmp\/stunnel4-xyz00.pid\r\n\r\n; Use it for client mode\r\nclient = yes\r\n\r\n; Service-level configuration\r\n\r\n[imap]\r\naccept = 1144\r\nconnect = email.tiraquelibras.com:993\r\nretry = yes\r\n<\/pre>\n<ul>\n<li>Creamos las reglas en el IPTABLES de ambos servidores, si lo estuvi\u00e9ramos usando:\n<ul>\n<li>Servidor antiguo:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">iptables -A INPUT  -p tcp -m tcp --dport 1143 -j ACCEPT<\/pre>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Servidor nuevo:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">iptables -A INPUT  -p tcp -m tcp --dport 1144 -j ACCEPT<\/pre>\n<p>Ahora levantamos el t\u00fanel en cada servidor:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">stunnel4 \/etc\/stunnel\/email.tiraquelibras.com.conf<\/pre>\n<p>Vemos como en cada servidor el t\u00fanel se levanta:<\/p>\n<ul>\n<li>Servidor antiguo:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\"># netstat -an | grep 114tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 0.0.0.0:1143\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0.0.0:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN<\/pre>\n<ul>\n<li>Servidor nuevo:<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\"># netstat -an | grep 114tcp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 0 0.0.0.0:1144\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0.0.0.0:*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LISTEN<\/pre>\n<p>Una vez acabamos de configurar todo lo necesario en ambos servidores de correo, volvemos al servidor en donde hemos instalado el programa de migraci\u00f3n <strong>IMAPCOPY<\/strong> y agregamos los nuevos puertos al archivo de configuraci\u00f3n para lanzar la migraci\u00f3n, en el archivo <strong><em>\/usr\/share\/doc\/imapcopy\/examples\/imapcopy.cfg<\/em><\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">SourceServer servidorantiguo.loquesea.com\r\n#SourcePort 143\r\nSourcePort 1143\r\n\r\n###################\r\n# Destinationserver\r\n###################\r\nDestServer email.tiraquelibras.com\r\n#DestPort 143\r\nDestPort 1144\r\n<\/pre>\n<p>Ahora ya podemos lanzar la sincronizaci\u00f3n desde el servidor de correo antiguo, en donde tenemos el software <b>IMAPCOPY <\/b>instalado, de los mensajes de un buz\u00f3n a otro. Primero probamos si funciona con el comando en el mismo directorio en el que tenemos el archivo de configuraci\u00f3n para la migraci\u00f3n de mensajes.:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">cd \/usr\/share\/doc\/imapcopy\/examples\r\n\r\nimapcopy\u00a0-t<\/pre>\n<p>Esto no aplica nada, solo hace una simulaci\u00f3n de migraci\u00f3n. Al final deber\u00eda de indicar si se realiz\u00f3 o no correctamente la simulaci\u00f3n.<\/p>\n<p>Si todo ha ido bien y no tenemos que revisar ning\u00fan error, podemos ejecutar la migraci\u00f3n con el comando:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">cd \/usr\/share\/doc\/imapcopy\/examples\r\n\r\nimapcopy<\/pre>\n<p>Una vez finalizada la migraci\u00f3n cerramos el t\u00fanel en cada servidor de correo. Primero vemos cu\u00e1l es el proceso que lo mantiene levantado, lo matamos, confirmamos que no est\u00e1 el puerto levantado:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\"># netstat -an | grep 114\r\ntcp        0      0 0.0.0.0:1143            0.0.0.0:*  \r\n             \r\n# ps -fea | grep tunnel\r\nroot      5668     1  0 sep11 ?        00:00:13 stunnel4 \/etc\/stunnel\/email.tiraquelibras.com.conf\r\nroot     11205 10821  0 10:58 pts\/0    00:00:00 grep tunnel\r\n\r\n# kill -9 5668\r\n\r\n# netstat -an | grep 114\r\n\r\n# ps -fea | grep tunnel\r\nroot     11217 10821  0 10:58 pts\/0    00:00:00 grep tunnel\r\n<\/pre>\n<p>Y eliminamos la regla en el <strong>FIREWALL<\/strong> en cada servidor. Primero miramos cu\u00e1l es la posici\u00f3n que ocupa cada regla y luego la eliminamos indicando esta posici\u00f3n. Por ejemplo, imaginemos que la posici\u00f3n es la 19:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\"># iptables -L -n -v --line-numbers\r\n\u2026\r\n19       0     0 ACCEPT     tcp  --  *      *       0.0.0.0\/0            0.0.0.0\/0            tcp dpt:1143\r\n\u2026\r\n\r\n# iptables -D INPUT 19\r\n<\/pre>\n<p>Recuerda asegurarte de indicar la posici\u00f3n correcta de tu regla.<\/p>\n<p>Los mensajes quedar\u00edan migrados entre ambos buzones.<\/p>\n<hr \/>\n<p>\u00cdndice general pincha <a href=\"https:\/\/blog.tiraquelibras.com\/?p=601\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta es una entrada dentro de la serie para la instalaci\u00f3n de un servidor de correo completo. \u00cdndice completo de contenidos pincha aqu\u00ed. La migraci\u00f3n<span class=\"read-more-link\"><a class=\"read-more\" href=\"https:\/\/blog.tiraquelibras.com\/?p=695\">Read More<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":698,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,22],"tags":[51,88,87],"class_list":["post-695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sistemas","category-ti","tag-email","tag-imap","tag-migracion"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=695"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/695\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/media\/698"}],"wp:attachment":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}