Ativar SNMP em UBUNTU

De Wiki do Bernardino
Ir para: navegação, pesquisa

O SNMP (do inglês Simple Network Management Protocol - Protocolo Simples de gestão de rede) é um protocolo na camada de aplicação para gestão de redes, que usa o protocolo UDP.

O SNMP funciona no modelo cliente-servidor, em que o dispositivo que pretendemos monitorar tem um serviço que responde a pedidos, no protocolo UDP(161), feitos normalmente pelo sistema de gestão central.

Versões do SNMP

O SNMP possui atualmente três versões, cada uma com suas características.

  • SNMPv1: Primeira versão do protocolo, lançado em 1988 e que implementa os principais comandos do protocolo: GetRequest, SetRequest, GetResponse e GetNextRequest. A segurança é implementada usando o conceito de string comunitária, ou seja, uma string que era compartilhada com todos que necessitassem de obter informações do sistema.
  • SNMPv2: Segunda versão do protocolo. Trouxe inovações nas áreas de performance, segurança e confidencialidade e comunicações agente-agente. A diferença aqui é que além de poder usar a já conhecida string comunitária, era possível definir utilizadores e criadas visões específicas da árvore, de forma que as ações do utilizador pudessem ser melhor controladas e com uma menor granularidade. No entanto, esta versão não teve grande aceitação, tendo por isso sido lançada nova versão o SNMP v2c, que nada mais é do que a SNMP v2 sem a componente de controlo por utilizador.
  • SNMPv3: A terceira versão trouxe mudanças na arquitetura monolítica das versões anteriores, Essencialmente acrescentou a possibilidade de as funcionalidades do sistema pudessem ser estendidas sem que houvesse a necessidade de se modificar o código existente, através da utilização de módulos adicionais, que implementam novas funcionalidades. Outra grande mudança, foi a nível da segurança, com a obrigatoriedade de utilizador/password e encriptação dos dados através de cifras em HASH e de criptografia simétrica por chave compartilhada.

Estruturação dos dados no protocolo SNMP

O serviço SNMP é no final nada mais que uma base de dados hieráquica, chamada MIB, onde o equipamento (router, switch, computador, ...) guarda informação estatística sobre o funcionamento dos vários componentes do sistema. Os dados são guardados em objetos designados por OIDs.

Instalação do SNMP no Linux

A instalação do agente e ferramentas de gestão do protocolo SNMP, faz-se com o seguinte comando:

$ sudo apt-get install snmp snmpd


Convém instalar as várias MIBs disponíveis para a distribuição Linux e para isso use o comando:

$ sudo apt-get install snmp-mibs-downloader

Configurações específicas

O ficheiro /etc/snmp/snmpd.conf contém toda configuração de funcionamento do serviço SNMP

Teste de funcionamento

Para testar o funcionamento pode comecar por verificar se o serviço está a funcionar

   $ netstat -a | grep -i snmp

o resultado será:

udp        0      0 *:snmp                  *:* 

outra possibilidade é através do comando


Configurando o SNMP em um servidor Linux

Agora que criamos nosso agente SNMP, vamos tratar de fazer algumas configurações. O arquivo /etc/snmp/snmpd.conf é bastante explicativo em suas opções, mas nós vamos aqui fazer um arquivo novo, do zero, com as nossas configurações personalizadas.

Então, primeiramente, vamos fazer um backup do arquivo original e criar um arquivo vazio, que usaremos nesse post:

   # cd /etc/snmp/
   # mv snmpd.conf snmpd.conf.old
   # touch snmpd.conf
   # chmod 600 snmpd.conf


Agora, abra o arquivo em um editor qualquer para adicionar nossa primeira Community String:

   rocommunity publico


Salve o arquivo e reinicie o serviço com o comando service snmpd restart.

Para testar, podemos rodar o comando snmpwalk, que percorrerá toda a MIB, mostrando as OIDs encontradas:

   snmpwalk -c publico -v 1 [ip.do.servidor]


Ao executar este comando, você verá uma quantidade enorme de informação relacionada ao servidor. Na maioria dos casos, você não vai querer que todas estas informações estejam disponíveis para todos os usuários. Em vista disso, vamos começar a tratar um pouco mais sobre segurança.

Segurança Básica com SNMP

