My Profile Photo

Er' blog de Arawako be Free!


Another site of a Venezuelan system administrator, pro Free Software


Zimbra

Recuperar buzones en un servidor Zimbra con el LDAP completamente dañado

El presente describe paso a paso como recuperar los buzones de un servidor Zimbra en el cual no podemos levantar el LDAP, debemos recordar que zimbra instala varios servicios entre ellos una base de datos, mysql, en la cual se guarda la información transacional de todo el sistema, en dicho servicio se crea una base de datos llamada zimbra, a su vez esta base de datos tiene una tabla llamada mailbox, que usaremos para localizar entre otras cosas el ID de cada buzón, el ID de cada grupo de buzones y el nombre de la cuenta.

Entrar y buscar la información de las cuentas

Identificarse como usuario zimbra

su - zimbra

Entrar a Mysql/MariaDB

mysql

Conectarse a la base de datos zimbra

MariaDB [zimbra]> use zimbra

Mostrar las tablas de la base de datos

MariaDB [zimbra]> show tables;

| Tables_in_zimbra  |
|-------------------|
| current_sessions  |
| deleted_account   |
| mailbox           |
| mailbox_metadata  |
| out_of_office     |
| pending_acl_push  |
| service_status    |
| table_maintenance |
| volume_blobs      |
| zmg_devices       |

15 rows in set (0.00 sec)

Mostrar las columnas/campos de la tabla mailbox

MariaDB [zimbra]> show columns from mailbox;

| Field                | Type                | Null | Key | Default | Extra |
|----------------------|---------------------|------|-----|---------|-------|
| id                   | int(10) unsigned    | NO   | PRI | NULL    |       |
| group_id             | int(10) unsigned    | NO   |     | NULL    |       |
| account_id           | varchar(127)        | NO   | UNI | NULL    |       |
| index_volume_id      | tinyint(3) unsigned | NO   | MUL | NULL    |       |
| item_id_checkpoint   | int(10) unsigned    | NO   |     | 0       |       |
| contact_count        | int(10) unsigned    | YES  |     | 0       |       |
| size_checkpoint      | bigint(20) unsigned | NO   |     | 0       |       |
| change_checkpoint    | int(10) unsigned    | NO   |     | 0       |       |
| tracking_sync        | int(10) unsigned    | NO   |     | 0       |       |
| tracking_imap        | tinyint(1)          | NO   |     | 0       |       |
| last_backup_at       | int(10) unsigned    | YES  | MUL | NULL    |       |
| comment              | varchar(255)        | YES  |     | NULL    |       |
| last_soap_access     | int(10) unsigned    | NO   |     | 0       |       |
| new_messages         | int(10) unsigned    | NO   |     | 0       |       |
| idx_deferred_count   | int(11)             | NO   |     | 0       |       |
| highest_indexed      | varchar(21)         | YES  |     | NULL    |       |
| version              | varchar(16)         | YES  |     | NULL    |       |
| last_purge_at        | int(10) unsigned    | NO   |     | 0       |       |
| itemcache_checkpoint | int(10) unsigned    | NO   |     | 0       |       |

19 rows in set (0.13 sec)

Mostrar todos los registros de las columnas id y comment (comment es donde se guarda el nomnre de la cuenta)

MariaDB [zimbra]> select id, comment from mailbox;

Exportar a un archivo .txt los registros de las columnas antes listadas

MariaDB [zimbra]> select id, comment into outfile '/opt/zimbra/store/mailbox.txt' from mailbox;

Nota: Este listado nos servira para armar los comandos que usaremos para recuperar las cuentas.

Proceso de recuperación

En Zimbra los buzones se almacenan en directorios enumerados segun su group_id en la ruta /opt/zimbra/store/0/ ejem. para el group_id 1 existen los buzones 1, 10, 100, 101, 102, 103, 104, 105, 106, 107, 108 y 109 (hata ahora asi ha sido en las instalaciones que me han tocado rescatar), segun esto en el listado mailbox.txt tendremos esa misma numeración que encontraremos en el mencionado directorio. lo podemos comparar haciendo un listado del contenido del directorio /opt/zimbra/store/0/ con los comandos ls -l o dir.

Al hacer la exportación de los buzones perderemos el historico de la fecha de los mensajes, esto lo solucionaremos con el primer comando que lanzaremos en el proceso de recuperación.

Con este conocimiento, procedemos a hacer el recovery.

Ajustar las fechas de los mensajes dentro del buzón

for a in `ls -1 /opt/zimbra/store/store_recovery_old_server/0/165/msg/`; do /usr/local/bin/zimdates /opt/zimbra/store/store_recovery_old_server/0/165/msg/$a; done

Zimdates es un script que se debe colocar en la ruta /usr/local/bin/ y debe tener permiso de ejecución para poder usarlo El numero 105 pertnece al buzon con el mismo ID

Crear carpeta en buzon de recuperación

zmmailbox -z -m recuperacion@zimbra.com cf /nombre_carpeta

Previamente se debe crear una cuenta en el nuevo zimbra sobre el cual lanzar los buzones recuperados

Recuperar correos a una carpeta

for a in 'ls -1 /opt/zimbra/store/store_recovery_old_server/0/1/msg/'; do echo "Importando directorio $a"; zmmailbox -z -m recuperacion@zimbra.com addMessage /01 /opt/zimbra/store/store_recovery_old_server/0/1/msg/$a; done

la carpeta store_recovery_old es un respaldo que recuperamos del servidor que sufrio el daño en el LDAP y que descomprimimos sobre la carpeta store del nuevo zimbra, esto por que es la unica ruta donde hay permisos de escritura y lectura para el usuario zimbra, otra opcion es crear un directorio fuera de esta ruta y darle la propiedad del ismo a el usuario zimbra.