terça-feira, 14 de fevereiro de 2017

Protocolos CDP e LLDP de Descoberta de Vizinhos

Olá Pessoal,

Os protocolos CDP e LLDP são utilizados para comunicação layer-2 entre dispositivos da infraestrutura de uma rede de computadores com a finalidade de descoberta dos vizinhos diretamente conectados. Como ambos os protocolos operam na camada de enlace, os dispositivos sequer precisam ser configurados com um endereço IP para trocarem quadros com informações que permitam sua descoberta na rede de maneira dinâmica. A boa notícia é que ambos os protocolos são extremamente simples de comprender e ainda mais fáceis de configurar! Se você já sabe operar o CDP, então operar o LLDP será tão simples quanto.

O CDP (Cisco Discovery Protocol) é um protocolo proprietário da Cisco e provavelmente um conhecido há anos daqueles que estudam para o exame de certificação CCNA. Outro protocolo que tem exatamente a mesma finalidade é o LLDP (Link-Layer Discovery Protocol) com a diferença de ser um padrão da indústria (IEEE 802.1AB) que pode ser implementado por qualquer fabricante, o que faz dele uma solução bem mais flexível do que o CDP em ambientes com dispositivos de múltiplos fabricantes.  Aqueles que estão estudando para o exame CCNA já devem saber que recentemente o LLDP passou a integrar o componente curricular do novo exame. 

Para praticar os procedimentos de configuração dos protocolos CDP e LLDP o leitor pode construir qualquer cenário com roteadores e switches no simulador Cisco Packet Tracer. Para exemplificar a configuração, irei me basear na simples topologia apresentada abaixo, em que temos um roteador diretamente conectado a outros dois switches que também estão conectados entre si.


Configuração do Cisco Discovery Protocol (CDP)

O CDP já vem habilitado por padrão nas caixas da Cisco, o que é útil para soluções que integram uma infraestrutura totalmente baseada em dispositivos Cisco, por exemplo entre telefones IP e switches Catalyst que se beneficiam da troca de informações da VLAN auxiliar de voz. No entanto, é importante estar atento que são muitas as situações em que é melhor desativar o CDP nas interfaces em que não desejamos que dispositivos vizinhos possam visualizar informações sobre um determinado equipamento, já que a divulgação pode facilitar o processo de descoberta de informações por pessoas não autorizadas. 

É possível desativar globalmente o CDP através do comando destacado em amarelo:

Router(config)# no cdp run
Router(config)# exit
Router# show cdp
% CDP is not enabled

Outra é possível é desativá-lo apenas em alguma(s) interface(s):

Router(config)# interface g0/0
Router(config-if)# no cdp enable

Como o CDP já vem habilitado por padrão, o comando "show cdp neighbors" pode ser utilizado nas caixas para exibir um resumo dos vizinhos diretamente conectados. Esse comando permite identificar qual(is) dispositivo(s) estão diretamente conectados em qual(is) interface(s) do dispositivo local. Caso o administrador queira obter informações mais detalhadas sobre os vizinhos, a palavra detail pode ser adicionada ao comando (show cdp neighbors detail). 

O CDP pode ser bastante útil em ambientes pequenos e médios que não possuem documentação atualizada da sua infraestrutura de redes. A partir de um dispositivo qualquer na infraestrutura é possível identificar os links para seus vizinhos e através do acesso sucessivo aos vizinhos é possível identificar todos os demais vizinhos sob a referência do dispositivo seguinte, de maneira que ao final o administrador terá em mãos a topologia completa da rede.  A propósito, um bom exercício é o leitor utilizar as informações abaixo para desenhar a topologia da rede. 

Observe que a partir do Router é possível identificar que diretamente conectado nele temos o Switch1 e Switch2. Na sequência, a partir do Switch1 podemos confirmar o link anterior para o Router, além de um link adicional para o Switch2. Continuando, no Switch2 podemos confirmar os links para o Router e Switch1. Ao final vocês serão capazes de chegar exatamente na topologia apresentada na figura anterior. Simples assim e bastante útil, não é mesmo?

Router> show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
Switch1      Gig 0/0          166            S       2960        Gig 0/1
Switch2      Gig 0/1          166            S       2960        Gig 0/1


Switch1> show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
Switch2      Gig 0/2          153            S       2960        Gig 0/2
Router       Gig 0/1          125            R       C2900       Gig 0/0


