Dead Packets

22/11/2009

Script de Backup para firewalls Juniper – ScreenOS

Filed under: ScreenOs — drak @ 12:18 PM

O script abaixo realiza o backup do arquivo de configuração de qualquer firewall Juniper com o sistema operacional ScreenOS utilizando SCP (Secure Copy) e realiza a limpeza de arquivos mais antigos que 30 dias, evitando o estouro do disco caso você se esqueça de limpar regularmente os arquivos gerados. Além disso ele também gera um status report com as diferenças do backup em relação ao dia anterior e o hostname para fácil identificação, esse relatório é enviado por email toda vez que é executado.

Para que o script funcione são necessários os seguintes pré-reqs:

  1. USUARIO_BACKUP deve ser usuário local do firewall e deve existir no servidor Linux onde vai rodar o script
  2. USUARIO_BACKUP deve possuir um par de chaves DSA e e ter sua chave pública associada ao seu usuário no firewall
  3. O firewall deve estar no arquivo /firewall/script/firewall.juniper no formato: IP,HOSTNAME

Existem algumas melhorias que eu planejo implementar algum dia, como a inclusão do hostname do lado do IP do firewall no status report assim como a inclusão do checksum do arquivo de backup, para que seja possível identificar uma alteração no backup no momento do recovery, garantindo que você não está confiando em um arquivo modificado em relação ao dia em que foi gerado.

Update 23/11: Um colega do trabalho implementou a inclusão do hostname ao lado do IP, facilitando a identificação do firewall no relatório.

Update 30/11: Tomei vergonha na cara e implementei o cálculo do checksum.

Update 16/12: Inclui a opção de timeout, para que caso o servidor esteja fora do ar não impacte no tempo do backup.

Update: 21/04: Alterei o output do relatório, agora apresenta uma tabela muito mais fácil de ser analisada, removi o diff do relatório que é enviado para o email.

#!/bin/sh
# Script para realizar o backup dos firewalls Juniper
data=$(date +%d-%m-%Y)
dataOntem=$(date +%d-%m-%Y -d "-1 day")
hora=$(date +%d-%m-%Y-%H:%M:%S)
email=email@dominio.com
log=/firewall/log/bkpJuniper.$data.log
logConsolidado=/firewall/log/bkpConsolidado.$data.log
logDiff=/firewall/log/bkpJuniper.$data.diff.log
user=USR_BACKUP

echo  >> $log
echo $hora":Inicio" >> $log

cat /firewall/script/firewall.juniper | while read linha; do
firewall=`echo -e $linha | cut -d"," -f1`
hn=`echo -e $linha | cut -d"," -f2`
hora=$(date +%d-%m-%Y-%H:%M:%S)
# Puxa o arquivo de configuracao
scp -o ConnectTimeout=5 $user@$firewall:ns_sys_config /firewall/backup/$firewall.$data.cfg
if [ $? == 0 ]; then
        md5=`md5sum /firewall/backup/$firewall.$data.cfg | cut -d ' ' -f1`
        echo $hora"     $firewall       $hn     SUCESSO $md5" >> $log
        diff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg --brief
        if [ $? != 0 ]; then
                echo $hora": Detectada alteracao no firewall $firewall ($hn)" >> $logDiff
                diffOut=$(sdiff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg -s)
                echo >> $logDiff
                echo "$diffOut" >> $logDiff
        fi
else
        echo $hora"     $firewall       $hn     FALHA" >> $log
fi
done
hora=$(date +%d-%m-%Y-%H:%M:%S)
echo >> $log
echo $hora":Fim" >> $log

# Remove arquivos mais antigos que 30 dias
find /firewall/log/*.log -mtime +30 -daystart -delete
find /firewall/backup/*.cfg -mtime +30 -daystart -delete

showtable -ti=Horario,IP,Firewall,Status,Checksum $log >> $logConsolidado
cat $logConsolidado | mail -s "Firewall Backup Status" $email

cat /firewall/script/firewall.juniper | while read linha; do

firewall=`echo $linha | cut -d’=’ -f1`

hn=`echo $linha | cut -d’=’ -f2`

Anúncios

4 Comentários »

  1. Error on line 41

    Comentário por Duarte — 15/02/2012 @ 5:06 PM | Responder

  2. isso não funciona para mim nem que a porra !

    Comentário por Duarte — 17/02/2012 @ 2:17 PM | Responder

    • que pau que tá dando ?

      Comentário por drak — 09/03/2012 @ 6:43 PM | Responder


RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Crie um website ou blog gratuito no WordPress.com.

%d blogueiros gostam disto: