sexta-feira, 12 de setembro de 2008

Cisco - administração

por Juliano Luz Quinta-feira, 09 de novembro de 2006

Administração de Equipamentos Cisco com Scripts

Este artigo vai reduzir o tempo que você gasta administrando sua rede com equipamentos Cisco. A alteração manual de configurações em uma rede Cisco pode tomar grande parte do tempo de um administrador. Existem alternativas para isso. Este artigo explica como criar um conjunto de ferramentas simples para gerenciar a sua rede com equipamentos Cisco, economizando tempo e reduzindo a possibilidade de erro.

A execução de tarefas repetitivas, além de tomar tempo, pode trazer problemas ao administrador. Consideremos, por exemplo, a alteração de senhas em 100 roteadores de WAN. Essa tarefa pode tomar um turno inteiro de um administrador, se for feita manualmente. Ou pior ainda: pode levar a erros na configuração das senhas, tornando o equipamento inacessível remotamente. E, inevitavelmente, levará a brechas na segurança, diante da dificuldade de alterar as senhas dos equipamentos regularmente.

É claro, existem ferramentas no mercado para administração de redes Cisco, como o Ciscoworks LMS, por exemplo. É uma ferramenta poderosa que pode administrar todos os aspectos de uma rede Cisco. Mas são poucos os administradores que têm essa ferramenta disponível, devido ao seu alto custo. Assim, desenvolvi um kit de ferramentas, baseado em aplicações freeware e scripts, para distribuir configurações e executar tarefas rotineiras como backup de configurações, alteração de senhas e inventário de equipamentos. Estas são tarefas básicas para administração de equipamentos Cisco e que, à medida que mais equipamentos são adicionados, vão tornando a tarefa mais demorada.

Abaixo apresento, de forma resumida, essas ferramentas:

Cygwin: é um ambiente Linux-like para Windows. Ele é composto de uma série de ferramentas que provêm as mesmas funcionalidades de um shell Linux na linha de comandos do Windows. Essas ferramentas podem ser utilizadas para automatizar tarefas. É claro, você pode também utilizar Linux diretamente para executar essas tarefas. A minha escolha por Cygwin foi devido a necessidades específicas minhas.

Pumpkin TFTP: É o melhor software de TFTP disponível, na minha opinião. É utilizado para backup das configurações, software, etc... Você pode optar por outro software de sua preferência, mas eu recomendo fortemente o Pumpkin.

Netcat: segundo o site oficial, Netcat é o canivete suiço do TCP/IP. É uma ferramenta que lê e grava dados através de uma conexão de rede. Eu utilizo o Netcat para conexão remota aos roteadores, simulando ao telnet. O Netcat provê funcionalidades adicionais ao telnet, quando usado em scripts de shell. O Netcat está incluído nas ferramentas do Cygwin, caso você resolva utilizá-lo.

Scripts: desenvolvi uma série de scripts em shell para as tarefas rotineiras em redes Cisco, como alteração de senhas, backup de configurações, inventário de Hardware. Todos scripts têm o mesmo funcionamento básico: um arquivo contendo a lista com os endereços IP dos equipamentos é percorrido, conexão aos equipamentos e a execução dos comandos desejados. A seguir, mostraremos alguns exemplos desses scripts:

Alteração de Senha de Telnet e Enable

Este script conecta aos equipamentos e altera a senha de enable e telnet. O arquivo devicelist contém a lista dos equipamentos que devem ter sua senha alterada. Seu formato é:

pae36rt01 10.1.1.1
spo36rt01 10.1.1.5
bhe17rt01 10.1.1.7
sdr28rt02 10.1.1.13

Abaixo o script:

#!/bin/bash

########################################################
# trocasenha.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################

# porta do telnet
porta=23

# percorre devicelist e lê o nome do equipamento e seu endereço IP

cat devicelist | while read rtrname ipaddress
do

# sequência de comandos para login nos routers e troca das senhas
comando='oldpw\nenable\noldpw\nconf t\nline vty 0 4\npassword newpw\nexit\nenable secret newpw\nexit\nexit\nwrite mem\nexit\n'

# executa os comandos e grava um arquivo de log
echo -e $comando|nc $ipaddress $porta > /var/log/alterasenha.log

done

No script acima, a sequência de comandos a serem aplicados nos roteadores é armazenada na váriavél comando. A sequência de escape \n separando os comandos corresponde a tecla enter pressionada no teclado. Notem, em itálico, as senhas antigas para login e as novas senhas. Estas senhas devem ser alteradas, conforme a sua configuração. Também recomendo que os scripts sejam armazenados e executados somente de computadores confiáveis.

A próxima sequência conecta aos routers e executa os comandos. O resultado da alteração é gravando do arquivo alterasenha.log. Como esse arquivo contêm as novas senhas em modo texto, ele deve ser apagado após a verificação.

Abaixo uma forma mais simplificada do mesmo script, mas com os comandos armazenados num arquivo externo. A desvantagem desse método é não poder usar variáveis nos comandos aplicados ao router. Este mesmo método pode ser aplicado para todos os outros scripts neste artigo:

#!/bin/bash

