Backup de E-mails do Zimbra OSE com o Zmbackup

Um dos maiores problemas de se utilizar a versão Community do Zimbra é o fato de não existir uma ferramenta confiável de backup que seja gratuita e Open Source. Você tem escolhas pagas, como o Zextras (recentemente fez parceria com a Synacor para lançar a ferramenta Zimbra Plus), ou o próprio Zimbra Network Edition. De gratuito temos scripts feitos pela comunidade que estão disponíveis no GitHub ou o zmbkpose, uma ferramenta de backup que faz um tempo que não recebe correções. Essa inexistência de uma opção gratuita que me fez desenvolver o Zmbackup.

 

Zmbackup – A Solução Open Source Free de Backup

 

Zmbackup nada mais é do que uma ferramenta de backup Open Source totalmente escrita em shell script para o Zimbra OSE, feita em base de outra ferramenta chamada Zmbkpose. A ideia inicial seria que o projeto mante-se a estrutura da ferramenta anterior, para então se tornar algo amais, adicionando novas funções a cada release, além de aperfeiçoar a ferramenta, já que a mesma era extremamente lenta. Isso foi feito pois o Zmbkpose é uma ferramenta de longa data da comunidade, mesmo que não seja mais atualizado.

Atualmente o zmbackup faz as seguintes atividades:

  • Backup Completo da conta (configuração e e-mails);
  • Backup Incremental da conta desde a ultima sessão;
  • Backup de Alias;
  • Backup de Listas de Distribuição;

Para começarmos a utilizar ele, primeiramente precisamos instalar ele em nosso servidor. Para isso, acesse a página do GitHub do projeto e baixe e descompacte a versão mais recente do pacote (1.1.2), ou clone a branch master do repositório com o comando git clone:

git clone https://github.com/lucascbeyeler/zmbackup.git -b master

Antes de executar o script de instalação, primeiramente baixe as dependências do zmbackup na máquina, no caso os pacotes parallel, wget, e curl. Esses pacotes possuem os mesmos nomes tanto no CentOS quando no Debian/Ubuntu, então basta utilizar o gerenciador de pacotes dessa distribuição para baixa-los.

CentOS:

$ yum install parallel wget curl grep

Ubuntu:

$ apt-get install parallel wget curl grep

Agora entre no diretório do zmbackup que você criou na sua máquina ao descompactar o arquivo ou baixar via git clone, e então execute o instalador zmbackup_wizard. Siga as instruções do instalador, e ao final você terá o zmbackup instalado e configurado na máquina. Para validar, vire o usuário zimbra e execute o comando zmbackup -v, para que o mesmo te retorne a versão que foi instalada.

# bash zmbackup_wizard
# su - zimbra
$ zmbackup -v
$ zmbackup version: 1.1.3

 

Estrutura do Zmbackup

 

O Zmbackup é composto por 5 arquivos que você precisa ter conhecimento: sessions.txt, zmbackup, zmbhousekeep, zmbackup.conf, e o zmbackup.cron. O conhecimento deles ajuda na hora de tentar entender porque algo não está funcionando corretamente no script.

 

sessions.txt

Esse arquivo é aonde fica armazenado o log de cada backup realizado pelo zmbackup. Seria o equivalente a uma base de dados, porém armazenada em arquivo. Isso é o remanescente do antigo zmbkpose, e existe plano para que já comece a sua descontinuação a partir das novas versões do script. Para manipular-lo você possui o comando zmbackup -l, que lista os backups realizados, além de uma pequena descrição do que se trata essa sessão de backup.

zmbackup -l
Session: full-09777043423
Accounts: 600
    Type: Full Backup

 

zmbackup

Esse é o script principal, e ele só deve ser executado pelo usuário zimbra devido a alguns comandos estarem configurados somente para executarem com esse usuário. Através desse script é que você poderá solicitar que seja feito um backup completo ou incremental, o restore, listagem de sessões concluídas, entre outros. Veremos mais adiante como usar os parâmetros desse script.

 

zmbhousekeep

