SNMP (Simple Network Management Protocol)

Protocolo Simple de Administración de Red o SNMP es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a los administradores supervisar el desempeño de la red, buscar y resolver sus problemas, y planear su crecimiento. Podemos conocer datos internos de dispositivos a monitorear, ej uso de CPU, Memoria, Disco, Uptime etc.

Se basa entre gestor y agentes.

Los agentes se centran en recopilar cierta información y mantenerla organizada para que el gestor pueda acceder a ella cuando lo necesite. El agente también puede mandar notificaciones al gestor sobre problemas o información relevante sin que el gestor se lo solicite.

El gestor controla y actúa sobre los elementos de la red, controlando la información que recopilan los agentes se pueden tomar decisiones y actuar sobre la red para mejorar los aspectos que se necesiten. Para ello se basa en tres elementos:

SMI (Structure of Management Information)

SMI es el conjunto de estructuras y esquemas para definir elementos de las MIB. Dichas estructuras están formateadas en ASN.1 (Abstract Synstax Notation One), indicando cómo debe ser el nombre, la sintaxis y el método de codificación de los datos para su transmisión por la red.

Un objeto en SMI consta de los siguientes campos:

La definición termina indicando bajo qué nodo del árbol de OIDs (ver la siguiente sección) debe situarse y con qué número a efectos de identificación

MIB: (Management Information Base)

La información requerida de un sistema se almacena en las MIBs usando una estructura jerárquica que contiene los identificadores de objeto descritos mediante ASN.1.

Esta jerarquía de árbol contiene los elementos que pueden ser de tipo escalar o tablas de datos. Estos objetos cuelgan en el árbol de la MIB de la rama correspondiente a la organización que mantiene dicha estructura. Se nombra a los ejemplares de la MIB mediante su identificador de objeto que es una cadena de enteros que representa como cuelga el objeto del nodo raíz. Por ejemplo IP es el (1.3.6.1.2.1.4.)

Esta es la estructura de la MIB-II (RFC 1213) y sus diferentes subgrupos. Estas son algunas de las variables que se mantienen en cada grupo:

Funcionamiento del protocolo

Como sigue el paradigma gestor-agente la los comandos son para solicitar, modificar o devolver información de la MIB, así como envíar notificaciones (traps). Las operaciones disponibles en SNMPv1 son:

Posteriormente, a partir de la versión 2 se introdujo la operación de get-bulk-request, que permite realizar varios get-next seguidos sin tener que hacer varias peticiones. También se introdujo la operación de inform, para que distintos gestores puedan intercambiarse notificaciones.

SNMPv1

Ejemplo de configuración SNMPv3 para un sistema típico Linux/UNIX/AIX/Solaris etc

rocommunity public 192.168.1.4
syscontact Sysadmin (root@localhost)
syslocation Server Room

view all included .1
access notConfigGroup "" any noauth exact systemview none none
access notConfigGroup "" any noauth exact all none none

Donde rocommunity es una comunidad de solo lectura, de nombre public y que solo se le permita el acceso desde la ip 192.168.1.4, el nombre de la comunidad define la dificultad de adivinar su acceso, por eso es recomendable que tenga un nombre similar a una contraseña.

SNMPv3

Configuramos un usuario que se llama nagios con autenticacion, en la siguiente linea lo creamos con una clave almacenada en texto plano en este archivo y luego encriptada en MD5 y DES

Ejemplo de configuración SNMPv3 para un sistema típico Linux/UNIX/AIX/Solaris etc

rouser  nagios auth 
createUser nagios MD5 "claveNagios" DES

Debemos reiniciar el servicio SNMP y luego podemos hacer algo como esto

snmpget -v 3 -u nagios -l authNoPriv -a MD5 -A claveNagios 127.0.0.1 sysUpTime.0

TIPS

NOTA: En Debian deberemos editar el archivo /etc/default/snmpd, modificando la siguiente linea

De:

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'

A :

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

Para que el servicio se accesible por red.

A veces por causa de tener montados filesystems remotos NFS o CIFS, cuando tenemos retrasos en la conexion con ellos se puede colgar el servicio SNMP, para prevenir esto deberemos agregar la siguiente opción en el archivo de configuración snmpd.conf.

skipNFSInHostResources yes
Agregar variables a SNMP

Por ejemplo si queremos obtener desde SNMP la información de un script

/usr/local/bin/var.sh

echo "hola"
echo "chau"

En el snmpd.conf le agregamos la siguiente configuración:

exec .1.3.6.1.4.1.2021.555 /bin/sh /usr/local/bin/var.sh

Si corremos esta consulta snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.555 Obtendremos :

UCD-SNMP-MIB::ucdavis.555.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.555.2.1 = STRING: "/bin/sh"
UCD-SNMP-MIB::ucdavis.555.3.1 = STRING: "/tmp/bar.sh"
UCD-SNMP-MIB::ucdavis.555.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.555.101.1 = STRING: "hola"
UCD-SNMP-MIB::ucdavis.555.101.2 = STRING: "chau"
UCD-SNMP-MIB::ucdavis.555.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.555.103.1 = ""

SNMPv1 en Windows

En los equipos Windows se configurara una community RO (read only) denominada public, acceso para la ip que corresponda al servidor que tiene acceso al SNMP, en este caso nuestro nagios.

Para ello nos situamos en el panel de control dentro de agregar programas en la sección de componentes.

Una vez dentro nos situamos dentro de Herramientas de administración y supervisión o Management and Monitoring tools

Dentro de ella nos situamos sobre la opcion SNMP y la tildamos

Luego en la Administración de Servicios, nos dirigiremos a las propiedades del servicio SNMP

Dentro de ella nos encontraremos con un cuadro de dialogo

Configuraremos el accesso a la ip del servidor con acceso SNMP

Y luego la comunidad de aceso a los datos SNMP

Luego de realizados los cambios de configuración procederemos a reiniciar el servicio para que estos surtan efecto.

A veces en Windows es necesario configurar el servicio de Firewall para permitir las consultas por medio SNMP.

Ref.: http://support.microsoft.com/kb/324263/es

SNMP Traps

Una trap es generado por el agente snmp en el dispositivo a monitorear para reportar ciertas condiciones y cambios de estado en un procesp

En debian para instalar el manejador de traps SNMP deberemos ejecutar los siguiente :

apt-get install snmptt

/etc/snmp/snmptt.ini

mode = daemon
log_system_enable = 1
unknown_trap_log_enable = 1

mysql_dbi_enable = 1
mysql_dbi_host = localhost
mysql_dbi_port = 3306
mysql_dbi_database = snmptt
mysql_dbi_table = snmptt
mysql_dbi_table_unknown = snmptt_unknown
mysql_dbi_table_statistics = snmptt_statistics
mysql_dbi_username = snmptt
mysql_dbi_password = mytrap

/etc/snmp/snmptt.conf

EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Critical

/etc/snmp/snmptrapd.conf

disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

Configuración de permisos :

usermod -a -G nagios snmptt 

/etc/default/snmpd

TRAPDRUN=yes

Schema MySQL

CREATE DATABASE snmptt;
USE snmptt;
 
DROP TABLE snmptt;
CREATE TABLE snmptt (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
eventname VARCHAR(50),
eventid VARCHAR(50),
trapoid VARCHAR(100),
enterprise VARCHAR(100),
community VARCHAR(20),
hostname VARCHAR(100),
agentip  VARCHAR(16),
category VARCHAR(20),
severity VARCHAR(20),
uptime  VARCHAR(20),
traptime VARCHAR(30),
formatline VARCHAR(255));
 
USE snmptt;
 
DROP TABLE snmptt_unknown;
CREATE TABLE snmptt_unknown (
trapoid VARCHAR(100),
enterprise VARCHAR(100),
community VARCHAR(20),
hostname VARCHAR(100),
agentip  VARCHAR(16),
uptime  VARCHAR(20),
traptime VARCHAR(30),
formatline VARCHAR(255));
 
USE snmptt;
 
DROP TABLE snmptt_statistics;
CREATE TABLE snmptt_statistics (
stat_time VARCHAR(30),
total_received BIGINT,
total_translated BIGINT,
total_ignored BIGINT,
total_unknown BIGINT);

Reiniciamos los servicios SNMP :

/etc/init.d/snmptt
/etc/init.d/snmpd

Ref.: http://exchange.nagios.org/directory/Addons/SNMP/Nagios-SNMP-Trap-Interface-%28NSTI%29/details