jueves, 29 de marzo de 2012

Backup cuentas de correo Zimbra

Para hacer una copia de seguridad de las cuentas de usuario, puedes entrar en la cuenta del usuario y en preferencias Importar/exportar y exportar la cuenta...
Puedes exportar Correo, libreta de direcciones, agenda, tareas y maletin.
Y en el mismo sitio lo puedes importar.



Pero desde hace algunas versiones de Zimbra el administrador no puede entrar en la cuenta del usuario.
Como no siempre se puede dejar a los usuarios la responsabilidad que ellos mantengan sus copias de seguridad, existe un comando.<Para hacer la copia del buzón.
zmmailbox -z -m cuenta_a_respaldar getRestURL -o nombre_de_la_cuenta_respaldada.tgz "?fmt=tgz"

Para restaurar
zmmailbox -z -m cuenta@tu_dominio postRestURL "//?fmt=tgz&resolve=skip" cuenta_respaldada.tgz

aquí hay varios parámetros en caso de conflicto.
skip: solo importa lo que no este en la cuenta 
modify: modifica el elemento viejo
replace: borra el elemento viejo y lo reemplaza
reset: borra todo y restaura lo que tenga el backup

He recopilado de internet un script para hacer esto, esta modificado para que todos los ficheros estén dentro de la ruta /mnt/backup/
(ojo con el sistema de fichero y su limite de tamaño en donde vallamos a guardar los tgz ya que los backup puede ser grandes dependiendo del tamaño de la cuenta)

Este sistema de backup consta de 2 ficheros y uno que se creara despues tienen que estar siempre en la misma ruta especificada dentro del script en este ejemplo /mnt/backup/ para cambiar la ubicacion tambien tiene que ser cambiado en el interior del script.
exportar.sh
#!/bin/bash
# exportar.sh usuario@dominio.com -- Script para exportar el usuario que se pasa por parametro.
# zmmailbox -z -m cuenta@tu_dominio postRestURL "//?fmt=tgz&resolve=reset" cuenta_respaldada.tgz

USERNAME=$1
TODAY=`date`
LOGFILE="/mnt/backup/log/backuplog.txt"

echo $TODAY >> $LOGFILE
echo $USERNAME >> $LOGFILE
/opt/zimbra/bin/zmmailbox -z -m $USERNAME gms >> $LOGFILE
/opt/zimbra/bin/zmmailbox -z -m $USERNAME getRestURL "//?fmt=tgz" > /mnt/backup/cuentas/$USERNAME.tgz
echo --------------------- >> $LOGFILE

El export es el script de exportación de las cuentas podemos usar export.sh y pasarle como primer parámetro una cuenta y nos la exportara a un comprimido tgz en la ruta que se especifica, /mnt/backup/cuentas/ que si lo cambiamos por una ruta montada de otro ordenador ya exporta fuera del equipo.

mizimbrabackup.sh
#!/bin/bash
# Toma la lista de todas las cuentas y crea un script para
# ejecutarlo imediatamente. El baccount.sh script con las direcciones de email
# para usalor como un comando.

#usa zmaccts y extrae todas las cuentas de correo, solo las direcciones de email no alias ni direcciones reenvio
#Le concatena el "/mnt/backup/./export.sh " string por cada cuenta y escribe en el fichero,

su - zimbra -c "zmaccts" | grep "@" | awk '{print "/mnt/backup/./export.sh " $1}' > /mnt/backup/accountbackup.sh

# cambia los permisos al nuevo script creado y lo ejecuta. 

chmod 755 /mnt/backup/cuenta/accountbackup.sh

# ejecuta el nuevo script. - podemos comentar la siguiente linea para nosotros revisar

# las cuentas que se van a exportar y borrar las que no queramos y ejecutarlo despues.
#./accountbackup.sh



Como dicen los comentarios dentro del script este mizimbrabackup.sh crea un script accountbackup.sh que no es más que una llamada al export pasando como parametro las direcciones de correo.

Pd: Si se te ocurre alguna mejora comentala y mejoramos el script.

8 comentarios:

  1. lo que se podría es hacer que a través de este comando (zmprov -l gaa NombreDominio) que me retorna todos los correos activos del servidor zimbra, es realizar como un ciclo para que solo colocando el dominio el haga uno todo el respaldo general sin estas ecribiendo 1 por 1 las cuentas del servidor, voy a ver si lo puedo hacer, te aviso luego.

    ResponderEliminar
  2. Esta seria una version mejorada solo es guardar el en un archivo exportar.sh y para ejecutarla #sh exportar.sh TUDOMINIO

    #!/bin/bash

    DOMINIO=$1
    TODAY=`date`
    LOGFILE="/mnt/backup/log/backuplog.txt"

    for correo in $(/opt/zimbra/bin/zmprov -l gaa $DOMINIO)
    do
    tam=${#correo}
    posi=$(expr index "$correo" @)
    usua=${correo:0:$posi-1}
    USERNAME=$usua

    echo $TODAY >> $LOGFILE
    echo $USERNAME >> $LOGFILE
    /opt/zimbra/bin/zmmailbox -z -m $USERNAME gms >> $LOGFILE
    /opt/zimbra/bin/zmmailbox -z -m $USERNAME getRestURL "//?fmt=tgz" > /mnt/backup/cuentas/$USERNAME.tgz
    echo --------------------- >> $LOGFILE
    echo Cuenta "$USERNAME" Respaldada
    done

    ResponderEliminar
  3. Para que el script no de error se debe dar permisos 755 al script y correr de la siguiente manera : #./exportar.sh TUDOMINIO

    ResponderEliminar
    Respuestas
    1. Sí claro, eso es básico. Supongo que si estas administrando un servidor de correos en linux, tienes unos conocimientos básicos de linux ;)

      Eliminar
  4. me gustaria saber como restauro ahora los correos q respalde

    ResponderEliminar
    Respuestas
    1. Lo tenias al principio de todo antes de los script:
      Para restaurar
      zmmailbox -z -m cuenta@tu_dominio postRestURL "//?fmt=tgz&resolve=skip" cuenta_respaldada.tgz

      aquí hay varios parámetros en caso de conflicto.
      skip: solo importa lo que no este en la cuenta
      modify: modifica el elemento viejo
      replace: borra el elemento viejo y lo reemplaza
      reset: borra todo y restaura lo que tenga el backup

      Eliminar
  5. Buenas tardes necesito restauran 500 cuentas de zimbra que las tengo respaldadas en fotmato.tgz a otro nuevo zimbra, existe algun script que me ayude para no hacerlo uno a uno

    ResponderEliminar
  6. Hola talvez algun scrip para generar respaldo total solo de las cuentas que esten cerradas o en mantenimiento. Gracias

    ResponderEliminar