domingo, 11 de setembro de 2011

Gerenciamento de Redes - O Protocolo SNMP

O SNMP (Simple Network Management Protocol) é um protocolo da camada de aplicação que tem como objetivo principal coletar informações de dispositivos gerenciáveis. É o responsável por veícular informações de gerência (valores das MIBs).
Suas interações são sem conexão, trabalha com Mensagens no protocolo UDP/IP, utiliza as portas 161 e 162 e seus pacotes tem tamanho variável.

Este protocolo se tornou padrão para gerência na Internet, por ser simples de implementar e amplamente difundido.

É composto de um Protocolo para troca de mensagens e padrões para estruturar a informação.



As Informações de Gerenciamento são armazenadas em MIBs que são definidas através da SMI (Structure of Management Information) e transportadas através do protocolo SNMP.

SMI
Podemos entender a SMI como uma descrição lógica das informações. É composta dos seguintes elementos:
Nomes dos objetos gerenciados, referenciados através dos OIDs (Object IDentifiers);
Sintaxe dos dados, seguindo os padrões da ASN.1 (Abstract Syntax Notation 1);
Sintaxe de transferência, seguindo as regras da BER (Basic Encoding Rules).

ASN.1
É uma linguagem de descrição de dados da ISO, definida em formato texto não ambíguo, que permite definir modelo de dados com formato independente de máquina. A implementação de dados não é considerada.

Sintaxe básica em ANS.1
Tipos de dados:
Primitivos: INTEGER, OCTET STRING, OBJECT IDENTIFIER, NULL, Subtipos;
Construtores: Lista e Tabelas;
Definidos: Nomes alternativos para tipos ASN.1.

Notações em ASN.1, seguem algumas convenções:

Exemplos de Definição ASN.1:
sysContact OBJECT-TYPE
SYNTAX DisplayString (SIZE (0...255))
ACCESS read-write
STATUS mandatory
DESCRIPTION
    “Texto xxxxxxxxxxxxxxxxxxxxxxxx”

parDhcpStartTime OBJECT-TYPE
SYNTAX  DisplayString (SIZE (1..30))
ACCESS  read-only
STATUS  mandatory
DESCRIPTION
    “Dhcp Server start time”


Campo SYNTAX:
Define o conteúdo do objeto.
INTEGER: Inteiros de 32 bits.
INTEGER (1...100) Sub-tipo inteiro).
OCTET STRING: String de bytes.
OBJECT IDENTIFIER: Localização de outro objeto na MIB.

Aceita alguns tipos específicos de aplicação:
IpAddress: OCTET STRING com 4 bytes.
Counter: Inteiro 32 bits.
Gauge: Inteiro 32 bits.
TimeTicks: Inteiro 32 bits (1/100 de segundo).

Campo ACCESS:
Define a acessibilidade do objeto.

read only: Somente leitura.
read-write: Leitura e escrita.

write-only: Somente escrita, senha do equipamento, por exemplo.
not-accessible: Não acessível, campo para operações internas, por exemplo.

Campo STATUS
Situação do objeto na MIB.
Mandatory: Devem ser implementados por todos os agentes, os valores contidos devem ser válidos.
Optional: Pode ou não ser implementado.
Deprecated: Foi substituido por novo objeto, mas ainda é válido, se tornará obsoleto mais tarde.
Obsolete: Não deve ser considerado.

Mensagem SNMP
Limitada a 484 bytes


As PDUs SNMP
Protocol Data Unit – Unidade de Dados de Protocolo 


Toda operação gera uma resposta, com excessão do Trap. Os dados das operações são transportados na porta 161 UDP/IP, enquanto os traps são transportados na porta 162 UDP/IP.


Estrutura das PDUs SNMP
Preâmbulo e Cabeçalho
Versão:
0: SNMPv1
1: SNMPv2c
2: SNMPv2u/SNMPv2p
3: SNMPv3

Tipo de PDU:
0: getRequest
1: getNextRequest
2: getResponse
3: setRequest
4: trap

Request ID:
Valor númerico usado para fazer referência a pedidos e respostas.

Códigos de erro (Error Status):
0: noError: Sucesso na operação.
1: tooBig: Resposta muito grande.
2: noSuchName: OID não suportado pelo agente.
3: badvalue: Valor incorreto para operação set.
4: readOnly: Tentativa de escrita inválida.
5: genErr: Erro não relacionado ao protocolo.

Error index:
Indica qual variável listada na PDU causou o erro.

A Arquitetura SNMP
Operações/Mensagens SNMP
Get-Request: Recupera o valor de informações de gerenciamento.

Get-Next-Request: Recupera o valor de informações de gerenciamento existentes após um determinado identificador; pega o valor da próxima variável.


Get-Bulk-Request: Estende a funcionalidade da função Get-Next. Traz um bloco de informações (Tabela) de cada vez.

Set-Request: Modifica o valor de informações de gerenciamento.