Switch2> show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID    Local Intrfce   Holdtme    Capability   Platform    Port ID
Switch1      Gig 0/2          124            S       2960        Gig 0/2
Router       Gig 0/1          157            R       C2900       Gig 0/1



Configuração do Link-Layer Discovery Protocol (LLDP)

Ao contrário do CDP que vem habilitado por padrão nas caixas da Cisco, o LLDP precisa ser habilitado manualmente pelo administrador antes de interagir com outros equipamentos com o protocolo aberto. Nada de mais nesse ponto, visto que sua ativação global em todas as interfaces é bem simples, conforme pode ser observado no comando destacado em amarelo:

Router# show lldp
% LLDP is not enabled
Router# configure terminal
Router(config)# lldp run
Router(config)# exit
Router# show lldp

Global LLDP Information:
    Status: ACTIVE
    LLDP advertisements are sent every 30 seconds
    LLDP hold time advertised is 120 seconds
    LLDP interface reinitialisation delay is 2 seconds  

Depois de habilitado, o LLDP pode exibir as informações simplificadas dos seus vizinhos exatamente da mesma forma que foi feito anteriormente com o CDP, mudando apenas a palavra CDP por LLDP na linha de comando. A mesma regra vale para exibir informações detalhadas em que basta adicionar a palavra detail no comando de consulta dos vizinhos.  

Router# show lldp neighbors
Capability codes:
    (R) Router, (B) Bridge, (T) Telephone, (C) DOCSIS Cable Device
    (W) WLAN Access Point, (P) Repeater, (S) Station, (O) Other
Device ID           Local Intf     Hold-time  Capability      Port ID
Switch1             Gig0/0         120        B               Gig0/1
Switch2             Gig0/1         120        B               Gig0/1

Total entries displayed: 2

Router# show lldp neighbors detail
(...) Saída Omitida 


Na realidade o LLDP permite que o administrador possa personalizar sua operação com mais opções do que o CDP. Por exemplo, com LLDP é possível definir quais informações um dispositivo deve ou não deve enviar para seus vizinhos através de atributos de controle, tamanho e valor (TLV). 

Router(config)# lldp tlv-select ?
    mac-phy-cfg           IEEE 802.3 MAC/Phy Configuration/status TLV
    management-address    Management Address TLV
    port-description      Port Description TLV
    port-vlan             Port VLAN ID
    power-management      IEEE 802.3 DTE Power via MDI TLV
    system-capbilities    System Capabilities TLV
    system-description    System Description TLV
    system-name           System NAME TLV 
 
Assim como o CDP, também é possível desativar o LLDP apenas em alguma(s) interface(s) em que não desejamos a troca de informações do dispositvo com seus vizinhos diretamente conectados. Para desativar o protocolo em uma interface específica devem ser utilizados os comandos abaixo:

Router(config)# interface g0/0
Router(config-if)# no lldp receive
Router(config-if)# no lldp transmit

Façam seus testes...

Samuel.

sexta-feira, 3 de fevereiro de 2017

Níveis de Privilégio no Sistema Cisco IOS

Olá Pessoal,

Um conceito básico que todos aprendem logo no primeiro contato com o sistema IOS utilizado em switches e roteadores da Cisco são os níveis de privilégio. A maioria dos profissionais já sabe que por padrão existe o modo de execução (nível 1) em que o usuário somente tem acesso à visualização de alguns comandos básicos sem nenhuma permissão de executar qualquer configuração no dispositivo, além do modo privilegiado (nível 15) que permite a visualização e configuração de todos os recursos do sistema (equivalente ao usuário root no Linux).

Se os níveis padrões são identificados pelos números 1 e 15, é de se esperar que os números intermediários tenham algum significado, não é mesmo? E eles têm, já que o IOS permite a definição de até 16 níveis de privilégio variando de 0 a 15, sendo 0 o mais restritivo e 15 o mais permissivo. Esse detalhe acaba se tornando apenas secundário porque é comum utilizar o comando enable assim que o administrador faz acesso a um dispositivo para obter acesso pleno a todas as configurações, o que torna desnecessário qualquer outro modo intermediário.  


No entanto, em ambientes maiores que possuem muitos equipamentos e diversos técnicos e engenheiros responsáveis pelas configurações das caixas, é natural segregar o pessoal em grupos homogêneos que tenham diferentes privilégios de acesso com o objetivo de restringir a atuação de cada grupo dentro do escopo da sua função. Por exemplo, é prática gerencial bastante comum classificar o pessoal técnico em níveis 1 (entrada), 2 (intermediário) e 3 (avançado), de maneira que os chamados sejam associados com cada nível em função da sua natureza. 