A maioria dos dispositivos que suportam SNMP não encriptam a string comunitária. Isso abre um leque de possibilidades de acesso de qualquer máquina que possa alcançar o servidor via rede. Informações contidas nas MIBs dão bastantes detalhes da estrutura interna da rede, do funcionamento do servidor ou equipamento que está rodando o agente. Então, por questões de segurança, devemos limitar o acesso a essa informação.

O arquivo snmpd.conf possui vários dispositivos de segurança para permitir que somente conexões confiáveis possam fazer requisições ao agente. Estes comandos são:

com2sec - define quais redes podem fazer requisições e seta a string comunitária correspondente; group - define o protocolo que será usado para cada rede criada anteriormente; view - define quais MIBs estarão visíveis para access - define quais as formas de acesso às mibs, permitindo somente a leitura ou a escrita de informações, de acordo com o grupo.

Como exemplo, olhe o seguinte código:

   ## sec.name source community
   ## ======== ====== =========
   com2sec local localhost privado
   com2sec rede1 172.16.0.0/24 rede1
   com2sec rede2 192.168.0.0/24 redeadm
   ## Access.group.name sec.model sec.name
   ## ================= ========= ========
   group grupo1 v1 local
   group grupo1 v1 rede1
   group grupo2 v2c rede2
   ## MIB.view.name incl/excl MIB.subtree
   ## ============== ========= ===========
   view todas-mibs included .1.3.6.1.2.1
   ## MIB
   ## group.name context sec.model sec.level prefix read write notif
   ## ========== ======= ========= ========= ====== ==== ===== =====
   access grupo1 "" v1 noauth exact todas-mibs none none
   access grupo2 "" v2c noauth exact todas-mibs todas-mibs none


Neste arquivo, estamos definindo o seguinte: A máquina local usará a string comunitária privado, está ligado ao grupo 1 que permite acessar as mibs definidas na view todas-mibs com o protocolo SNMPv1 e não permite escrita de nenhum dado; A rede 172.16.0.0/24, de nome rede1 usará a string comunitária rede1, está também ligada ao grupo 1 com as mesmas configurações acima; A rede 192.168.0.0/24, de nome rede2 usará a string redeadm, está ligada ao grupo 2, que usa o protocolo SNMPv2c e que pode ler e escrever em todas as MIBs relacionada na view todas-mibs.

Este é o mecanismo de segurança existente para a versão 2c do protocolo SNMP.

SNMP na versão 3

A versão 3 do protocolo SNMP é uma alternativa mais segura às versões anteriores do protocolo, na medida que este permite o uso de encriptação de dados baseado em usuário / senha criados no arquivo snmpd.conf, para autenticação.

Para criarmos um usuário, vamos usar o comando net-snmp-config:

   net-snmp-config --create-snmpv3-user -ro -a MD5 -A suasenha usuariov3 -V todas-mibs


Aqui definimos um usuário que possui somente permissões de leitura chamado "usuariov3", que utiliza a senha "suasenha" e definimos para o usuário qual view ele deverá usar.

Atente para a saída do comando:

   adding the following line to /var/lib/snmp/snmpd.conf:
   createUser usuariov3 MD5 "suasenha" DES
   adding the following line to /usr/share/snmp/snmpd.conf:
   rouser usuariov3


As informações de usuário/senha estão sendo salvas no arquivo /var/lib/snmp/snmpd.conf enquanto o tipo do usuário é salvo no arquivo /usr/share/snmp/snmpd.conf. Neste caso, criamos um usuário e senha comuns, e o tráfego de dados para este não é encriptado. Para criar um usuário que trafegue dados de forma encriptada, o comando é um pouco maior:

   # net-snmp-config --create-snmpv3-user -ro -a MD5 -A suasenha -x DES -X chaveprivada usuariov3 -V todas-mibs


Aqui agora definimos o usuário "usuariov3crip" com a senha "suasenha", só que adicionalmente à senha, adicionamos uma chave privada, "chaveprivada", que deve ser utilizada para descriptografar o tráfego entre o agente e o monitor, quando utilizar este usuário.

Para executar uma consulta com o primeiro usuário, você pode usar a seguinte sintaxe:

   snmpwalk -v 3 -u usuariov3 -l authNoPriv -a MD5 -A suasenha [ip.do.servidor]


Para executar uma consulta com o segundo usuário, que encripta os dados transmitidos, você usa a sintaxe:

   snmpwalk -v 3 -u usuariov3 -l authPriv -a MD5 -A suasenha -x DES -X chaveprivada [ip.do.servidor]


