FreeBSD - Configuração do Net-SNMP
Configuração do Net-SNMP.
Net-SNMP
O Simple Network Management Protocol (SNMP), é um protocolo usado para monitorar a saúde e o bem-estar de equipamentos de rede
(Ex.: roteadores) e equipamentos de informática.
Além de implementar um agente SNMP que permitirá gerenciar um host, o Net-SNMP também possui diversos aplicativos usados para implementar SNMP v1 , SNMP v2c e SNMP v3, usando ambos IPv4 e IPv6.
Portanto, o conjunto inclui as funções:
Existe ainda uma biblioteca para o desenvolvimento de novas aplicações SNMP, com C e APIs Perl.
Adaptado e traduzido do site: http://www.net-snmp.org
# cd /usr/ports/net-mgmt/net-snmp
Configure as opções de compilação do Net-SNMP 5, com o comando:
# make config
Marque as opções apropriadas de acordo com sua necessidade no Net-SNMP 5.5_4.
Execute o comando de compilação e instalação do Net-SNMP, com o seguinte comando:
# make install clean
Depois de realizada a instalação, vamos habilitar o Net-SNMP. É preciso editar o arquivo "rc.conf", para que no momento em que o FreeBSD for reinicializado, o Net-SNMP carregue automaticamente:
# vi /etc/rc.conf
Adicione ao final do arquivo as linhas abaixo, depois salve o arquivo e saia.
Agora, vamos configurar o Net-SNMP:
# cd /usr/local/share/snmp/
# cp snmpd.conf.example snmpd.conf
Neste momento, devemos limpar todo o conteúdo do arquivo "snmpd.conf" e adicionar somente o seguinte comando: rocommunity public
Logo após a execução destas configurações, é preciso inicializar o SNMP:
# /usr/local/etc/rc.d/snmpd start
# snmptranslate -Tp -OS -IR | more
Este exemplo mostra a identificação (OID numérico e textual) de todos os objetos de todas as MIBs implementadas pelo Net-Snmp.
# snmptranslate -Tl | more
Através de uma ferramenta do Net-SNMP, pode-se testar o agente simulando um gerente fazendo um pedido SNMP. Neste pedido é solicitado ao agente todas as informações de todos os objetos do grupo system da MIB-II.
Portanto, utilizou-se a versão 2 do protocolo SNMP (parâmetro –v 2c), a comunidade chamada public e o agente está executando no host localhost:
# snmpwalk -v 2c -c public localhost system
Confira a saída do comando:
Também podemos trabalhar com outros grupos e não somente com o grupo system, mas para se trabalhar com outros grupos, deve-se utilizar a ferramenta snmptranslate.
Nesta etapa, trabalharemos com o grupo interfaces:
# snmpwalk -v 2c -Os -c public localhost interfaces
Confira o resultado:
Quando trabalha-se com o SNMP, pode-se fazer pedidos, assim como foi mostrado no exemplo anterior, onde foram pedidos informações do grupo interfaces. Mas neste momento, desejamos solicitar a descrição e o endereço físico de cada interface física presente na máquina.
# snmpget -v 2c -Os -c public localhost ifDescr.1 ifPhysAddress.1 ifDescr.
Veja o resultado:
Até este momento, estamos coletando informações de um computador, que no caso é o localhost, mas com o SNMP podemos coletar informações de outros equipamentos, tais como: roteadores, switches, entre outros.
O exemplo abaixo, mostra a coleta de informações de um roteador wireless:
# snmpwalk -v 2c -c public 192.168.0.13 system
Resultado:
Além de implementar um agente SNMP que permitirá gerenciar um host, o Net-SNMP também possui diversos aplicativos usados para implementar SNMP v1 , SNMP v2c e SNMP v3, usando ambos IPv4 e IPv6.
Portanto, o conjunto inclui as funções:
- Recupera informações de um dispositivo SNMP, seja através de pedidos individuais (snmpget , snmpgetnext ), ou pedidos múltiplos ( snmpwalk , snmptable , snmpdelta);
- Manipula as informações de configuração em um dispositivo SNMP (snmpset);
- Recupera uma coleção fixa de informações de um dispositivo SNMP (snmpdf , snmpnetstat , snmpstatus);
- Converte em formas numéricas e textuais de OIDs MIB, MIB e exibe o conteúdo e estrutura (snmptranslate);
- Um navegador MIB gráfica ( tkmib ), utilizando Tk / Perl;
- Uma aplicação daemon para receber notificações SNMP (snmptrapd). Notificações selecionadas podem ser registradas (para o syslog, o log de
eventos NT, ou um arquivo de texto), e encaminhadas para outro sistema de gerenciamento SNMP, ou ainda passada para um aplicativo externo.
Esta, possui um agente para responder às consultas de SNMP na gestão da informação (snmpd). Isso inclui suporte embutido para uma ampla gama de módulos de informações MIB, e pode ser estendido com módulos carregados dinamicamente, scripts externos e comandos.
Existe ainda uma biblioteca para o desenvolvimento de novas aplicações SNMP, com C e APIs Perl.
Adaptado e traduzido do site: http://www.net-snmp.org
Instalando o Net-SNMP
Para instalar o Net-SNMP, acesse o diretório:# cd /usr/ports/net-mgmt/net-snmp
Configure as opções de compilação do Net-SNMP 5, com o comando:
# make config
Marque as opções apropriadas de acordo com sua necessidade no Net-SNMP 5.5_4.
Execute o comando de compilação e instalação do Net-SNMP, com o seguinte comando:
# make install clean
Depois de realizada a instalação, vamos habilitar o Net-SNMP. É preciso editar o arquivo "rc.conf", para que no momento em que o FreeBSD for reinicializado, o Net-SNMP carregue automaticamente:
# vi /etc/rc.conf
Adicione ao final do arquivo as linhas abaixo, depois salve o arquivo e saia.
Snmpd_enable="YES"
snmpd_flags="-a"
snmpd_conffile="/usr/local/share/snmp/snmpd.conf"
snmpd_flags="-a"
snmpd_conffile="/usr/local/share/snmp/snmpd.conf"
Agora, vamos configurar o Net-SNMP:
# cd /usr/local/share/snmp/
# cp snmpd.conf.example snmpd.conf
Neste momento, devemos limpar todo o conteúdo do arquivo "snmpd.conf" e adicionar somente o seguinte comando: rocommunity public
Logo após a execução destas configurações, é preciso inicializar o SNMP:
# /usr/local/etc/rc.d/snmpd start
Testando o SNMP
Para trabalhar com SNMP, devemos utilizar algumas ferramentas. Uma destas ferramentas é o snmptranslate, que é responsável por mostrar todos os objetos, juntamente com detalhes de sua definição na MIB (tipo de acesso, tipo de dado, OID textual, OID numérico):# snmptranslate -Tp -OS -IR | more
Este exemplo mostra a identificação (OID numérico e textual) de todos os objetos de todas as MIBs implementadas pelo Net-Snmp.
# snmptranslate -Tl | more
Através de uma ferramenta do Net-SNMP, pode-se testar o agente simulando um gerente fazendo um pedido SNMP. Neste pedido é solicitado ao agente todas as informações de todos os objetos do grupo system da MIB-II.
Portanto, utilizou-se a versão 2 do protocolo SNMP (parâmetro –v 2c), a comunidade chamada public e o agente está executando no host localhost:
# snmpwalk -v 2c -c public localhost system
Confira a saída do comando:
SNMPv2-MIB::sysDescr.0 = STRING: FreeBSD platao 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Fri Feb 10 10:54:40 BRST 2012 root@platao:/usr/src/sys/i386/compile/KERNELMETG i386
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.8
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (6817) 0:01:08.17
SNMPv2-MIB::sysContact.0 = STRING: Me <me@example.org>
SNMPv2-MIB::sysName.0 = STRING: platao
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance
SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.
SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (12) 0:00:00.12
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (12) 0:00:00.12
Também podemos trabalhar com outros grupos e não somente com o grupo system, mas para se trabalhar com outros grupos, deve-se utilizar a ferramenta snmptranslate.
Nesta etapa, trabalharemos com o grupo interfaces:
# snmpwalk -v 2c -Os -c public localhost interfaces
Confira o resultado:
ifNumber.0 = INTEGER: 6
ifIndex.1 = INTEGER: 1
ifIndex.2 = INTEGER: 2
ifIndex.3 = INTEGER: 3
ifIndex.4 = INTEGER: 4
ifIndex.5 = INTEGER: 5
ifIndex.6 = INTEGER: 6
ifDescr.1 = STRING: usbus0
ifDescr.2 = STRING: em0
ifDescr.3 = STRING: em1
ifDescr.4 = STRING: plip0
ifDescr.5 = STRING: ipfw0
ifDescr.6 = STRING: lo0
ifType.1 = INTEGER: usb(160)
ifType.2 = INTEGER: ethernetCsmacd(6)
ifType.3 = INTEGER: ethernetCsmacd(6)
ifType.4 = INTEGER: para(34)
ifType.5 = INTEGER: ethernetCsmacd(6)
ifType.6 = INTEGER: softwareLoopback(24)
ifMtu.1 = INTEGER: 0
ifMtu.2 = INTEGER: 1500
ifMtu.3 = INTEGER: 1500
ifMtu.4 = INTEGER: 1500
ifMtu.5 = INTEGER: 65536
ifMtu.6 = INTEGER: 16384
ifSpeed.1 = Gauge32: 0
ifSpeed.2 = Gauge32: 1000000000
ifSpeed.3 = Gauge32: 1000000000
ifSpeed.4 = Gauge32: 0
ifSpeed.5 = Gauge32: 10000000
ifSpeed.6 = Gauge32: 0
ifPhysAddress.1 = STRING:
ifPhysAddress.2 = STRING: 0:c:29:b7:42:e
ifPhysAddress.3 = STRING: 0:c:29:b7:42:18
ifPhysAddress.4 = STRING:
ifPhysAddress.5 = STRING:
ifPhysAddress.6 = STRING:
ifAdminStatus.1 = INTEGER: up(1)
ifAdminStatus.2 = INTEGER: up(1)
ifAdminStatus.3 = INTEGER: up(1)
ifAdminStatus.4 = INTEGER: down(2)
ifAdminStatus.5 = INTEGER: up(1)
ifAdminStatus.6 = INTEGER: up(1)
ifOperStatus.1 = INTEGER: down(2)
ifOperStatus.2 = INTEGER: up(1)
ifOperStatus.3 = INTEGER: up(1)
ifOperStatus.4 = INTEGER: down(2)
ifOperStatus.5 = INTEGER: down(2)
ifOperStatus.6 = INTEGER: up(1)
ifLastChange.1 = Timeticks: (0) 0:00:00.00
ifLastChange.2 = Timeticks: (0) 0:00:00.00
ifLastChange.3 = Timeticks: (0) 0:00:00.00
ifLastChange.4 = Timeticks: (0) 0:00:00.00
ifLastChange.5 = Timeticks: (0) 0:00:00.00
ifLastChange.6 = Timeticks: (0) 0:00:00.00
ifInOctets.1 = Counter32: 0
ifInOctets.2 = Counter32: 5100885
ifInOctets.3 = Counter32: 262496
ifInOctets.4 = Counter32: 0
ifInOctets.5 = Counter32: 0
ifInOctets.6 = Counter32: 73840
ifInUcastPkts.1 = Counter32: 0
ifInUcastPkts.2 = Counter32: 34491
ifInUcastPkts.3 = Counter32: 5331
ifInUcastPkts.4 = Counter32: 0
ifInUcastPkts.5 = Counter32: 0
ifInUcastPkts.6 = Counter32: 2062
ifInNUcastPkts.1 = Counter32: 0
ifInNUcastPkts.2 = Counter32: 0
ifInNUcastPkts.3 = Counter32: 0
ifInNUcastPkts.4 = Counter32: 0
ifInNUcastPkts.5 = Counter32: 0
ifInNUcastPkts.6 = Counter32: 0
ifInDiscards.1 = Counter32: 0
ifInDiscards.2 = Counter32: 0
ifInDiscards.3 = Counter32: 0
ifInDiscards.4 = Counter32: 0
ifInDiscards.5 = Counter32: 0
ifInDiscards.6 = Counter32: 0
ifInErrors.1 = Counter32: 0
ifInErrors.2 = Counter32: 0
ifInErrors.3 = Counter32: 0
ifInErrors.4 = Counter32: 0
ifInErrors.5 = Counter32: 0
ifInErrors.6 = Counter32: 0
ifInUnknownProtos.1 = Counter32: 0
ifInUnknownProtos.2 = Counter32: 0
ifInUnknownProtos.3 = Counter32: 0
ifInUnknownProtos.4 = Counter32: 0
ifInUnknownProtos.5 = Counter32: 0
ifInUnknownProtos.6 = Counter32: 0
ifOutOctets.1 = Counter32: 0
ifOutOctets.2 = Counter32: 61863
ifOutOctets.3 = Counter32: 136009
ifOutOctets.4 = Counter32: 0
ifOutOctets.5 = Counter32: 0
ifOutOctets.6 = Counter32: 73840
ifOutUcastPkts.1 = Counter32: 0
ifOutUcastPkts.2 = Counter32: 329
ifOutUcastPkts.3 = Counter32: 919
ifOutUcastPkts.4 = Counter32: 0
ifOutUcastPkts.5 = Counter32: 0
ifOutUcastPkts.6 = Counter32: 1033
ifOutNUcastPkts.1 = Counter32: 0
ifOutNUcastPkts.2 = Counter32: 0
ifOutNUcastPkts.3 = Counter32: 0
ifOutNUcastPkts.4 = Counter32: 0
ifOutNUcastPkts.5 = Counter32: 0
ifOutNUcastPkts.6 = Counter32: 0
ifOutDiscards.1 = Counter32: 0
ifOutDiscards.2 = Counter32: 0
ifOutDiscards.3 = Counter32: 0
ifOutDiscards.4 = Counter32: 0
ifOutDiscards.5 = Counter32: 0
ifOutDiscards.6 = Counter32: 0
ifOutErrors.1 = Counter32: 0
ifOutErrors.2 = Counter32: 0
ifOutErrors.3 = Counter32: 0
ifOutErrors.4 = Counter32: 0
ifOutErrors.5 = Counter32: 0
ifOutErrors.6 = Counter32: 0
ifOutQLen.1 = Gauge32: 0
ifOutQLen.2 = Gauge32: 0
ifOutQLen.3 = Gauge32: 0
ifOutQLen.4 = Gauge32: 0
ifOutQLen.5 = Gauge32: 0
ifOutQLen.6 = Gauge32: 0
ifSpecific.1 = OID: zeroDotZero
ifSpecific.2 = OID: zeroDotZero
ifSpecific.3 = OID: zeroDotZero
ifSpecific.4 = OID: zeroDotZero
ifSpecific.5 = OID: zeroDotZero
ifSpecific.6 = OID: zeroDotZero
Quando trabalha-se com o SNMP, pode-se fazer pedidos, assim como foi mostrado no exemplo anterior, onde foram pedidos informações do grupo interfaces. Mas neste momento, desejamos solicitar a descrição e o endereço físico de cada interface física presente na máquina.
# snmpget -v 2c -Os -c public localhost ifDescr.1 ifPhysAddress.1 ifDescr.
Veja o resultado:
2 ifPhysAddress.2 ifDescr.3 ifPhysAddress.3
ifDescr.1 = STRING: usbus0
ifPhysAddress.1 = STRING:
ifDescr.2 = STRING: em0
ifPhysAddress.2 = STRING: 0:c:29:b7:42:e
ifDescr.3 = STRING: em1
ifPhysAddress.3 = STRING: 0:c:29:b7:42:18
Até este momento, estamos coletando informações de um computador, que no caso é o localhost, mas com o SNMP podemos coletar informações de outros equipamentos, tais como: roteadores, switches, entre outros.
O exemplo abaixo, mostra a coleta de informações de um roteador wireless:
# snmpwalk -v 2c -c public 192.168.0.13 system
Resultado:
SNMPv2-MIB::sysDescr.0 = STRING: Linux WLA-5000AP 2.4.25-LSDK-5.1.0.42 #1 Mon Jan 7 12:51:41 CST 2008 mips
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::org.0.0.0.0.0.0.0.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (237827) 0:39:38.27
SNMPv2-MIB::sysContact.0 = STRING: Douglas Godoy
SNMPv2-MIB::sysName.0 = STRING: AccessPoint
SNMPv2-MIB::sysLocation.0 = STRING: Cozinha_doug
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (5) 0:00:00.05
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.2 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.2 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (4) 0:00:00.04
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (5) 0:00:00.05