Fazendo backups de devices por SSH com script em expect e bash

Automatizar processos é sempre importante. Não há cabimento que em pleno 2017 pessoas façam processos de backup em empresas de maneira manual (ou pior, que nem exista backup, trabalhando na sorte).

Este post surgiu da necessidade em meu trabalho de rodar comandos de backup em um appliance e copiar esse arquivo de backup gerado para um lugar seguro, que tenha a cópia e segurança. Diferente de equipamentos que tem só configuração em texto plano, como Cisco, Alcatel-Lucent, Datacom por exemplo e que já possuem softwares que fazem essa função, no trabalho usamos o RANCID, dê uma procurada, temos onde trabalho, a solução de wireless Aruba, que o backup é um conjunto de arquivos compactados. Junto com a controller existe um software da própria Aruba para gerenciamento das controladoras que faz backup, chamado AirWave. Mas para fazer backup ela precisa ter acesso a leitura e gravação e por motivos de segurança deixamos o software apenas com leitura, ele ficou exclusivamente para gráficos, relatórios, rastreabilidade de dados, etc. Assim, ficamos sem ter uma solução nativa para realizar backup das controllers. Há quem contrate apenas a solução de access points e controllers, assim este material será bem útil.

As próprias controllers, por SSH ou por browser, possui uma ferramenta manual de backup. Basicamente você loga por SSH e em modo enable você dá o comando backup flash e é gerado dentro da flash da controller o arquivo flashbackup.tar.gzvocê copia o arquivo por scp para um servidor e tem o backup. Qual o problema? ter que fazer isso manualmente, sempre. Assim, procurando uma forma de fazer de forma automatizada e com base em scripts disponíveis que eu adaptei para funcionar corretamente e melhorei para as minhas necessidades nasceram esses scripsts. Deixo claro que fiz para as controllers Aruba, mas você pode fazer para qualquer equipamento que tenha SSH e que você precise realizar um conjunto de comandos e extrair arquivos deste local.

Pra ficar mais didático vou comentar apenas nos scripts, copie eles, salve e dê permissões de execução com chmod +x [nome_do_arquivo]

 

O script CopiaController

#!/usr/bin/expect -f
#Programa de backup da Controller Aruba - modulo copia controller - versao 0.1
#Wagner Bonifacio Leite

#variavel da controller 1
set controller1 "192.168.0.6"

#variavel da controller 2
set controller2 "192.168.0.7"

#variavel do servidor de destino do arquivo
set server "192.168.0.100"

#variavel de data
set data [exec date +%d-%m-%y]

#laco de repeticao para fazer uma controller por vez limitado a duas
for {set c 1} {$c <= 2} {incr c 1} {

#condicional para variavel controller -unica, para laço de repeticao-
if { $c == 1} {

#se variavel verdadeira seta controller 1 como controller
set controller [lindex $controller1 0]
 
 } else {

#senao seta controller 2 como controller
set controller [lindex $controller2 0]

}

#loga SSH na controller
spawn ssh [usuario_da_controller]@$controller
sleep 2
#envia a senha para logar na controller
expect {
"*word:" {send "[senha_da_controller]\r"}
}
sleep 1
#passa a controller para enable mode com o comando enable
expect {
"*>" {send "en\r"}
}
sleep 1
#senha de enable
expect {
"*word:" {send "enable\r"}
}
sleep 1
#comando que gera o backup backup flash
expect {
"#" {send "backup flash\r"}
}
sleep 60 
#envia backup por SCP
expect {
"#" {send "copy flash: flashbackup.tar.gz scp: $server [usuario_do_server] flashbackup$c-$data.tar.gz\r"}
}
sleep 1
expect {
"*word:" {send "[senha_do_server]\r"}
}
sleep 15
#Deleta backup da controller
expect {
"#" {send "delete filename flashbackup.tar.gz\r"}
}
sleep 1
#sai da controller
expect {
"*#" {send "exit\r"}
}
sleep 5
expect {
"*>" {send "exit\r"; exp_continue}
}
}

#roda o script auxiliar para mover da pasta padrao para uma propria para ter snapshots de backup
exec /backup/BackupController/CopiaArquivos.sh >@stdout

