Backup Script para Zimbra. Un poco más de tranquilidad.

Hace un par de meses montamos un servidor Windows 2003 para soportar la aplicación de gestión que se usa aquí (CyberMAX) y de paso montar una pasarela Sisky (post relacionado). El caso es que en esta máquina fue donde nos gastamos algo más de pasta en protección de datos metiendo un STARDOM SR2600-2S-S2.
Se trata de un sistema RAID 1 que hace rebuilding en caliente. Cuando llega el finde o vamos a estar varios días sin aparecer por la oficina, sacamos uno de los discos para llevárnoslo a casa y lo cambiamos por otro. Todo este rollo viene a que decidí que esta máquina (aún siendo Windows) resulta la más apropiada para concentrar el volcado de backups. Así que hice que el Plesk transfiriera a este servidor los backups programados de los clientes web por FTP y ahora le toca al Zimbra.
Vamos a usar el script desarrollado por Heinzg y que funciona correctamente bajo distribuciones basadas en Debian y en RedHat. Lo descargamos de la web, lo metemos en la carpeta /root/scripts y lo editamos con nuestro editor favorito.
Conociendo ligeramente la lengua inglesa podemos hacernos con las opciones de configuración:
#------- CONFIG -------# # Edit this part of the script to fit your needs. #
Lo relativo a directorios seguramente sea del agrado de cualquiera y no necesite cambio alguno:
#--- Directories ---# # Please add the trailing "/" to directories! ZM_HOME=/opt/zimbra/ SYNC_DIR=/srv/backup/sync/ ARCHIVEDIR=/srv/backup/dars/ TOO_MEDIA_DIR=/srv/backup/burn/
Lo mismo para el RSync:
# #--- PROGRAM OPTIONS ---# RSYNC_OPTS="-aHK --delete --exclude=*.pid"
Aquí se define el nombre de archivo para el backup y prefijos incrementales para los diferenciales:
# #--- ARCHIVE NAMES ---# BACKUPNAME="Zimbra_Backup" BACKUPTYPE_F="FULL" # name prefix to sort between full and diff backups BACKUPTYPE_D="DIFF" BACKUPDATE=`date +%d-%B-%Y`
Tamaño de los ficheros y nivel de compresión, por si quieres ajustarlos a algún soporte en concreto:
#
#— ARCHIVE SIZE —#
# storage media size
ARCHIVESIZE=”4395M”
COMPRESS=”9″ # valid answers are 1 – 9 ( 9 = best )
Encriptación del archivo y ruta a fichero de claves:
CRYPT="yes" # valid answers are "yes" or "no" PASSDIR=/etc/zmbac/ PASSFILE="noread"
Direcciones de email para notificar errores o backups satisfactorios:
# #--- EMAIL ADDRESS ---# EMAIL="admin@localhost" EMAILCC="admin@remotehost" LOG="/var/log/zim_backup.log"
Opción de mandar por SCP a un servidor remoto la copia realizada, especificando usuario y host. Funciona sin contraseña, por lo que debe generar una clave. Veremos como funciona más adelante:
#— SSH REMOTE DR COPY —# # This option will secure copy you archives to a remote server via ’scp’ DRCP=”yes” # valid answers are “yes” or “no” SSHUSER=”heinzg” REMOTEHOST=”172.16.184.1″ REMOTEDIR=”/tmp/”
Uso de hacks para solucionar algunos problemillas con los procesos de Zimbra. Se recomienda dejarlo en yes:
#--- USE HACKS !?! ---# # Built in hacks to fix common problems #Hack to start Stats, even run zmlogprocess if needed STATHACK="yes" # valid answers are "yes" or "no"
A continuación lo ejecutaremos como root con la opción –INSTALL para crear la tarea programada con crontab. Como dice el propio script, hace uso de las aplicaciones apt-get (solo versiones Debian/Ubuntu), cron, dar, dpkg, mailx, md5sum, rsync, ssh, uuencode, wget, zimbra mta… Por lo que si en algún momento necesita usarlas las intentará descargar automáticamente (solo versiones Debian/Ubuntu). En caso de Fedora/SuSe/RedHat… habrá que instalarlas a mano.
root@localhost#./zmbac.sh --INSTALL
Responderemos no a la instalación de DRCP, ya que lo haremos a mano más adelante y si a la automatización de la tarea con crontab. Nos pedirá que introduzcamos la hora y los minutos en los que deseamos realizar la copia y la ruta donde se encuentra el script (p.e. /root/scripts). Por defecto el script realiza una copia completa semanal y una diferencial diaria.
Ahora vamos a poner en marcha el servidor SSH en la máquina Windows 2003 para crear el repositorio de archivos que serán subidos automáticamente por el script mediante SCP. En mi primer intento fallido usé una versión para Windows de OpenSSH, SSHWindows. El problema es que la distribución binaria de esta aplicación es antigua, hay que hacer muchas modificaciones para que Windows 2003 se entienda con ella y no conseguí hacerla funcionar passwordless usando claves DSA. Una manera más sencilla y con configuraciones más Linuxeras es sin duda la que nos ofrece Cygwin.
Tan solo debemos seguir unas sencillas instrucciones para tenerlo funcionando. Yo seguí las instrucciones de www.netadmintools.com pero sin instalar el paquete rsync. Cuidadito si habéis instalado antes OpenSSH para windows, porque modifica la variable de entorno PATH (p.e. fallo al ejecutar el comando net) y crea un conflicto con la biblioteca cygwin1.dll propia de Cygwin. Así que desintalad y borrad toda huella relacionada con OpenSSH antes de instalar Cygwin.
Si todo ha salido bien tendremos como resultado un servidor SSH funcionando en nuestra máquina Windows 2003 que soporta separación de privilegios y autenticación por clave RSA/DSA. Si alguien se atasca en algo, ya sabe que puede usar los comentarios para preguntar.
Veamos un caso:
- El usuario root que ejecuta el script bajo crontab quiere enviar por SFTP el archivo generado a la ubicación 192.168.1.100 como el usuario zimbra.
- Resulta que no queremos que se guarde el archivo en la carpeta home creada por Cygwin para el usuario al iniciar sesión por primera vez, sino que lo queremos meter en c:/backups/zimbra.
No problem. Primero generamos la clave:
root@localhost# ssh-keygen -t dsa
Luego la copiamos a nuestro directorio home remoto:
root@localhost# scp /.ssh/id_dsa.pub zimbra@192.168.1.100: /.ssh/authorized_keys2
Ahora desconectamos y veremos que al volver a conectar ya no pide password. Ni por SSH ni por SFTP. Siempre y cuando especifiquemos que queremos conectar con el usuario zimbra.
Ahora editamos el script y vamos a la sección:
#--- SSH REMOTE DR COPY ---# # This option will secure copy you archives to a remote server via 'scp' DRCP="yes" # valid answers are "yes" or "no" SSHUSER="zimbra" REMOTEHOST="192.168.1.100" REMOTEDIR="/cygdrive/c/backups/zimbra"
Como se puede apreciar, el asunto está en especificar el directorio remoto mediante el mapeo de unidad cygdrive. Claro está que el usuario local zimbra debe existir en la máquina Windows 2003 y debe de tener permiso de escritura en la carpeta especificada.
Cabe matizar que actualmente, la máquina PFSense que gestiona el tráfico consigue alcanzar los 250Mbit/s en transmisiones troughput, es decir, entre diferentes redes. El equipo tiene un Athlon 64 4200+, tarjetas de red PCI gigabit Intel, dos GB de RAM DDR800 y una CompactFlash en lugar de disco duro. Vamos, menos de 200€.
100% 8372MB 26.2MB/s 05:19








