Categoria: IOS

Scripts EEM – Roteador enviando e-mail

Por , 24/05/2011 09:14

Continuando o post sobre o EEM – Embedded Event Manager, vamos ver os scripts. Como já dito no post anterior, o script é feito usando o TCL – Tool Command Language e permite a criação de EEM Policies mais elaboradas.

No exemplo escolhido para ilustrar este post, usando um script EEM o roteador passará a enviar e-mails sempre que uma mensagem syslog SYS-5-CONFIG for gerada.

Repositório

A Cisco mantém um repositório onde podemos encontrar scripts criados pela comunidade. Qualquer um pode criar um script e enviar para que outras pessoas possam utilizar.

Neste repositório temos um template com a programação TCL pronta para que o roteador envie e-mail. Vamos fazer o download deste arquivo, e usá-lo como base neste exemplo.

Editando o Sendmail.tcl

Descompacte o arquivo e abra o sendmail.tcl em um editor de texto.

O autor deste script deixou ele pronto para ser executado manualmente (sem gatilho), mas os códigos para detecção de eventos já estão no arquivo. Assim, precisamos habilitar a linha para detectar syslog e indicar o tipo de mensagem que queremos verificar (*SYS-5-CONFIG.*). Você pode mudar isso de acordo com suas necessidades.

Depois vamos configurar para que o show running-config seja enviado no e-mail (o arquivo original envia o show version). Veja no vídeo abaixo.

Editando sendmail.tcl

Usando o Script EEM

1) Agora, usando um tftp server, pegue o arquivo editado e envie para a flash do roteador.

BrainRT01#copy tftp: flash:
Address or name of remote host [10.10.8.66]? 10.10.8.3
Source filename [brainwork_sendmail.tcl]?
Destination filename [brainwork_sendmail.tcl]?
Accessing tftp://10.10.8.3/brainwork_sendmail.tcl…
Loading brainwork_sendmail.tcl from 10.10.8.3 (via FastEthernet0/0): !
[OK - 5265 bytes]

5265 bytes copied in 0.588 secs (8954 bytes/sec)
BrainRT01#

2) Configure as variáveis utilizadas no script (ip do servidor de email, mail from e mail to).

BrainRT01# conf t
BrainRT01(config)#event manager environment _email_server 10.10.10.4
BrainRT01(config)#event manager environment _email_from
BrainRT01@brainwork.com.br
BrainRT01(config)#event manager environment _email_to destinatario@brainwork.com.br
BrainRT01(config)#

Observe que o servidor deve estar configurado de forma aceitar que o roteador envie o e-mail.

3) Defina o diretório de uso e registre o Script.

BrainRT01(config)#event manager directory user policy "flash:/"
BrainRT01(config)#event manager policy brainwork_sendmail.tcl
BrainRT01(config)#

4) Pronto. Quando você sair do modo de configuração global será gerada uma mensagem syslog, notificando das configurações realizadas, o que iniciará a execução do Script.

BrainRT01(config)#exit
BrainRT01#
May 13 18:57:42.533: %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.10.8.3)
May 13 18:57:44.453: %HA_EM-6-LOG: brainwork_sendmail.tcl: Creating mail header…
May 13 18:57:49.441: %HA_EM-6-LOG: brainwork_sendmail.tcl: E-mail sent!
BrainRT01#

Não esqueça de usar o Terminal Monitor, se você estiver acessando o equipamento por Telnet/SSH. E se o e-mail demorar verifique se não foi classificado como SPAM.

O lado negro da força

Como toda ferramenta, o EEM pode ser usado para o bem e para o mal.

Tome cuidado ao baixar scripts da Internet. Scripts baixados de outros lugares que não o repositório Cisco, podem conter backdoor/trojan, permitindo acesso ao seu equipamento.

Aliás, recentemente no Web Security Forum, o Adilson Florentino, do Netfinders, fez uma apresentação chamada IOS Trojan – Quem é o dono do seu roteador? Nela o Adilson alertava justamente para o risco de alguém ter acesso ao seu equipamento e plantar um trojan, que permitiria acesso a sua rede.

É possível, por exemplo, criar um túnel GRE entre seu equipamento e um roteador qualquer, por onde o acesso passaria a ser realizado. Além disso o cracker pode manipular os comandos (show run, show ip int bri, dir) de forma que você não veja as alterações realizadas.

Parece difícil? Saiba que esse script já foi criado, e basta procurar no Google para encontrar o código, comentado inclusive.

Links

Criando scritps
http://www.cisco.com/en/US/docs/ios/netmgmt/configuration/guide/nm_eem_policy_tcl.html

Repositório
http://forums.cisco.com/eforum/servlet/EEM

Até a próxima.

Cisco IOS Embedded Event Manager (EEM)

Por , 16/05/2011 09:57

O EEM – Embedded Event Manager é um subsistema dentro do IOS, que permite monitorar eventos em real time, bem como executar medida corretivas ou informativas com base nestes eventos.

É possivelmente a funcionalidade mais “cool” que a Cisco já colocou no roteador. Com o EEM podemos criar ações customizadas para uma dezena de situações, tendo como limite apenas a imaginação.

Por exemplo, se uma interface fica down, automaticamente o roteador gera uma mensagem syslog. Mas com o EEM podemos criar uma política, onde além da mensagem, um e-mail seja enviado ou até mesmo que um mensagem seja enviada para o Twitter (sério, e isso já existe, veja o @myciscorouter).

Deu para perceber as possibilidades??

Além de ser executado automaticamente por gatilhos (eventos), também é possível executar o Applet ou Script manualmente, como veremos abaixo.

Alguns termos importantes

  • EEM Policy: é uma entidade que define um evento e as ações a serem tomadas quando este evento ocorrer.
  • Applet: forma mais simples de política, criada usando a própria CLI. Apenas um evento é permitido em no Applet.
  • Script: é a política criada usando o TCL – Tool Command Language. É como uma linguagem de programação, e os scripts devem ser criados em um editor de texto. Depois são enviados para a flash e registrados no EEM.
  • Event Detectors: programas usados pelo EEM para detectar quando um evento ocorre. São sistemas separados, que fazem a interface entre o EEM Agent e o EEM Policy. Exemplos de Event Detectors: CLI ED, Counter ED, GOLD ED, IP SLA ED, SNMP ED, entre outros.
  • EEM Actions: ação configurada em uma política e executada após um evento monitorado. Exemplos de ações: executar um comando (ou conjunto de comandos), gerar um trap SNMP, reiniciar o roteador, enviar um e-mail.
  • EEM Environment Variables: são variáveis que podemos usar nas políticas. Funcionam de forma similar as variáveis utilizadas em linguagens de programação. Existem variáveis pré definidas e também é possível criar variáveis.

EEM Applet – Gerando uma mensagem

Depois da introdução, vamos para prática. Como vocês devem ter percebido, o EEM é bem interessante, mas também pode ser complexo.

Este exemplo é apenas para iniciarmos, e não teria nenhuma aplicação prática.

Mensagem Syslog gerada através de um EEM Applet

BrainRT01#conf t
! No nome de conf global crie um applet e de um nome
BrainRT01(config)#event manager applet falha1
! Defina o evento, neste caso nenhum
BrainRT01(config-applet)# event none
! Defina a ação. Neste caso uma mensagem Syslog será gerada
BrainRT01(config-applet)# action TESTE syslog priority emergencies msg "TESTE APPLET"
BrainRT01(config-applet)#end
! No modo de configuração privilegiado execute o applet criado.
BrainRT01#event manager run falha1
BrainRT01#
May 12 18:12:27.503: %HA_EM-0-LOG: falha1: TESTE APPLET

EEM Applet – No shutdown automático

Este exemplo, mais elaborado, encontrei no blog anetworkerblog. Com ele uma interface que é colocada em administrativamente down, volta ficar UP automaticamente (imagina a cara do administrador…).

No shutdown em uma interface com EEM

BrainRT01#conf t
! Crie um applet
BrainRT01(config)#event manager applet No_shut_Lo0
! Defina o evento
BrainRT01(config-applet)#event syslog occurs 1 pattern "Loopback0, changed state to admin"
! Coloque as ações. Aqui temos um conjunto, onde geremos mensagens syslog e
! também comandos, que vão restaurar a interface
BrainRT01(config-applet)#action 1.0 syslog msg "Desabilitaram a Loopbackp0…"
BrainRT01(config-applet)#action 1.1 syslog msg "Vou fazer a lo0 ficar UP novamente, kkkk"
BrainRT01(config-applet)#action 1.2 cli command "enable"
BrainRT01(config-applet)#action 1.3 cli command "conf t"
BrainRT01(config-applet)#action 1.4 cli command "int lo0"
BrainRT01(config-applet)#action 1.5 cli command "no shut"
BrainRT01(config-applet)#action 1.6 syslog msg "Pronto, a Loopback 0 esta UP"
BrainRT01(config-applet)#end
BrainRT01#

Com este applet configurado, sempre que alguém dar um shutdown na interface Loopback0 o EEM vai perceber, através da mensagem gerada pelo roteador, e vai restaurar a interface com o comando no shutdown.

no_shut_eem

No próximo post vou falar sobre os scripts EEM (que permitem criar políticas mais elaboradas), com um exemplo bacana, e também sobre os riscos do Embedded Event Manager.

E se alguém quiser compartilhar applets/scripts fique a vontade.

Links

Introdução EEM
http://www.cisco.com/en/US/docs/ios/netmgmt/configuration/guide/nm_eem_overview.html