########################################################
# trocasenha2.sh: conecta aos routers para alteração de senha
# Pre-requisito: devicelist: arquivo contendo lista de equipamentos
#
#
########################################################

# porta do telnet
porta=23

# percorre devicelist e lê o nome do equipamento e seu endereço IP
cat devicelist | while read rtrname ipaddress
do
nc $ipaddress $porta < commands.in
done

O arquivo commands.in tem é simplesmente a sequência de comandos que serão executados nos roteadores:

oldpw
enable
oldpw
conf t
line vty 0 4
password newpw
exit
enable secret newpw
disable
exit

Backup das Configurações

O próximo script faz backup das configurações dos roteadores. Assim como o script para troca de senha, ele precisa de um arquivo como a lista dos dispositivos – no mesmo formato que o script anterior. É necessário também que o TFTP server esteja ativo, para que os arquivos sejam copiados.

#!/bin/bash

########################################################
# backupconfig.sh: faz backup das configurações dos equipamentos e grava
# nome de arquivo indicando equipamento e hora da gravacao
########################################################

# porta do telnet
porta=23

cat devicelist | while read rtrname ipaddress
# armazena hora e data atual
time=`date +%d%m%y%H%M`

do
# sequência de comandos para login nos routers e execução do comando
#copy running-config tftp://tftpserver


comando="oldpw\nenable\noldpw\ncopy running tftp://10.1.2.1/$rtrname-$time.txt\n\n\nexit\nexit\n"

echo -e $comando | nc $ipaddress $porta

done

No script acima a configuração é copiada para o servidor TFTP. O nome do arquivo gravado conterá o home do equipamento (armazenado na variável $rtrname) e a data e a hora do backup (armazenados na variável time).

Coleta de informações

Algumas vezes é necessário capturar informações dos equipamentos para análise, como por exemplo os logs dos routers, ou informações sobre utilização dos links e CPU. Utilizo este script para capturar essas informações e gravar em um arquivo que pode, posteriormente, ser analizado utilizando outros utilitários de shell.

#!/bin/bash

########################################################
# netshow.sh: grava configuracao, logging e show verion em um arquivo
#
########################################################

# porta do telnet
porta=23

# percorre o arquivo devicelist e lê o nome do equipamento e seu
# endereço IP

cat devicelist | while read rtrname ipaddress
do

# sequência de comandos para login nos routers e execução dos comandos # show running-config, show version e show logging

comando="oldpw\nenable\noldpw\nterm len 0\n show running-config\nshow version\nshow logging\nexit\nexit\n"

# executa o comando e grava em um arquivo com o nome do dispositivo
echo -e $comando | nc $ipaddress $porta > /var/rtr/$rtrname-coleta.txt

done

Como todos os outros scripts, este usa um arquivo com a lista de equipamentos no mesmo formato do script para alteração de senhas.

Inventário de Equipamentos

Este último script é um pouco mais complexo. Ele coleta as informações do comando show version e filtra as informações de modelo, memória e versão de software e grava dentro de uma arquivo .csv, para posterior análise no Excel.

#!/bin/bash

########################################################
# inventario.sh: conecta aos routers e grava em um arquivo as informacoes
# de CPU, memoria e software dos equipamentos
########################################################

# porta do telnet
porta=23

# percorre o arquivo devicelist e lê o nome do equipamento e seu endereço IP

cat devicelist | while read rtrname ipaddress
do
tempfile="/tmp/~$rtrname.tmp"

# sequência de comandos para login e execução do comando show version
comando="oldpw\nenable\noldpw\nshow version\nexit\nexit"

# executa os comandos e grava em um arquivo temporário
echo -e $comando | nc $ipaddress $porta > $tempfile

# extrai dados de memoria, modelo e versão de software do router.
memoria=`cat $tempfile | grep "bytes of memory." | awk '{print $8}'`
modelo=`cat $tempfile | grep "bytes of memory." | awk '{print $2}'`
imagem=`cat $tempfile | grep "^System image" | awk '{print $5}'`

# grava as informações num arquivo .csv, para ser importado no Excel
echo $modelo,$memoria,$imagem >> inventario.csv

# remove o arquivo temporário
rm $tempfile
done

O script armazena em variáveis as informações desejadas sobre os equipamentos. Notem que a filtragem é feita procurando-se strings específicas na saída do comando show version. Essas strings são comuns a vários equipamentos Cisco. Eu as utilizo para inventário de roteadores, switches e access-points. As informações são gravadas no arquivo inventario.csv para que eu possa abri-lo no Excel e editar as informações. Por último, pode-se observar ainda que o comando show version é gravado num arquivo temporário, que depois será removido.

Os scripts analisados neste artigo são bastante simples. Eles foram criados para atender a necessidades específicas minhas ou de clientes. Você pode usá-los como base para desenvolver scripts que atendam as suas próprias necessidades. Pode também incrementá-los para resolver tarefas mais complexas. Sua criatividade e conhecimento de shell scripts é o limite. Espero com esse artigo ter contribuído para a diminuição do tempo gasto gerenciando as configurações dos equipamentos.

0 comentários: