Dead Packets

30/11/2009

Script de backup de configuração – Cisco PIX/ASA

Filed under: cisco — drak @ 7:18 AM

Em complemento ao post anterior, segue abaixo o script para backup de firewalls Cisco. Os pré-reqs de funcionamento são ligeiramente diferentes:

  1. USUARIO_BACKUP deve ser usuário local do firewall e ter senha conhecida (SENHA_USUARIO_BACKUP) e deve existir no servidor Linux onde vai rodar o script
  2. O firewall deve estar no arquivo /firewall/script/firewall.cisco no formato: IP,HOSTNAME

Um dos problemas desse script é a existência da senha do usuário de backup em texto claro no meio do arquivo, para minimizar este problema podemos compilar o arquivo de script com o comando “shc -rf arquivo”, mais detalhes sobre este programa nos links de referência.

Existe um problema não resolvido neste script, o status de retorno não é preciso (ou seja, a falha no backup não é avisada corretamente), porém é possível perceber que o script está falhando no primeiro diff após o erro, que avisará sobre uma alteração no firewall mostrando que tudo foi alterado, devido a inexistência de novo arquivo de configuração.

Update 10/12: Alterei a maneira como o script puxa a configuração, agora utilizando wget, dessa forma solucionei o problema relacionado ao código de retorno do script, e agora consigo definir precisamente se o comando executou com sucesso ou não.

Update 16/12: Reparei que o diff estava reportando configurações diferentes mesmo quando o firewall não havia sido alterado, isso estava ocorrendo porque no início de cada arquivo de configuração existe uma linha similar a esta “: Written by USUARIO_BACKUP at 02:00:02.525 BRST Tue Dec 15 2009”. Para que o diff seja efetivo basta incluir um argumento para que ele ignore esta linha.

#!/bin/bash
# Script para realizar o backup dos firewalls Cisco

data=$(date +%d-%m-%Y)
dataOntem=$(date +%d-%m-%Y -d "-1 day")
hora=$(date +%d-%m-%Y-%H:%M:%S)
email=seuemail@seudominio.com
log=/firewall/log/bkpCisco.$data.log
logConsolidado=/firewall/log/bkpConsolidado.$data.log
user=USUARIO_BACKUP
pass=SENHA_USUARIO_BACKUP

echo >> $log
echo $hora": Inicio do Backup - Cisco" >> $log

cat /firewall/script/firewall.cisco | while read linha; do
firewall=`echo $linha | cut -d',' -f1`
hn=`echo $linha | cut -d'=' -f2`

# Puxa o arquivo de configuracao
wget -q --tries 1 --timeout 4 --read-timeout=4 --connect-timeout=4 --no-check-certificate --http-user=$user --http-password=$pass https://$firewall/config -O /firewall/backup/$firewall.$data.cfg
if [ $? == 0 ]; then
        md5=`md5sum /firewall/backup/$firewall.$data.cfg | cut -d ' ' -f1`
        echo $hora": Firewall: $firewall ($hn) - BACKUP OK - $md5" >> $log
        diff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg --brief --ignore-matching-lines='Written by'
        if [ $? != 0 ]; then
                echo $hora": Detectada alteracao no firewall $firewall ($hn)" >> $log
                diffOut=$(sdiff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg -s)
                echo >> $log
                echo "$diffOut" >> $log
        fi
else
        echo $hora": Firewall: $firewall ($hn) - ERRO NO BACKUP" >> $log
fi
done

echo $hora": Fim do Backup - Cisco" >> $log
echo >> $log

# Remove arquivos mais antigos que 30 dias
echo $hora": Inicio da limpeza" >> $log
echo $hora": Lista de arquivos deletados:" >> $log
find /firewall/log/*.log -mtime +30 -daystart >> $log
find /firewall/log/*.log -mtime +30 -daystart -delete
find /firewall/backup/*.cfg -mtime +30 -daystart >> $log
find /firewall/backup/*.cfg -mtime +30 -daystart -delete
echo $hora": Fim da limpeza" >> $log

cat $log >> $logConsolidado
cat $logConsolidado | mail -s "Firewall Backup Status" $email

Referências
Encrypting Shell Scripts

Limitations of shc, a Shell Encryption Utility

ash

# Script para realizar o backup dos firewalls Cisco

data=$(date +%d-%m-%Y)

dataOntem=$(date +%d-%m-%Y -d “-1 day”)

hora=$(date +%d-%m-%Y-%H:%M:%S)

email=bradcsoc@globalcrossing.com

log=/firewall/log/bkpCisco.$data.log

logConsolidado=/firewall/log/bkpConsolidado.$data.log

user=USUARIO_BACKUP

pass=SENHA_USUARIO_BACKUP

echo >> $log

echo $hora”: Inicio do Backup – Cisco” >> $log

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

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

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

# Loga em cada uma das maquinas e executa o comando “sh run”

VAR=$(expect -c “

spawn ssh $user@$firewall

expect \”assword:\”

send \”$pass\r\”

expect \”>\”

send \”ena\r\”

expect \”assword:\”

send \”$pass\r\”

expect \”#\”

send \”conf t\r\”

expect \”conf\”

send \”no pager\r\”

send \”sh run\r\”

log_file -noappend /firewall/backup/$firewall.$data.cfg.tmp

expect \”end\”

expect \”#\”

log_file

send \”pager 24\r\”

send \”exit\r\”

send \”exit\r\”

“)

sed ‘1,/sh/ d’ /firewall/backup/$firewall.$data.cfg.tmp >> /firewall/backup/$firewall.$data.cfg.tmp1

sed ‘$d’ /firewall/backup/$firewall.$data.cfg.tmp1 >> /firewall/backup/$firewall.$data.cfg

rm /firewall/backup/$firewall.$data.cfg.tmp*

if [ $? == 0 ]; then

echo $hora”: Firewall: $firewall ($hn) – BACKUP OK” >> $log

diff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg –brief

if [ $? != 0 ]; then

echo $hora”: Detectada alteracao no firewall $firewall ($hn)” >> $log

diffOut=$(sdiff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg -s)

echo >> $log

echo “$diffOut” >> $log

fi

else

echo $hora”: Firewall: $firewall ($hn) – ERRO NO BACKUP” >> $log

fi

echo “$VAR”

done

echo $hora”: Fim do Backup – Cisco” >> $log

echo >> $log

# Remove arquivos mais antigos que 30 dias

echo $hora”: Inicio da limpeza” >> $log

echo $hora”: Lista de arquivos deletados:” >> $log

find /firewall/log/*.log -atime +30 >> $log

find /firewall/log/*.log -atime +30 -delete

find /firewall/backup/*.cfg -atime +30 >> $log

find /firewall/backup/*.cfg -atime +30 -delete

echo $hora”: Fim da limpeza” >> $log

cat $log >> $logConsolidado

cat $logConsolidado | mail -s “Firewall Backup Status” $email

Anúncios

3 Comentários »

  1. Fala cara! Ótimo site e uma ótima iniciativa!
    To sempre acompanhando aqui também…
    Abraço

    Comentário por Raniere — 17/12/2009 @ 10:37 AM | Responder

    • Opa! E ai Reset, vlw pelo apoio 😀

      Comentário por drak — 17/12/2009 @ 7:00 PM | Responder

  2. Here is an alternative that uses expect and keeps all sessions secure (SSH & SCP).

    http://paklids.blogspot.com/2012/01/securely-backup-cisco-firewall-asa-fwsm.html

    I’ll post my wrapper script later…

    –paklids.

    Comentário por paklids — 25/01/2012 @ 5:30 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

Blog no WordPress.com.

%d blogueiros gostam disto: