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 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
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:
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
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.
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