#cria o arquivo de log para confirmar que executou todos os scripts
exec /backup/BackupController/Logs.sh >@stdout

#encerra o script
expect eof

E os scrips auxiliares CopiaArquivos.sh e Logs.sh

CopiaArquivos.sh

(lembro que o caminho /backup/BackupController/Controller/ foi criado por mim para a organização dos arquivos, faça a sua escolha)

#!/bin/sh
#Programa de backup da Controller Aruba - modulo copia de arquivos - versao 0.2
#Wagner Bonifacio Leite

#variavel de data
data=$(date +"%d-%m-%y")

#laco de repeticao para fazer a copia um arquivo por vez limitado a dois
for c in 1 2

do
 
 #comando de copia do arquivo da origem padrao do scp para a pasta destino
 cp /home/[usuario_do_server]/flashbackup$c-$data.tar.gz /backup/BackupController/Controller/
 echo "arquivo flashbackup$c-$data.tar.gz copiado para a pasta /backup/BackupController/Controller/"

sleep 3

#comando de deletar arquivo na origem
rm -Rf /home/[usuario_do_server]/flashbackup$c-$data.tar.gz
echo "arquivo flashbackup$c-$data.tar.gz apagado na origem"

done

Logs.sh

#!/bin/sh
#Programa de backup da Controller Aruba - modulo log - versao 0.1
#Wagner Bonifacio Leite

#variavel de data
data1=$(date +"%d-%m-%y")

#grava em arquivo os dados
echo "BACKUP REALIZADO" >> logs/CONTROLLER-$data1.log
echo "DATA - $data1" >> logs/CONTROLLER-$data1.log

E para finalizar a configuração de crontab

No Linux dê o comando crontab -e

Adicione a linha aonde está o script principal, colocarei o que fiz, altere conforme seu uso

00 23 * * * exec /backup/BackupController/CopiaController >> /backup/BackupController/logs/log.txt

Para verificar se está correto a linha no seu cron, dê o comando crontab -l.

No meu caso faz backup todo dia as 23h00, modifique conforme suas necessidades.

Bom, os scripts são esses, espero que quem gerencia controllers Aruba tire proveito e quem precisa de um script para acesso a SSH também tire proveito. Até mais.

 

 

Wireless – tire o melhor das redes sem-fio

Redes wireless estão na moda, facilitam a vida, dão mobilidade e são eficientes, afinal aproveitam algo que temos em abundância (ar) e evita o que todas as esposas/mães/viciados em organização odeiam: fios!

Sempre que me perguntam sobre esse tema acabo tendo que responder perguntas frequentes, então resolvi, após algumas perguntas no twitter, esclarecer sobre detalhes técnicos e úteis para que não haja frustação, pois toda tecnologia tem suas vantagens e suas desvantagens.

Então vamos para algumas dicas e espero nos comentários boas perguntas para atualizar o post.

Equipamentos:

As marcas que mais confio : Linksys, Netgear, Belkin, Tp-link.

A que não recomendo: D-link. Infelizmente de cada 10 pessoas que tem problemas com redes sem-fio 8 tem esse equipamento. Fisicamente, o chip utilizado por eles é o mesmo que os das marcas citadas positivamente, o maior problema deles é com relação ao firmware. Então se for comprar um D-link só vale a pena se projetos de firmware opensource (dd-wrt e openwrt, por exemplo) derem suporte ao modelo específico.

802.11a/b/g/n: Pelo custo benefício atual procure as redes N. São as mais rápidas e permitem uma experiência multimídia satisfatória, além de se adaptar melhor a locais com divisórias/paredes. Se seu notebook não possui N e não tem intenção de trocar tão cedo procure por redes a ou g. Em prédios o uso de redes a pode ser uma solução no caso de interferência (falarei mais em outro tópico).

Segurança:

NUNCA, eu disse NUNCA use protocolo de criptografia inferior ao WPA2 (no caso, sem nada, WEP e WPA). A chance de uso indevido da sua rede é gigantesco.

Também não use soluções mistas (WPA/WPA2), em muitos equipamentos não se comporta bem.