TRAP: Informa um evento ocorrido no sistema gerenciado.
Inform-Request: Fornece uma informação de gerenciamento não solicitada, usado entre gerentes, porém diferentemente do Trap no caso do Inform-Request existe a confirmação do recebimento da mensagem.
Exemplo de Operação:
Limitações de SNMP
Falta de segurança:
Esquema de autenticação trivial.
Limitações no uso do método SET.

Ineficiência:
Esquema de eventos limitado e fixo.
Operação baseada em pooling.
Comandos transportam poucos dados.

Falta de funções específicas:
MIB com estrutura fixa.
Falta de comandos de controle.
Falta de comunicação entre gerenciadores.

Não confiável:
Baseado em UDP/IP.
Traps sem reconhecimento.

Vulnerabilidade SNMP - Proteção:
Aplicar patchs fornecidos pelo fabricante;
Utilizar aplicações SNMP somente onde seja necessário;
Filtrar o acesso aos dispositivos gerenciados, permitindo somente o tráfego a partir de seus próprios servidores de gerenciamento;
Alterar o nome padrão das comunidades;
Isolar o tráfrego de gerência em uma rede específica, uma VLAN por exemplo, etc...

Versões SNMP:
  • SNMP v1
  • SNMP v2
  • SNMP v3

SNMP V1
Características e Operações Básicas:
Get: Usado pelo NMS (Network Management System – Sistema de Gerenciamento de Redes) para adquirir o valor de uma ou mais instâncias de um objeto de um agente;
GetNext: Usado pelo NMS para adquirir o valor do próximo objeto em uma tabela ou lista;
Set: Usado pelo NMS para atribuir um valor a um objeto no agente.

SNMP V2
Durante a “divergência” SNMPv2, foram definidos quatro variações:
O SNMPv2 original: SNMPv2p; Com o "p" referindo-se a "party-based“ security;
SNMPv2 baseado na comunidade: SNMPv2c;
SNMPv2 baseada no usuário: SNMPv2u;
“SNMPv2 Estrela”: SNMPv2*; Combina elementos de SNMPv2p e SNMPv2u. Isso nunca foi formalmente padronizado. Sim, isso é um asterisco no nome.

Destes, os três primeiros foram documentados em conjuntos de padrões SNMP RFC Standard, o quarto não foi.
A estrutura do formato de mensagem global para cada variante é discutido em um padrão administrativo ou de segurança para a variação em questão, que faz referência à norma SNMPv2 compartilhada para o formato de PDU (RFC 1905).

SNMP V2 (v2c)
Características e Operações adicionais:
Trap: Mensagem não solicitada, enviada por um agente para informar ao NMS sobre um evento significante;
GetBulk: Usado pelo NMS para adquirir eficientemente grandes blocos de dados;
Inform: Permite que um NMS envie traps para outro NMS e receba respostas desses traps.

SNMP V3
Melhorias de Segurança:
USM: User-based Security Model (Modelo de Segurança Baseada em Usuários);
VACM: View-based Access Control Model (Modelo de controle de acesso baseado em visões);
Configuração dinâmica de agentes SNMP utilizando comandos SNMP.

Modelo de Segurança SNMP
Modelo mais comum: SNMP V2c.
Baseado no conceito de “comunidade”.
Cada dispositivo implementa uma ou mais comunidades.
Comunidade default: “public” para leitura e “private” para gravação.


Uma comunidade define:
Método para autenticar o acesso (senha), a visibilidade da MIB e o privilégios de acesso à MIB.

Serviço de autenticação:
Todas as mensagens SNMP são autenticadas, o nome da comunidade serve como senha, porém esse é um sistema de segurança frágil e limitado; Não permite a operação SET em alguns casos.

Alguns dispositivos controlam o acesso usando o nome da comunidade e o número IP do(s) gerente(s) o que eleva um pouco a segurança, mas não resolve o problema.

Traps em SNMP
São mensagens enviadas pelo agente ao gerente, não são respostas a pedidos, ou seja são mensagens não solicitadas, representam eventos anormais.

Classificam-se em:
Genéricos: presentes na MIB padrão.
Específicos: definidos na MIB “enterprises”.

Traps genéricos
ColdStart:
Dispositivo foi ligado;
Configuração local pode ter sido alterada;
Informa ao gerente sobre sua existência.

WarmStart:
Dispositivo foi reinicializado;
Configuração local não foi alterada.

LinkDown:
Link ou porta de comunicação ligado ao nó falhou.

LinkUp:
Link ou porta local foi (re)ativada.

AuthenticationFailure:
O dispositivo recebeu mensagem SNMP não autorizada;
Comunidade não reconhecida;
Número IP de gerente inválido.

EgpNeighborLoss:
Exterior Gateway Protocol falhou no nó;
Normalmente usado em roteadores.

Referências:
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.

4 comentários:

Matty/Cláudia disse...

Muito bom Déo!
Completíssimo !!

Gabriel Santana disse...

Déo,

Parabéns! Encontrei muitas informações sobre Gerencia de Rede em seu blog. Muito bom!

Abraço,

André Déo disse...

Obrigado pessoal,

Esses comentários são o combustível para continuar escrevendo.

Déo

Alê disse...

MAGNÍFICO ! Obrigado!