Nesses casos é bastante útil ter a flexibilidade de criar mais níveis de privilégios para esses grupos, ao invés de ficar limitado apenas aos dois níveis padrões 1 e 15, já que o nível 1 tem apenas acesso básico a visualização de poucas configurações e que o nível 15 representa o extremo oposto em que o técnico pode realizar qualquer intervenção na caixa. A ideia dos níveis intermediários é conferir acesso apenas a comandos específicos que um determinado grupo de usuários requer para executar suas funções. Quando criamos um usuário em uma base local que fica armazenada no próprio equipamento switch ou roteador, estamos habituados a fazê-lo da seguinte maneira:

Roteador(config)# line console 0
Roteador(config-line)# login local
Roteador(config-line)# line vty 0 4
Roteador(config-line)# login local
Roteador(config-line)# exit
Roteador(config)# username ADMIN privilege 15 secret SENHA

Utilizamos a configuração "login local" no acesso via console e nas primeiras 5 sessões remotas (vty 0 4) para forçar que seja realizada a autenticação do usuário antes de liberação do acesso, lembrando que o modo padrão (login) consiste apenas em senha sem usuário. O comando destacado em amarelo cria um usuário denominado ADMIN com permissão privilegiada (nível 15), sendo que SENHA é sua senha! A criação de usuários com níveis intermediários de privilégio é tão simples quanto o procedimento anterior, bastando alterar o número do privilégio.

No entanto, de nada adianta alocar um usuário com um nível de privilégio que não teve nenhum comando adicionado pelo administrador naquele nível específico, ou seja, é necessário informar quais comandos ele poderá executar. No exemplo abaixo criaremos um usuário denominado OPERADOR_2 com nível de privilégio 9, de modo que esse usuário será capaz de executar qualquer comando que tenha sido previamente associado pelo administrador com o nível 9 (incluindo os comandos de 0 a 8). Observem nas próximas linhas que a permissão de visualização do arquivo startup-config será restrita apenas aos usuários de nível intermediário 9, ou seja, somente os usuários dos níveis 9 até 15 poderão visualizar todas as configurações que são inicializadas com o equipamento. 

Roteador(config)# username OPERADOR_2 privilege 9 secret SENHA_9
Roteador(config)# privilege exec level 9 show startup-config

Como são várias as possibilidades para personalizar os níveis intermediários, abaixo trago outro exemplo em que é criado o usuário OPERADOR_1 de nível 6. Esse nível permite a configuração simples de endereços IPv4 e IPv6 nas interfaces de rede, inclusive com possibilidade de ativá-las (no shutdown) ou desativá-las (shutdown). Reparem que o segundo termo da sintaxe do comando privilege remete ao modo ou sub-modo de configuração de pertença do comando. Por exemplo, é no sub-modo de configuração de interface (amarelo) onde são configurados os endereços IP e ativadas/desativadas as interfaces.

Roteador(config)# username OPERADOR_1 privilege 6 secret SENHA_6
Roteador(config)# privilege exec level 6 configure terminal
Roteador(config)# privilege configure level 6 interface
Roteador(config)# privilege interface level 6 ip address 
Roteador(config)# privilege interface level 6 ipv6 address
Roteador(config)# privilege interface level 6 no ip address
Roteador(config)# privilege interface level 6 no ipv6 address
Roteador(config)# privilege interface level 6 shutdown
Roteador(config)# privilege interface level 6 no shutdown

Por fim, é importante ter em mente que o usuário pode utilizar o comando "show privilege" para visualizar o nível de privilégio do usuário em que ele está logado no sistema. 

Roteador> show privilege
Current privilege level is 1

Roteador# show privilege
Current privilege level is 15
  
Para que qualquer usuário possa ter permissão para visualizar seu nível de privilégio através do comando anterior, além de ter acesso a todos os demais comandos de visualização do modo padrão de execução (nível 1), podem ser utilizados os seguintes comandos:

Roteador(config)# privilege exec level 1 show privilege
Roteador(config)# privilege exec level 1 show

Como há muitos mais detalhes envolvidos com a configuração dos níveis intermediários de privilégio no sistema IOS, recomendo para aqueles interessados no assunto que façam a leitura da documentação oficial da Cisco no link abaixo:


Façam seus testes...

Samuel.