Migrar listas de distribuição entre servidores Zimbra

Exportando listas de distribuição para arquivos no Zimbra origem:

zmprov gadl > /tmp/listas.txt
mkdir /tmp/listas;while read LIST;do zmprov gdl $LIST | grep zimbraMailForwardingAddress:| awk {'print $2'} > /tmp/listas/${LIST}.txt ;done < /tmp/listas.txt
Fonte: Antigo wiki do Sr Bastos https://github.com/coffnix 

Envie os arquivos para o Zimbra destino.

Neste caso não estava disponível o arquivo /tmp/listas.txt do servidor anterior, então o script trata os arquivos de exportação para criar e popular as listas no novo Zimbra:

#!/bin/bash
# Eduardo Marques
# 06/2019

# Lista os arquivos de exportação
for i in `ls /opt/migration/listas/`;do

# Cria a lista de distribuição tratando a saída removendo o ".TXT"
        echo "Criando lista ${i::-4}" >> /tmp/criarlista.log
        zmprov cdl ${i::-4}

        # Lista emails do txt e adiciona os emails na lista.    
        for LMAIL in $(cat /opt/migration/listas/${i} |grep -v ^#|tr 'r' ' ');do
                zmprov adlm ${i::-4} $LMAIL  >> /tmp/criarlista.log
        done
done

Script de Backup do fileserver para bucket S3 na AWS

O script a seguir foi usado para enviar backup de uma pasta do fileserver para o bucket no S3 da Amazon.

O pré requisito não abordado desde script é que você já tenha instalado e configurado o AWS cli no servidor e que também já configurado  o Mutt para envio de e-mails.

 #!/bin/bash  
 #  
 # Autor: Eduardo Marcial  
 # Data: 23-05-2019  
 # Backup aws  
 # v2  
 # Para restaurar backup pode ser usado:   
 # "aws s3 cp --recursive s3://backup-namebucket/dir/ /dest/dir"  
 ###############################################################  
 # Carrega variáveis  
 DATE=`date +%d%m%y%H%M`  
 proc=`ps aux | grep "aws s3" | grep -v grep | awk '{print $2}' | xargs | awk '{print $1}'`;  
 log='/var/log/bkp-aws.log';  
 # Checagem de processos de backup rodando.  
 if [ $proc ]; then  
      echo "O processo AWS S3 está rodando" -`date` >> $log;  
      echo " " >> $log;  
 else  
 #Rodando AWS cli s3  
      /usr/local/bin/aws s3 sync /home/arquivos/ s3://backup-bucketname/ 2>> /var/log/bkp-aws.log  
      if [ $? -ne 0 ]; then  
           cat /var/log/bkp-aws.log | mutt -s "Relatório de backup AWS com exceções" [email protected]            
      else  
           cat /var/log/bkp-aws.log | mutt -s "Sucesso no envio de backup para AWS" [email protected]  
      fi  
      echo "Done ! "-`date` >> $log;  
      echo " " >> $log;  
 fi  
 # Fim  

Como fazer rsync entre servidores sem senha

Isso faz com que não seja necessário rodar o rsync daemon no cliente.
Com a configuração do ssh também é possível efetuar o login direto por ssh sem senha.


Permitir ssh conectar sem senha:

Esses comandos abaixo devem ser executados no servidor que VAI conectar sem senha (ORIGEM):

Com essa configuração acima, o ssh já funciona sem senha quando se tenta conexão do servidor origem para o servidor destino.

Agora iremos melhorar a segurança deste acesso:

 No arquivo /root/.ssh/authorized_keys do servidor DESTINO, fica a chave criada. Deve-se então  adicionar na linha da chave o seguinte:

Ou seja, o comando from restringe somente para o ip de origem e o command permite que o comando especificado seja executado quando o servidor de origem fizer o ssh no servidor de destino. O resto da linha é o que já existe no arquivo authorized_keys.

Para aumentar ainda mais a segurança, podemos forçar que o Login de root seja efetuado somente para o comando indicado no arquivo acima, basta efetuar o procedimento abaixo, que seta a variavel PermitRootLogin como forced-commands-only:

OBS: Isso restringe totalmente o acesso de root diretamente, de qualquer máquina.

Backup Incremental com rsync

O programa rsync é um utilitário de cópia muito utilizado para fazer backups, ele aceita diversos parâmetros como uso de chaves, manipulação de parâmetros, cópias diferenciais e incrementais.

Abaixo vou deixar um pequeno bashscripts de backup incremental.

Frisando que no backup incremental o local que recebe a cópia completa sempre fica atualizada e o que é mudado é adicionado na pasta de “incrementais”.

Exemplo:

ANTES DO RSYNC

Origem:
/DADOS/word.doc     13 kb


Destino:
/BKPFULL/DADOS/word.doc    13 kb

DEPOIS DO RSYNC COM MUDANÇA NA ORIGEM NO DIA 01/01/2022

Origem:
/DADOS/word.doc     124 kb


Destino:
/BKPFULL/DADOS/word.doc    124kb
/BKP_INCR/01-01-2022/DADOS/word.doc    13 kb

SCRIPT

#!/bin/bash
#
# valedolinux.com.br
# Autor: Eduardo Marcial
# Data: 2018
# Backup Incremental
#
##################################################################################


##################################################################################

# DECLARAÇÃO DE VARIÁVEIS




DATA=$(date +%F) #Carimbo de data aaaa-mm-dd

ORIGEM=”/home/setores”
COMPLETO=”/mnt_hdext/backup-incremental/FULL”
DESTINO=”/mnt_hdext/backup-incremental/$DATA”
PASTLOG=”/mnt_hdext/backup-incremental/log”
LOG=”$PASTLOG/log-$DATA” #Log do backup
UUID_HD_USB=””


##################################################################################

# CHECA MONTAGEM DO HD EXTERNO


CHECK_MOUNTED=$(mount |grep -w /mnt_hdext|tail -1|wc -l)

if [ “${CHECK_MOUNTED}” = “0” ]; then
mount /dev/sdb1 /mnt_hdext 2>> ${LOG}
        if [ $? -gt 0 ]; then
        echo -e “n ERRO AO MONTAR HD-EXTERNO USB UUID=”${UUID_HD_USB}”.” >> $LOG
                exit 1
        else
                echo -e “n OK – HD-EXTERNO USB MONTADO COM SUCESSO” >> $LOG;
        fi
        
fi
##################################################################################
# CRIA DIRETORIOS E ARQUIVOS


if [ ! -d ${DESTINO} ]; then

        mkdir -p ${DESTINO}
fi


if [ ! -d ${COMPLETO} ]; then

        mkdir -p ${COMPLETO}
fi


if [ ! -d ${PASTLOG} ]; then

        mkdir -p ${PASTLOG}
fi


touch $LOG



##################################################################################

# Inicio de bkp


echo “Inicio de backup $(date)” >> $LOG





##################################################################################

# REALIZAR BKP


sudo rsync -azbvP –exclude=’TEMP’ –delete –backup-dir=$DESTINO $ORIGEM $COMPLETO 2>> $LOG



##################################################################################

# SE NÃO HOUVE ERRO NO BACKUP FAZ LIMPEZA – 60 DIAS 


if [ “$?” -eq 0 ]; then

find $DESTINO -maxdepth 1 -mtime +60 -exec rm -rf {} ; 2>> $LOG
else
echo “Erro ao realizar backup incremental. $DATA” >> $LOG
fi


echo “Fim de backup $(date)”