Finalizando a configuração de segurança

Bem, até aqui nós criamos uma política de strings comunitárias para a versão 1 e 2c do SNMP, e criamos um usuário para a versão 3. No entanto, na versão 3 não definimos nenhuma forma de limitar a visão do usuário às MIBS.

Para isso, basta configurar uma access para usar o protocolo na versão 3 e solicitar o uso de autenticação e/ou criptografia. O nosso arquivo anterior ficará da seguinte forma:

   ## sec.name source community
   ## ======== ====== =========
   com2sec local localhost privado
   com2sec rede1 172.16.0.0/24 rede1
   com2sec rede2 192.168.0.0/24 redeadm
   ## Access.group.name sec.model sec.name
   ## ================= ========= ========
   group grupo1 v3 local
   group grupo1 v3 rede1
   group grupo2 v3 rede2
   ## MIB.view.name incl/excl MIB.subtree
   ## ============== ========= ===========
   view todas-mibs included .1.3.6.1.2.1
   ## MIB
   ## group.name context sec.model sec.level prefix read write notif
   ## ========== ======= ========= ========= ====== ==== ===== =====
   access grupo1 "" v3 auth exact todas-mibs none none
   access grupo2 "" v3 priv exact todas-mibs todas-mibs none


Finalizando

Aqui demonstramos como criar um servidor simples usando SNMP. Espero ter ajudado um pouco com este post. Só lembrando que no arquivo /etc/snmp/snmpd.conf original, você encontra mais informações sobre como configurar de outras maneiras o agente.


Installing net-snmp MIBs on Ubuntu and Debian 2 Replies

Simple Network Management Protocol (SNMP) is an Internet-standard protocol for managing devices on IP networks. net-snmp is the main SNMP implementation for Linux and BSD platforms. On Ubuntu or Debian net-snmp tools are installed as follows:

   $ sudo apt-get install snmp

You can also install snmpd package. This package contains the SNMP agent.

Installing MIBs

For licensing reasons, net-snmp package installs only a small number of MIBs in /usr/share/mibs directory. A large number of standard MIBs can be installed using snmp-mibs-downloader package:

   $ sudo apt-get install snmp-mibs-downloader
   $ sudo download-mibs

To have the new MIBs recognized by net-snmp, edit /etc/snmp/snmp.conf file as follows:

   $ cat /etc/snmp/snmp.conf
   mibs +ALL
   $

You can use snmptranslate to check the MIBs have been properly installed by printing the MIB tree:

   $ snmptranslate -Tp
   +--iso(1)
      |
      +--org(3)
         |
         +--dod(6)
            |
            +--internet(1)
               |
               +--directory(1)
               |
               +--mgmt(2)
               |  |
               |  +--mib-2(1)
               |     |
               |     +--system(1)
               |     |  |
               |     |  +-- -R-- String    sysDescr(1)
               |     |  |        Textual Convention: DisplayString
               |     |  |        Size: 0..255
   ...

Adding additional MIBs

To install additional MIBs you would need to create first a local ~/.snmp/mibs directory:

   $ cd ~
   $ mkdir -p .snmp/mibs

Drop any additional MIB files you might have in this directory. To install CISCO MIBs, download v2.tar.gz file from ftp://ftp.cisco.com (the file is located in pub/mibs/v2/), and move all the *.my files in the archive in ~/.snmp/mibs directory.

Installing a MIB browser

qtmib is a MIB browser program, that allows you to connect to any SNMP-enabled device and browse the MIBs. The graphical user interface is build using QT4 library. The program comes with a large number of MIBs pre-installed, anything from Cisco’s and Juniper’s to HP’s and Dell’s. You can also install your own MIBs by copying them into ~/.config/qtmib/mibs directory.

For Ubuntu users, the development team makes available a deb package. Download and install it as:

   $ sudo dpkg -i qmib_X.Y.Z_1_amd64.ubuntu.deb

Start the program from the command line as qtmib or from your desktop environment menus. Once started, go into File/Preferences and configure the IP address and community string. Retrieve the data from your device, and click Translate to translate the OIDs in the result window. qtmib MIB Browser

qtmib MIB Browser

Exemplo para a recolha da carga do CPU:

root@teste:~# snmpwalk -v 1 -c public localhost hrProcessorLoad
HOST-RESOURCES-MIB::hrProcessorLoad.768 = INTEGER: 18