Esse script é quem fará a manutenção do servidor, removendo arquivos antigos e lixo mantido pelo zmbackup (como por exemplo arquivo vazio de backup incremental). Esse script também fará limpeza no arquivo sessions.txt toda vez que um backup for removido por ele.

 

zmbackup.conf

Todas as opções que você pode ativar no zmbackup, além de configuração de login de usuário do zimbra para backup e o admin do ldap ficam nesse arquivo, localizado dentro de /etc/zmbackup. Dentre as opções disponíveis, as que mais valem a pena comentar e que talvez sejam interessantes para você alterar são:

  • WORKDIR: Diretório aonde o backup será salvo. Por padrão é mantido no /backup, porém você pode criar em outros diretórios, como o /opt/zimbra/backup (default da ferramenta de backup do zimbra);
  • MAX_PARALLEL_PROCESS: Ao contrário de seu antecessor, o zmbackup possui um suporte melhor a paralelismo graças ao pacote parallel. Por default o número de processos paralelizados são 3, mas você pode aumentar o número para quantos você achar melhor, lembrando de tomar cuidado somente para não sobrecarregar seu servidor;
  • ROTATE_TIME: Tempo que será mantido de backups na máquina, sendo o default 30 dias. Após esse período, o backup é excluido na primeira execução do zmbhousekeep;
  • LOCK_BACKUP: Por default o Zmbackup só permite um backup por dia de contas, alias e listas de distribuição. Mais do que isso e você receberá uma mensagem de erro. Essa feature é feita como uma maneira de impedir de que fique com multiplos backups do mesmo dia, gerenciando melhor o espaço em disco, porém pode ser ativado alterando o valor da opção de TRUE para FALSE.

 

zmbackup.cron

O zmbackup não possui um daemon no momento, por isso ele conta com o serviço de agendamento de tarefas (cron) para que possa ser executado. Por padrão já possui uma configuração dentro de /etc/cron.d/zmbackup.cron para quando sua rotina deve ser executada, porém nada te impede de alterar o agendamento para outros horários que você achar melhor. Tome cuidado para não desativar acidentalmente o zmbhousekeep, ou os antigos backups não serão eliminados. Abaixo segue um exemplo do conteúdo que se encontra no arquivo zmbackup.cron:

$ vim /etc/cron.d/zmbackup.cron
###############################################################################
#                             ZMBACKUP CRON FILE                              #
###############################################################################
# This file is used to manage the time and day each backup activity will be
# executed. Please modify this file rather than create a new one.
# Default values for each activity:
#       Full Backup: Every Sunday at 1 AM
#       Incremental Backup: From Monday to Saturday at 1 AM
#       Alias: Every day at 1 AM
#       Distribution List: Every day at 1 AM
#       Backup Rotation: Every day at Midnight
###############################################################################
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
MAILTO=root
0 1 * * 0     zimbra    zmbackup -f
0 1 * * 1-6   zimbra    zmbackup -i
0 1 * * *     zimbra    zmbackup -f -dl
0 1 * * *     zimbra    zmbackup -f -al
0 0 * * *     zimbra    zmhousekeep

 

Trabalhando na Prática com Zmbackup

 

Para que o script não nos atrapalhe com a limitação de 1 backup por dia durante nossos testes, vamos desativar ela no zmbackup.conf (reative posteriormente se quiser ainda manter essa proteção). Para isso abra o arquivo /etc/zmbackup/zmbackup.conf e edite a opção LOCK_BACKUP de TRUE para FALSE:

$ vim /etc/zmbackup/zmbackup.conf
...
LOCK_BACKUP=FALSE
...

Com ela desativada, agora vamos começar a fazer os backups de nosso servidor. Para executar o backup full, basta executar zmbackup -f. Se não passar nenhum outro parâmetro, será executado um backup full da mailbox e das contas de ldap. Você pode limitar o backup para um grupo de contas simplesmente passando uma lista separada por “,” (vírgula). O backup incremental funciona da mesma maneira, basta usar a opção -i, lembrando que se não existe nenhum backup, um full será realizado no lugar.

$ zmbackup -f account01@domain.com,account02@domain.com...,accountn@domain.com