Outro ponto é: não use nome e senhas padrão. Quem trabalha com redes ou invade redes sabe as senhas padrão de equipamentos de cór. Use um nome de rede (SSID) e equipamento que também não revelem de fato quem é o proprietário.

Não use a senha do equipamento igual a passphrase do WPA2. Afinal se o invasor conseguir a passphrase não conseguirá acesso total ao equipamento. Não tenha preguiça com segurança, afinal se algo for feito pelo seu acesso, o responsável juridicamente é você.

Senhas boas tem mais de oito caracteres e tem maiúsculas, minúsculas, letras, números e caracteres especiais. Dica para senha: Forme frase ou use alguma que você sempre lembra, exemplo: Vou-me embora pra Pasárgada, Lá sou amigo do rei, desta frase eu geraria a senha V3Pp1s@# (claro que não utilizo a senha Bandeiristica em questão).

Com relação a passphrase aproveite que pode-se utilizar espaços então use a frase, com as mesmas dicas da senha: V0u-m3 3mb0r@ pra Pas@rgada, L@ s0u ami90 d0 r31

Desta forma a rede já está segura, mas pode ficar mais: Ocultar SSID e só permitir Mac Addresses dos seus equipamentos.

Configuração:

Escolha o canal da sua rede: Em equipamentos que fazem isso automaticamente, ótimo, mas existem equipamentos que não tem essa feature, assim faça uma varedura com o seu Access Point das redes próximas e anote em um papel.

Como pode ser visto no desenho acima, pelo padrão adotado no Brasil e aprovado pela Anatel, os canais ideais para utilização são 1, 6 e 11. São os canais que não utilizam spectro em comum, assim, com os SSIDs e canais anotados, veja quais são as redes mais fortes e qual canal e utilize os canais diferentes e mais distantes, ou caso todos estejam ocupados o que possua redes com menor intensidade.

Não utilize bloqueio a redes rogue: Se você tem apenas um access point não tem porque você atacar redes intrusas, afinal, se você mora em apartamento a suposta rede intrusa provavelmente é seu vizinho, outro ponto é que para combater redes rogue seu AP (access point) gasta potência, então você perde potência útil entre seus equipamentos. Quando usado em redes corporativas, o bloqueio a redes rogue é efetivo pois é equilibrado entre APs, assim o usuário não sente a falta de potência.

Evite fazer bridge entre APs (quem faz transferências entre máquinas): Se for possível faça a ligação entre APs por rede cabeada. Parece um contracenso mas não é. Se você tem uma rede G (54Mbps, lembre que é velocidade máxima e dependendo da distancia e interferência pode cair até para 1Mbps) metade é usado para upload e metade para download, e esses valores são divididos entre os utlizadores a cada ponto adicionado (redes sem-fio são um grande hub), assim se você fizer um bridge, sua banda será dividida por 2, fora os outros utilizadores. Quem não transfere arquivos entre máquinas pode ser vantajoso, pois evita o cabo UTP entre os equipamentos.

Distância, Atenuantes e disposição de equipamento:

Redes sem-fio tem problemas com: água, vidro, malha de metal (depende da espessura, quanto mais fina pior).

Redes sem-fio tem ganho: campo aberto, alvenaria, madeira seca. Nesses casos podemos chegar aos 100 metros, mas quanto mais distante, mais fraco o sinal e mais ruido existirá.

Há casos de redes sem-fio entre plantas que na época de chuva degradam sinal, pois as árvores ficam úmidas! Casas de madeira enfrentam o mesmo problema. Vidro não tem o que fazer, é caso perdido.

Local de fixação do equipamento: Leve em consideração que a antena que vem com o equipamento é omni-direcional, assim o sinal transmitido é esférico, assim, faça um croqui do local a ser instalado e veja o quão central ele pode ficar.

Altura de fixação: Quanto mais alto melhor.

Booster de sinal: Amplificadores de sinal quase sempre não são recomendados. Afinal, como eles só amplificam, acaba sendo amplificado sinal bom e ruído. Até hoje não encontrei um amplificador que corte o ruído.

Bom, acho que é isso. Espero ter tirado as dúvidas mais frequentes.

UPDATE1: Agradeço ao meu ex-professor e amigo Ivan Martinez pelas dicas, já foram incluídas no texto.