Criando Applets
http://www.cisco.com/en/US/docs/ios/netmgmt/configuration/guide/nm_eem_policy_cli.html

Até a próxima.

Encontre as vulnerabilidades do seu IOS

A Cisco disponibiliza em seu site uma ferramenta chamada Cisco IOS Software Checker, que permite listar as vulnerabilidades conhecidas para o IOS.

Basta você informar a versão do software que você usa para encontrar os anúncios que afetam este produto.

Cisco IOS Checker

É possível selecionar o IOS em uma lista, enviar um show version do equipamento para que o IOS Checker identifique a versão, ou ainda fazer o upload de um arquivo .txt que contenha várias versões de softwares (uma em cada linha).

Meu software está afetado? O que fazer?

É grande a chance do software que você utiliza ter pelo menos um Security Advisory, mas isso não significa que você seja afetado por aquela vulnerabilidade.

Security Advisories

1°) Primeiro verifique se você utiliza a feature que contem a vulnerabilidade. Se você não utiliza e não está configurada o problema não te afetará. Algumas funcionalidades podem ainda ser desabilitada, veja se é o caso.

2°) Se a feature está em uso, veja no Security Advisory se há como contornar o problema (o passo-a-passo estará no item Workarounds). Alguma configuração pode solucionar ou pelo menos diminuir o impacto do problema.

3°) Se o produto tem vulnerabilidades em funcionalidades que estão em uso e não há workaround para o problema, a solução pode ser a atualização do IOS. A Cisco disponibiliza gratuitamente atualização com bug fix. Informação de como proceder para obter esta atualização também é encontrada no Security Advisory.

Mas antes de sair atualizando todos os equipamentos lembre-se de homologar o novo software em um ambiente paralelo. A nova versão, com bug fix, pode possuir funcionalidades a mais ou menos.

Para usar o Cisco IOS Checker basta acessar este link.

Até a próxima.

Verificando erros nas interfaces

Por , 03/02/2011 15:45

Encontrei essa boa dica no tekcert.com.

Para verificar a quantidade de erros nas interfaces de um switch Cisco utilize o comando show interfaces | include FastEthernet|error.

Com este comando temos um resumo, com todas as interfaces, quantidade e tipo de erro.

Exemplo: Usando o comando show interfaces | include FastEthernet|error

BrainSW01#show interfaces | include FastEthernet|error
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 3 interface resets
     0 input errors, 0 CRC, 0 frame, 0 overrun, 144 ignored
     0 output errors, 2 interface resets
FastEthernet0/1 is up, line protocol is up (connected)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/2 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/3 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/4 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/5 is up, line protocol is up (connected)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/6 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/7 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/8 is up, line protocol is up (connected)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/9 is up, line protocol is up (connected)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 output errors, 0 collisions, 2 interface resets
FastEthernet0/10 is down, line protocol is down (notconnect)
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 
–More–

Além de trazer exclusivamente as informações buscadas, fica fácil fazer um comparativo entre as interfaces e identificar se alguma está fugindo do padrão.

Até a próxima.

Comando reload

Por , 28/01/2011 10:07

Para reiniciar um roteador Cisco utilizamos o comando reload (modo privilegiado ou diagnostico). Mas além disso este comando tem alguns parâmetros que podem ser muito úteis.

Veja abaixo a principais opções do comando reload.

Verify: O comando reload verify faz com que o equipamento verifique a integridade do IOS antes de reiniciar o equipamento. Se a integridade não estiver ok o reload não é executado.

Exemplo: Verificar a integridade do software antes de reiniciar

BrainRT01#reload /verify

In: Ao usarmos o reload in podemos especificar em quanto tempo o reload será executado. Muito útil quando estamos trabalhando remotamente. Podemos deixar o reload programado, assim, se alguma alteração causar a perda do acesso, em algum tempo o equipamento reinicia e o acesso volta (desde que você não tenha salvo a cagada rsrsrsr).

Exemplo: Reiniciar em 20 minutos

BrainRT01#reload in 20

Cancel: O reload cancel pode fazer par com o reload in. Após um reload estar programado, se você não quiser que ele seja executado basta usar o comando reload cancel.

Exemplo: Cancelar um reload programado

BrainRT01#reload cancel

At: Programa o reload para um horário específico. Podemos usar um horário, no formato HH:MM ou ainda especificar o dia e mês.

Exemplo: Agendando um reload para horário específico

BrainRT01#reload at 20:30
ou
BrainRT01#reload at 15:20 feb 10

Reason: O argumento reason permite adicionar um comentário sobre o reload.

Exemplo: Adicionando um comentário ao reload

BrainRT01#reload reason Troca do IOS

 

Ainda existem outras opções, que podem ser verificadas no Command Reference da versão 12.4.

Até a próxima.

Tema Brainwork 0.2(beta)