Para restaurar um backup, você precisa do nome da sessão que deseja restaurar. O nome da sessão sempre é <tipo>-<data>, como por exemplo “full-09232017093022”, aonde é o backup full feito no dia 23 de Setembro de 2017 ás 09:30:22. Você consegue encontrar essas informações executando o comando zmbackup -l, ou entrando dentro do diretório aonde você armazenou seus backups. O nome da sessão é o mesmo que o nome do diretório.

$ zmbackup -r -m full-09232017093022 account01@domain.com,account02@domain.com...,accountn@domain.com

A opção -m é necessária para informar que tipo de restore você deseja executar. Diferente do zmbkpose, o zmbackup só restaura aquilo que você solicitar. Ele não irá restaurar o LDAP exceto se você usar a opção -ldp no lugar da -m, e vice versa. Um ponto interessante de quando você executa um restore com base de um full backup: todos os incrementais posteriores também são restaurados sem a necessidade de executar manualmente um a um eles.

Por ultimo, caso deseje deletar um backup, basta executar o comando com o parâmetro -d informando o nome da sessão que deseja excluir. O rotacionamento de backup não é feito através desse comando… ele só serve para jogar fora manualmente uma sessão ou outra, caso seja necessário. O script zmbhousekeep é quem cuida de rotacionar as sessões de backup, jogando fora aquelas que passaram do tempo informado no arquivo zmbackup.conf.

$ zmbackup -d full-09232017093022

 

Conclusões

 

Com isso termino esse artigo sobre o Zmbackup. Existem diversas ideias que pretendo colocar em prática, mas tudo depende de quão viável esse projeto se mostre com o passar do tempo para que eu possa me dedicar mais a ele. Nesse momento o projeto encontra-se na versão 1.1.3 estável dentro do GitHub (ultima atualização lançada no dia 21 de Abril de 2017). Você poderá seguir o projeto através do link abaixo:

Links:

  • https://github.com/lucascbeyeler/zmbackup – Zmbackup
  • https://github.com/bggo/Zmbkpose – Zmbkpose

8 thoughts to “Backup de E-mails do Zimbra OSE com o Zmbackup”

  1. Muita boa a informação,

    Tenho uma necessidade, hoje tenho um servidor zimbra com varios dominios, porém preciso tirar 2 dominios apenas e colocar em outro servidor separado.

    Atualmente eu utilizo Zimbra 8.7+Ubuntu 14.04.5 , a situação que eu clonei esta maquina virtual, mas ela na outra localidade manteve toda estrutura do servidor antigo e eu não consegui renomear.

    O que eu precisava era exportar usuarios+senhas+contas destes dominios, mas estou me batendo.

    Com esta ferramenta, se eu instalar um outro equipamento com um zimbra novo , eu consigo trazer contas e senhas que eu quiser do antigo?

    1. Ricardo, boa noite

      Sim, o zmbackup funcionaria nessa sua situação, porém mediante a criação de um parser que abra cada um dos arquivos LDIF e edite os campos zimbraMailHost e zimbraMailTransport para o hostname do novo servidor. Caso não faça isso, as caixas ficarão inapagáveis e inacessíveis.

      Vale lembrar que você precisará levar o arquivo sessions.txt e o backup que deseja restaurar para o novo servidor. É através do sessions.txt que o zmbackup sabe o que deve ser restaurado.

      Dúvidas, sinta-se livre para entrar em contato comigo via o e-mail lucas.costab@outlook.com.

      Att.
      Lucas Costa Beyeler

  2. Boa Tarde,

    Primeiro parabéns por sua iniciativa e trabalho, queria tirar uma duvida com você, quando faço o backup full tudo ocorre tranquilo, mas quando faço o incremental, ele somente pega as mensagens não lidas do período do incremental (ex full dia 07 e incremental dia 09 só faz das nao lidas deste periodo), sabe como posso corrigir isso ?

    Grato

    1. Estranho, o correto era ele pegar o incremental de todas as mensagens (lidas e não lidas) desde o ultimo backup. Irei analisar esse bug, e assim que tiver uma resposta te informo.

      Att.
      Lucas Costa Beyeler

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *