Recuperar informações do roteador Cisco em modo analisável

5

Estou tentando escrever um script que extrairá os arquivos de configuração do SSH dos roteadores Cisco e os analisará, para que eu possa garantir que eles atendam aos padrões predefinidos (por exemplo, a senha não deve ser "cisco").

Conectar-se aos roteadores e executar comandos programaticamente é simples. A barreira que eu corro é que executar show running config retorna configurações globais assim como configurações para interfaces particulares.

Meu objetivo era lidar com configurações de interfaces de maneira diferente das configurações globais; por exemplo, posso ignorar configurações ruins em interfaces desativadas.

Existem comandos separados para obter configurações globais e obter definições de interface (por exemplo, show global settings e show interface settings type de comandos)? Alternativamente, existe uma maneira melhor de recuperar essas informações que facilitariam a análise?

    
por ahjohnston25 23.07.2014 / 22:11

2 respostas

3

Análise automática de configuração do Cisco IOS

Alternatively, is there a better way I can retrieve this information that would make it easier to parse?

As configurações do roteador / switch de análise são bastante complicadas devido às camadas de hierarquia nas configurações do IOS; sempre que possível, use uma ferramenta especializada em análise para você. Uma dessas ferramentas é ciscoconfparse (docs são aqui ) Nota 1 . ciscoconfparse tem uma bateria completa de testes unitários, que garantem que a análise permaneça consistente entre versões da ferramenta.

Assumindo que a configuração vem no formato exato usado pelo Cisco IOS show running-config ou show startup-config , ciscoconfparse localiza automaticamente as configurações no nível da interface para você. Isso significa que você pode automatizar a padronização de configurações globais e de interface ... Esta é uma auditoria de configuração de interface de switch na documentação. ciscoconfparse tem muitas funcionalidades; você deveria passar algum tempo lendo a documentação.

Existem também alguns métodos especializados que fazem muita análise de valor específico para você; esses métodos estão atualmente em versão beta - e só visíveis no código-fonte ... para Por exemplo, suponha que você tenha uma configuração de switch salva como c6509.conf

!
interface GigabitEthernet2/8
 ip address 192.0.2.1 255.255.255.252
 mtu 9000
 carrier-delay msec 50
!

Você pode usar um script ou o intérprete python para recuperar o endereço IP e carrier-delay em representações de python nativas ...

[mpenning@tsunami ~]$ python
Python 2.7.3 (default, Jan  2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from ciscoconfparse import CiscoConfParse
>>> config = CiscoConfParse('c6509.conf', factory=True)
>>>
>>> intfs = config.find_objects('interface GigabitEthernet2/8', exactmatch=True)
>>> intfs
[<IOSIntfLine # 1 'GigabitEthernet2/8' info: '192.0.2.1/30'>]
>>>
>>> intfs[0].ip_addr
'192.0.2.1'
>>>
>>> intfs[0].has_manual_carrierdelay
True
>>>
>>> intfs[0].manual_carrierdelay
0.05
>>>
>>> intfs[0].manual_mtu
9000
>>>

Se você quiser a funcionalidade beta, precisará analisar a configuração com factory=True , conforme mostrado acima ...

Capacidades de análise nativa do Cisco IOS

My goal was to handle settings for interfaces differently from global settings; for example, I can ignore bad settings on interfaces that are disabled.

Are there separate commands for getting global settings and getting interface definitions (e.g. show global settings and a show interface settings type of commands)?

O IOS permite que você veja configurações individuais no nível da interface, mas é muito doloroso quando você tem centenas de interfaces ... imagine executar esse comando para cada interface ...

CORE01.PUB.DAL02#sh runn int gi1/2
Building configuration...

Current configuration : 242 bytes
!
interface GigabitEthernet1/2
 description Link to edge01.pub.dal02
 ip address 192.0.2.46 255.255.255.252
 ip ospf network point-to-point
 media-type rj45
end

CORE01.PUB.DAL02#

Dependendo da imagem que você está executando, o Cisco IOS permite algumas outras seções de configuração global ... isso é de um roteador executando 12.4 ...

EDGE01.PUB.DEN#sh running-config ?
  brief       configuration without certificate data
  class-map   Show class-map information
  full        full configuration
  interface   Show interface configuration
  linenum     Display line numbers in output
  map-class   Show map class information
  policy-map  Show policy-map information
  view        View options
  |           Output modifiers
  <cr>

EDGE01.PUB.DEN#

Também é possível obter partes da configuração global usando expressões regulares do IOS da CLI ... por exemplo ...

EDGE01.PUB.DEN#show runn | include ^enable
enable secret 5 $1$mOmQ$sORLRqZQZ/cr7KSyrXUPZ.
EDGE01.PUB.DEN#

FYI, é um hash MD5 para uma senha de ativação de "cisco", que você deseja sinalizar, se encontrado em produção ...

Respondendo a este comentário :

Is there a good way to define when an interface definition ends? It appears that all interface lines are indented by one space but I'm not sure if that's standard across configs

Sim, o Cisco IOS sempre recolhe elementos de configuração filhos por um espaço extra ... independentemente de o filho ser uma instrução de configuração de interface, uma linha de ACL estendida IP, etc ...

Notas finais

Observação 1 Isenção de responsabilidade do Stack Stack : sou o autor.

    
por 24.07.2014 / 12:00
1

Como há contexto no formato, convém analisá-lo contextualmente. Você pode precisar escrever mais código para fazer isso. Considere usar um modelo para o seu código que construa um modelo de objeto para o estado global, interfaces e outros.

Operacionalmente, a remoção de configurações não compatíveis de interfaces desativadas pode ser uma boa ideia, caso alguém as habilite.

    
por 23.07.2014 / 22:25