En este artículo explicaré como configurar un agente snmp. El equipo es un BSD Debian squeeze instalado en una máquina virtual en mi Debian con Virtual Box.
Ejecuta el comando uname -a para ver que kernel tiene el equipo:
GNU/kFreeBSD bsd 8.1-1-686 #0 Tue Jan 4 17:59:05 UTC 2011 i686 i386 Intel(R) Atom(TM) CPU N270 @ 1.60GHz GNU/kFreeBSD
Tiene un Kernel FreeBSD 8.1 para 686.
La IP del equipo con la interfaz se toma del comando ifconfig em0:
em0: flags=8843 metric 0 mtu 1500 options=9b ether 8:0:27:d0:71:7e inet6 fe80::a00:27ff:fed0:717e%em0 prefixlen 64 scopeid 0x1 inet 192.168.0.103 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=3 media: Ethernet autoselect (1000baseT ) status: active
La IP es la 192.168.0.103, acá se nota claramente que la información de la interfaz la maneja de forma diferente a como la maneja Linux.
Se instalará varias aplicaciones de snmp y python con snmp:
aptitude install snmptrapfmt snmptt python-twisted-snmp python-pysnmp4 python-pysnmp4-doc python-pysnmp-common python-pysnmp4-mibs python-pysnmp4-apps python-pysnmp2 python-pysnmp-se python-pynetsnmp python-pyasn1 scli snimpy snmpd snmp libsnmp-python
Se edita el archivo /etc/snmp/snmpd.conf . Para agregar la información de contacto.
SNMP escucha localhost nada más:
agentAddress udp:127.0.0.1:161
Acceso solamente a la información del sistema para el community public.
rocommunity public default -V systemonly
Información del sistema:
sysLocation Servidor BSD en maquina virtual de pruebas sysContact Ernesto Crespo
Monitoreo de la partición raíz si sólo queda 10MB levanta un alarma.
disk / 10000
Carga del sistema:
load 12 10 5
Se reinicia el servicio del agente snmp.
root@bsd:/home/ernesto# /etc/init.d/snmpd restart Restarting network management services: snmpd.
Para verificar el funcionamiento de snmp se realiza una consulta con snmpwalk.
snmpwalk -v 2c -c public localhost iso.3.6.1.2.1.1.1.0 = STRING: "GNU/kFreeBSD bsd 8.1-1-686 #0 Tue Jan 4 17:59:05 UTC 2011 i686" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.255 iso.3.6.1.2.1.1.3.0 = Timeticks: (178) 0:00:01.78 iso.3.6.1.2.1.1.4.0 = STRING: "Ernesto Crespo " iso.3.6.1.2.1.1.5.0 = STRING: "bsd" iso.3.6.1.2.1.1.6.0 = STRING: "Servidor BSD en maquina virtual de pruebas" iso.3.6.1.2.1.1.7.0 = INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (25) 0:00:00.25 iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.10.3.1.1 iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.11.3.1.1 iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.15.2.1.1 iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.1 iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.2.1.49 iso.3.6.1.2.1.1.9.1.2.6 = OID: iso.3.6.1.2.1.4 iso.3.6.1.2.1.1.9.1.2.7 = OID: iso.3.6.1.2.1.50 iso.3.6.1.2.1.1.9.1.2.8 = OID: iso.3.6.1.6.3.16.2.2.1 iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The SNMP Management Architecture MIB." iso.3.6.1.2.1.1.9.1.3.2 = STRING: "The MIB for Message Processing and Dispatching." iso.3.6.1.2.1.1.9.1.3.3 = STRING: "The management information definitions for the SNMP User-based Security Model." iso.3.6.1.2.1.1.9.1.3.4 = STRING: "The MIB module for SNMPv2 entities" iso.3.6.1.2.1.1.9.1.3.5 = STRING: "The MIB module for managing TCP implementations" iso.3.6.1.2.1.1.9.1.3.6 = STRING: "The MIB module for managing IP and ICMP implementations" iso.3.6.1.2.1.1.9.1.3.7 = STRING: "The MIB module for managing UDP implementations" iso.3.6.1.2.1.1.9.1.3.8 = STRING: "View-based Access Control Model for SNMP." iso.3.6.1.2.1.1.9.1.4.1 = Timeticks: (9) 0:00:00.09 iso.3.6.1.2.1.1.9.1.4.2 = Timeticks: (9) 0:00:00.09 iso.3.6.1.2.1.1.9.1.4.3 = Timeticks: (9) 0:00:00.09 iso.3.6.1.2.1.1.9.1.4.4 = Timeticks: (18) 0:00:00.18 iso.3.6.1.2.1.1.9.1.4.5 = Timeticks: (18) 0:00:00.18 iso.3.6.1.2.1.1.9.1.4.6 = Timeticks: (20) 0:00:00.20 iso.3.6.1.2.1.1.9.1.4.7 = Timeticks: (22) 0:00:00.22 iso.3.6.1.2.1.1.9.1.4.8 = Timeticks: (24) 0:00:00.24 iso.3.6.1.2.1.25.1.1.0 = Timeticks: (653703) 1:48:57.03 iso.3.6.1.2.1.25.1.2.0 = Hex-STRING: 07 DB 03 05 0A 11 37 00 2D 04 1E iso.3.6.1.2.1.25.1.3.0 = INTEGER: 1536 iso.3.6.1.2.1.25.1.5.0 = Gauge32: 11
Ahora se le da full acceso al community public para revisar toda la información que maneja el agente:
rocommunity public localhost
Al consultar con snmpwalk ahora devuelve más información como la interfaz de red por ejemplo.
iso.3.6.1.2.1.1.1.0 = STRING: "GNU/kFreeBSD bsd 8.1-1-686 #0 Tue Jan 4 17:59:05 UTC 2011 i686" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.255 iso.3.6.1.2.1.1.3.0 = Timeticks: (632) 0:00:06.32 iso.3.6.1.2.1.1.4.0 = STRING: "Ernesto Crespo " iso.3.6.1.2.1.1.5.0 = STRING: "bsd" iso.3.6.1.2.1.1.6.0 = STRING: "Servidor BSD en maquina virtual de pruebas" iso.3.6.1.2.1.1.7.0 = INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (10) 0:00:00.10 iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.10.3.1.1 iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.11.3.1.1 iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.15.2.1.1 iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.1 iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.2.1.49 iso.3.6.1.2.1.1.9.1.2.6 = OID: iso.3.6.1.2.1.4 iso.3.6.1.2.1.1.9.1.2.7 = OID: iso.3.6.1.2.1.50 iso.3.6.1.2.1.1.9.1.2.8 = OID: iso.3.6.1.6.3.16.2.2.1 iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The SNMP Management Architecture MIB." iso.3.6.1.2.1.1.9.1.3.2 = STRING: "The MIB for Message Processing and Dispatching." iso.3.6.1.2.1.1.9.1.3.3 = STRING: "The management information definitions for the SNMP User-based Security Model." iso.3.6.1.2.1.1.9.1.3.4 = STRING: "The MIB module for SNMPv2 entities" iso.3.6.1.2.1.1.9.1.3.5 = STRING: "The MIB module for managing TCP implementations" iso.3.6.1.2.1.1.9.1.3.6 = STRING: "The MIB module for managing IP and ICMP implementations" iso.3.6.1.2.1.1.9.1.3.7 = STRING: "The MIB module for managing UDP implementations" iso.3.6.1.2.1.1.9.1.3.8 = STRING: "View-based Access Control Model for SNMP." iso.3.6.1.2.1.1.9.1.4.1 = Timeticks: (5) 0:00:00.05 iso.3.6.1.2.1.1.9.1.4.2 = Timeticks: (5) 0:00:00.05 iso.3.6.1.2.1.1.9.1.4.3 = Timeticks: (5) 0:00:00.05 iso.3.6.1.2.1.1.9.1.4.4 = Timeticks: (7) 0:00:00.07 iso.3.6.1.2.1.1.9.1.4.5 = Timeticks: (7) 0:00:00.07 iso.3.6.1.2.1.1.9.1.4.6 = Timeticks: (8) 0:00:00.08 iso.3.6.1.2.1.1.9.1.4.7 = Timeticks: (9) 0:00:00.09 iso.3.6.1.2.1.1.9.1.4.8 = Timeticks: (10) 0:00:00.10 iso.3.6.1.2.1.2.1.0 = INTEGER: 2 iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1 iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2 iso.3.6.1.2.1.2.2.1.2.1 = STRING: "em0" iso.3.6.1.2.1.2.2.1.2.2 = STRING: "lo0" iso.3.6.1.2.1.2.2.1.3.1 = INTEGER: 6 iso.3.6.1.2.1.2.2.1.3.2 = INTEGER: 24 iso.3.6.1.2.1.2.2.1.4.1 = INTEGER: 1500 iso.3.6.1.2.1.2.2.1.4.2 = INTEGER: 16384 iso.3.6.1.2.1.2.2.1.5.1 = Gauge32: 1000000000 iso.3.6.1.2.1.2.2.1.5.2 = Gauge32: 0 iso.3.6.1.2.1.2.2.1.6.1 = Hex-STRING: 00 00 27 D0 71 7E iso.3.6.1.2.1.2.2.1.6.2 = "" iso.3.6.1.2.1.2.2.1.7.1 = INTEGER: 1 iso.3.6.1.2.1.2.2.1.7.2 = INTEGER: 1 iso.3.6.1.2.1.2.2.1.8.1 = INTEGER: 1 iso.3.6.1.2.1.2.2.1.8.2 = INTEGER: 1 iso.3.6.1.2.1.2.2.1.9.1 = Timeticks: (0) 0:00:00.00 iso.3.6.1.2.1.2.2.1.9.2 = Timeticks: (0) 0:00:00.00 iso.3.6.1.2.1.2.2.1.10.1 = Counter32: 17335697 iso.3.6.1.2.1.2.2.1.10.2 = Counter32: 67940 iso.3.6.1.2.1.2.2.1.11.1 = Counter32: 18045 iso.3.6.1.2.1.2.2.1.11.2 = Counter32: 905 iso.3.6.1.2.1.2.2.1.12.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.12.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.13.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.13.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.14.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.14.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.15.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.15.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.16.1 = Counter32: 1328839 iso.3.6.1.2.1.2.2.1.16.2 = Counter32: 67940 iso.3.6.1.2.1.2.2.1.17.1 = Counter32: 12837 iso.3.6.1.2.1.2.2.1.17.2 = Counter32: 905 iso.3.6.1.2.1.2.2.1.18.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.18.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.19.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.19.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.20.1 = Counter32: 0 iso.3.6.1.2.1.2.2.1.20.2 = Counter32: 0 iso.3.6.1.2.1.2.2.1.21.1 = Gauge32: 0 iso.3.6.1.2.1.2.2.1.21.2 = Gauge32: 0 iso.3.6.1.2.1.2.2.1.22.1 = OID: ccitt.0 iso.3.6.1.2.1.2.2.1.22.2 = OID: ccitt.0 iso.3.6.1.2.1.3.1.1.1.1.1.192.168.0.1 = INTEGER: 1 iso.3.6.1.2.1.3.1.1.1.1.1.192.168.0.101 = INTEGER: 1 iso.3.6.1.2.1.3.1.1.1.1.1.192.168.0.103 = INTEGER: 1 iso.3.6.1.2.1.3.1.1.2.1.1.192.168.0.1 = Hex-STRING: F0 7D 68 52 BB 8E iso.3.6.1.2.1.3.1.1.2.1.1.192.168.0.101 = Hex-STRING: 00 26 82 54 FE 89 iso.3.6.1.2.1.3.1.1.2.1.1.192.168.0.103 = Hex-STRING: 08 00 27 D0 71 7E iso.3.6.1.2.1.3.1.1.3.1.1.192.168.0.1 = IpAddress: 192.168.0.1 iso.3.6.1.2.1.3.1.1.3.1.1.192.168.0.101 = IpAddress: 192.168.0.101 iso.3.6.1.2.1.3.1.1.3.1.1.192.168.0.103 = IpAddress: 192.168.0.103 iso.3.6.1.2.1.4.1.0 = INTEGER: 2 iso.3.6.1.2.1.4.2.0 = INTEGER: 64 iso.3.6.1.2.1.4.3.0 = Counter32: 18972 iso.3.6.1.2.1.4.4.0 = Counter32: 0 iso.3.6.1.2.1.4.5.0 = Counter32: 36 iso.3.6.1.2.1.4.6.0 = Counter32: 0 iso.3.6.1.2.1.4.7.0 = Counter32: 179 iso.3.6.1.2.1.4.8.0 = Counter32: 0 iso.3.6.1.2.1.4.9.0 = Counter32: 18757 iso.3.6.1.2.1.4.10.0 = Counter32: 13866 iso.3.6.1.2.1.4.11.0 = Counter32: 0 iso.3.6.1.2.1.4.13.0 = INTEGER: 60 iso.3.6.1.2.1.4.14.0 = Counter32: 0 iso.3.6.1.2.1.4.15.0 = Counter32: 0 iso.3.6.1.2.1.4.16.0 = Counter32: 0 iso.3.6.1.2.1.4.17.0 = Counter32: 0 iso.3.6.1.2.1.4.18.0 = Counter32: 0 iso.3.6.1.2.1.4.19.0 = Counter32: 0 iso.3.6.1.2.1.4.20.1.1.127.0.0.1 = IpAddress: 127.0.0.1 iso.3.6.1.2.1.4.20.1.1.192.168.0.103 = IpAddress: 192.168.0.103 iso.3.6.1.2.1.4.20.1.2.127.0.0.1 = INTEGER: 2 iso.3.6.1.2.1.4.20.1.2.192.168.0.103 = INTEGER: 1 iso.3.6.1.2.1.4.20.1.3.127.0.0.1 = IpAddress: 255.0.0.0 iso.3.6.1.2.1.4.20.1.3.192.168.0.103 = IpAddress: 255.255.255.0 iso.3.6.1.2.1.4.20.1.4.127.0.0.1 = INTEGER: 1 iso.3.6.1.2.1.4.20.1.4.192.168.0.103 = INTEGER: 1 iso.3.6.1.2.1.4.21.1.1.0.0.0.0 = IpAddress: 0.0.0.0 iso.3.6.1.2.1.4.21.1.1.127.0.0.1 = IpAddress: 127.0.0.1 iso.3.6.1.2.1.4.21.1.1.192.168.0.0 = IpAddress: 192.168.0.0 iso.3.6.1.2.1.4.21.1.1.192.168.0.103 = IpAddress: 192.168.0.103 iso.3.6.1.2.1.4.21.1.2.0.0.0.0 = INTEGER: 1 iso.3.6.1.2.1.4.21.1.2.127.0.0.1 = INTEGER: 2 iso.3.6.1.2.1.4.21.1.2.192.168.0.0 = INTEGER: 1 iso.3.6.1.2.1.4.21.1.2.192.168.0.103 = INTEGER: 2 iso.3.6.1.2.1.4.21.1.3.0.0.0.0 = INTEGER: 1 iso.3.6.1.2.1.4.21.1.3.127.0.0.1 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.3.192.168.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.3.192.168.0.103 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.4.0.0.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.4.127.0.0.1 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.4.192.168.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.4.192.168.0.103 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.5.0.0.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.5.127.0.0.1 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.5.192.168.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.5.192.168.0.103 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.6.0.0.0.0 = INTEGER: 0 iso.3.6.1.2.1.4.21.1.6.127.0.0.1 = INTEGER: 0
Ahora se hará una consulta snmp desde el interprete de comandos de python.
#Se importa el módulo de pysnmp que genera el comando. from pysnmp.entity.rfc3413.oneliner import cmdgen #Se crea la instancia del generador de comandos snmp cg = cmdgen.CommandGenerator() #Se captura los datos del community public. comm_data = cmdgen.CommunityData('my-manager', 'public') #Se conecta al agente snmp desde localhost puerto 161. transport = cmdgen.UdpTransportTarget(('127.0.0.1', 161)) #Se asocia la variable que tiene la información del sistema operativo variables = (1, 3, 6, 1, 2, 1, 1, 1, 0) #Se ejecuta el comando capturando el resultado y los mensajes de error. errIndication, errStatus, errIndex, result = cg.getCmd(comm_data, transport,variables) #Se presenta en pantalla los mensajes de error. print errIndication,errStatus,errIndex #Como no hay mensaje de error se presenta en pantalla el resultado del comando. print result
El resultado es el siguiente:
None 0 0 [(ObjectName('1.3.6.1.2.1.1.1.0'), OctetString('GNU/kFreeBSD bsd 8.1-1-686 #0 Tue Jan 4 17:59:05 UTC 2011 i686'))]
===
¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV
O Escaneando el código QR desde billetera:
