miércoles, 25 de agosto de 2010

Configurar SNMP para monitorizar Windows 7 y K/Ubuntu con Nagios y Centreon

Ya tenemos instalado Nagios y Centreon y monitorizamos Windows 7 con NSClient++ como vemos en los siguientes enlaces.

http://yoadminsis.blogspot.com/2010/08/centreon-219-y-nagios-321-en-ubuntu.html
http://yoadminsis.blogspot.com/2010/08/monitorizar-windows-7-con-nagios.html

Ahora vamos a ver como monitorizar GNU\Linux con SNMP, en concreto, K/Ubuntu y Microsoft Windows 7 Home Premium.

SNMP (Simple Network Management Protocol)

Es un protocolo de gestión de redes sencillo... no muy sencillo pero bueno :-).

Se basa en ficheros MIB que son ficheros de texto que definen un espacio de nombres jerárquico de la forma .1.3.6.1.2... que identifica, mediante un OID (los números separados por puntos), a una variable que recoge los datos del dispositivo de red. También puede tener la forma .iso.org.dod.internet... (como si fuera un nombre dns)

Por ejemplo: la variable .iso.org.(...).system.sysUptime tiene un OID .1.3.6.etc. único y nos dará el tiempo que lleva un sistema levantado.

Normalmente se usa el MIB-II que recoge datos de administración. También hay MIBs que crean fabricantes para sus dispositivos.

Las herramientas usadas en GNU\Linux son SNMP-Net y para Windows hay un servicio que hay que agregar.

  • Agente: Al contrario de lo que parece, este es el servidor (snmpd o el servicio de windows). Proporciona los datos del dispositivo al cliente.
  • Manager: Es el cliente y el que recibe traps o respuestas a peticiones del servidor. El que gestiona lo que se le envía desde el dispositivo. NMS (Network Manager System) Por ejemplo, Nagios.
  • Traps: Trampas son operaciones asíncronas que envía el servidor (agente), sin petición, al manager para informar de algo. El manager recibe el trap y lo gestiona. En Ms Windows está traducido como capturas.

La mayoría de veces se configura SNMP con las versiones 1 o 2c que usan lo que se denomina "community chain" o cadena de comunidad. Esta cadena, por defecto, es public para lectura y private para lectura y escritura. Bien, no os comáis la olla, una community chain es una CONTRASEÑA. Podéis cambiar public y private por la contraseña que queráis (más difícil a poder ser :-D) o crear otras communities. También está la versión 3 que da más seguridad y usa usuario y contraseña, cifrado, etc.

Los puertos usados son 161 y 162 (snmp y snmp-trap)

Configurar GNU\Linux

Si seguimos el tutorial de instalación de nagios, ya tenemos instalado SNMP-Net. Para configurar el servidor Nagios y que sea monitorizado con SNMP debemos seguir este procedimiento. Este procedimiento se sigue para instalarlo en otro GNU\Linux que queramos monitorizar, como Kubuntu.

Los paquetes a instalar son

sudo aptitude install snmp snmpd

Esto nos instala el agente snmpd que recoge datos del equipo GNU\Linux y los envía al gestor cuando este lo pida o envía traps asíncronas y notificaciones. También instala las aplicaciones como snmpwalk, etc. que sirven para usar snmp o testearlo.

Lo primero es configurar /etc/default/snmpd,

$ sudo vim /etc/default/snmpd

# This file controls the activity of snmpd and snmptrapd

# MIB directories.  /usr/share/snmp/mibs is the default, but
# including it here avoids some strange problems.
# Directorio donde están los mibs
export MIBDIRS=/usr/share/snmp/mibs

# snmpd control (yes means start daemon).
# Yes. para que se inicie snmpd
SNMPDRUN=yes

# snmpd options (use syslog, close stdin/out/err).
# Opciones del servidor, debeis añadir la interfaz donde queréis que snmp este activo.
# Si dejáis solo 127.0.0.1 no enviaréis recibiréis nada mas que en localhost, no por la red.
# Pongo aquí la ip 192.168.1.10, puesto que el host Centreon-Server lo tengo añadido a 
# Centreon con esta IP. Si en Centreon (Nagios) añadis hosts GNU\Linux con sus IPs y queréis
# monitorizarlos con snmp debéis poner la IP aquí (en cada host, en este archivo)

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

# snmptrapd control (yes means start daemon).  As of net-snmp version
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
# can be run.  See snmpd.conf(5) for how to do this.
# Para el control de traps.
TRAPDRUN=yes

# snmptrapd options (use syslog).
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'

# create symlink on Debian legacy location to official RFC path
SNMPDCOMPAT=yes

Por otro lado configuramos el archivo /etc/snmp/snmpd.conf que es donde está el grueso de la configuración.

####
# First, map the community name (COMMUNITY) into a security name

# Aquí ponemos la configuración del nombre de seguridad que vamos a usar
# (una especie de usuario) y la contraseña que tiene (community)
# com2sec vale para cualquier dirección ip IPv4 de origen "default" que es de cualquier
# origen. Para IPv6 podemos poner com2sec6. Son ACLs o listas de control de acceso.

#       sec.name  source          community
#com2sec paranoid  default         public

# El nombre de seguridad readonly con contraseña "mipasswordpublica"
# se usará para datos de lectura que enviará el agente (snmpd) al gestor.
# Se permite coger datos desde cualquier origen (default)
com2sec readonly  default         mipasswordpublica

# El nombre de seguridad readwrite con contraseña "mipasswordprivada"
# se usará para datos de lectura que enviará el agente (snmpd) al gestor
# y escritura para modificar las variables snmp del dispositivo gestionado
# (gnu\linux en este caso) desde cualquier origen (default)
com2sec readwrite default         mipasswordprivada

# Eoy a crear una ACL.
# El nombre de seguridad redlocal permite, desde la red 192.168.1.0/24 y con
# la contraseña mipasswordredlocal, recoger datos de este dispositivo.
com2sec redlocal 192.168.1.0/24   mipasswordredlocal

# También para localhost.
com2sec lhostacc  127.0.0.1/32    mipasswordlocal


####
# Second, map the security names into group names:

# Los nombres de seguridad (usuarios, nombres de ACL, o como queramos
# llamarlos) se asignan a un grupo.

# readonly lo hemos asignado a MyROGroup para las versiones
# del protocolo snmp 1 y v2c y usm
# Lo mismo hacemos con el nombre de seguridad readwrite
# Obviamente, podemos cambiar los nombres por los nuestros propios
# pero yo los he dejado por defecto.
# Añado también redlocal al grupo de solo lectura.
# Añado lhostacc al grupo de lectura escritura

#               sec.model  sec.name
group MyROSystem v1        paranoid
group MyROSystem v2c       paranoid
group MyROSystem usm       paranoid
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
group MyRWGroup v1         readwrite
group MyRWGroup v2c        readwrite
group MyRWGroup usm        readwrite

group MyROGroup v1         redlocal
group MyROGroup v2c        redlocal
group MyROGroup usm        redlocal

group MyRWGroup v1         lhostacc
group MyRWGroup v2c        lhostacc
group MyRWGroup usm        lhostacc


####
# Third, create a view for us to let the groups have rights to:

# Aquí se crean vistas para después permitir verlas o no a los
# grupos. Las vistas son partes de los arboles MIBS. Por ejemplo
# La vista all es todo el árbol a partir de .1 (.iso)
# La vista system solo recorre la parte del árbol a partir de .system.*

#           incl/excl subtree                          mask
view all    included  .1                               80
view system included  .1.3.6.1.2.1.1
#view system included  .iso.org.dod.internet.mgmt.mib-2.system

####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:

# Por último, le damos permisos a los grupos que creamos.
# MyROSystem tiene acceso con cualquier sec.model (version protocolo)y
# puede leer la vista system (solo el árbol system) pero no escribir ni notificar.
# A este grupo pertenece el "usuario/ACL" paranoid que estaba comentado así que no se aplica.

# MyROGroup puede leer la vista all, es decir, obtener todos los datos pero no
# puede escribir ni notificar.

# MyRWGroup puede leer, escribir y notificar en todo el arbol con la vista all
# y con cualquier versión del protocolo (sec.model)


#                context sec.model sec.level match  read   write  notif
access MyROSystem ""     any       noauth    exact  system none   none
access MyROGroup ""      any       noauth    exact  all    none   none
access MyRWGroup ""      any       noauth    exact  all    all    all

# -----------------------------------------------------------------------------

###############################################################################
# System contact information
#
# Información del sistema

syslocation Sistema Centreon/Nagios con nombre de host ubults6401.midominio.com
syscontact Francisco J. Bejarano 

# También vamos a monitorizar los procesos mysql y postfix como ejemplo.
# El nombre de los procesos debemos ponerlo exacto a como saldria
# con ps -e (no es igual mysql que mysqld
# Esto nos dice si los procesos están corriendo en la máquina.
# Podemos monitorizar los que queramos incluso el numero que tiene que haber
# corriendo como mínimo o como máximo.

# Mysql
proc mysqld

# Postfix
proc master
proc qmgr
proc pickup

...

###############################################################################
# Subagent control
#

# The agent can support subagents using a number of extension mechanisms.
# From the 4.2.1 release, AgentX support is being compiled in by default.
# To use this mechanism, simply uncomment the following directive.
#
master  agentx

Ahora podemos probar si recibimos datos con snmpwalk y testear si funciona la configuración

$ snmpwalk -v 1 -c mipasswordredlocal 192.168.1.10 prName
UCD-SNMP-MIB::prNames.1 = STRING: mysqld
UCD-SNMP-MIB::prNames.2 = STRING: master
UCD-SNMP-MIB::prNames.3 = STRING: qmgr
UCD-SNMP-MIB::prNames.4 = STRING: pickup

Vemos como los procesos que hemos configurado se muestran. Hemos dicho a snmpwalk que use la version 1 del protocolo, la community "mipasswordredlocal" que recoja datos de 192.168.1.10 y que recoja los nombres de procesos. También podemos decirle que recoja los datos del sistema

$ snmpwalk -v 2c -c mipasswordredlocal 192.168.1.10 system
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubults6401 2.6.32-24-server #41-Ubuntu SMP Thu Aug 19 02:47:08 UTC 2010 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (130841) 0:21:48.41
SNMPv2-MIB::sysContact.0 = STRING: Francisco J. Bejarano 
SNMPv2-MIB::sysName.0 = STRING: ubults6400
SNMPv2-MIB::sysLocation.0 = STRING: Sistema Centreon/Nagios con nombre de host ubults6401
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01

...

Si no le decimos nada, ni tabla de proceos o system o system,sysUptime... nos saldrá toooodos los datos que recoge del host. Algún dato más :-)

$ snmpwalk -v 2c -c mipasswordlocal localhost sysUptime
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (138707) 0:23:07.07

$ snmpwalk -v 1 -c mipasswordlocal localhost interfaces
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth2
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)

Configurar Windows 7 Home Premium

Para configurar SNMP en Windows 7 (vale para XP) debemos añadir una característica o servicio que no trae activa por defecto.

Vamos Inicio --> Panel de Control --> Programas --> Programas y Características --> Activar o desactivar las características de Windows y en la ventana que sale marcamos Protocolo simple de administración de redes (SNMP)

Esto nos instala el servicio (agente) de SNMP en Ms Windows 7 Home Premium (me sorprende que lo lleve sin pagar más jeje ;-P)

Vamos a Equipo-->Click botón Derecho --> Administrar --> Servicios y Aplicaciones --> Servicios --> Servicio SNMP

Hacemos que se inicie automáticamente


Configuramos el agente con la información de lo que queremos monitorizar, la localización y el contacto.


Por último, configuramos la Seguridad para proporcionar la Community (contraseña). Como está en la red 192.168.1.0/24 usaremos la misma community que creamos para GNU\Linux en la redlocal. Le decimos que acepte paquetes de cualquier host auque podemos restringir los hosts en Aceptar paquetes SNMP de estos hosts (poner el de centreon/nagios, por ejemplo 192.168.1.10, yo dejo, para probar, que acepte paquetes de cualquiera aunque convendria poner solo el host de monitorización).


Por último,  le decimos en Capturas, que envie los traps (capturas) a nagios/centreon 192.168.1.10. El daemon del servidor nagios snmptrapd recogerá estas capturas.


Aplicamos y Aceptamos y reiniciamos el servicio.

Como apunte, en el caso de que Ms Windows fuera el que tuviera instalado nagios, deberiamos habilitar el servicio Captura SNMP, configurarlo y abrir los puertos del firewall. Los puertos de servicio SNMP ya están habilitados en el firewall.

Desde GNU\Linux podemos probar con snmpwalk si vemos a Windows

$ snmpwalk -v 2c -c mipasswordredlocal 192.168.1.37 system
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: Intel64 Family 6 Model 37 Stepping 2 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7600 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (27311) 0:04:33.11
SNMPv2-MIB::sysContact.0 = STRING: fjbejarano@gmail.com
SNMPv2-MIB::sysName.0 = STRING: casaw7
SNMPv2-MIB::sysLocation.0 = STRING: Escritorio Windows con nombre de host casaw7
SNMPv2-MIB::sysServices.0 = INTEGER: 79

Y aquí está :-)

Configuración de Nagios con Centreon de un servicio SNMP

Por último, vamos a ver como configurar un servicio SNMP de Windows y de GNU\Linux en Centreon y poder monitorizarlo.

Lo primero es configurar la community chain o contraseña. Por defecto es public en centreon/nagios y debemos cambiarla. La community chain es un recurso que se encuentra en resources.cfg y que se asigna a $USER2$. Este recurso se usa en los comandos de check snmp. Así que lo cambiamos de public a mipasswordredlocal. Y guardamos


Ahora vamos a añadir un servicio para los hosts Windows y, por tanto, lo añadiremos al grupo de hosts Windows-Servers y monitorizará el espacio de disco C:. Tenemos la siguiente pantalla.


Como vemos hemos usado el comando check_centreon_remote_storage que tiene una serie de parametros !C:!80!90!$USER2$!1. Estos parametros se corresponden con el orden en los argumentos $ARG1$, etc. El $ARG4$ es la community y vemos que en vez de poner la contraseña a pelo, lo sustituye por $USER2$ que es el recurso que configuramos antes. También podríamos ponerla a pelo o crear otro recurso en resources.cfg $USER3$, por ejemplo, y poner otra community chain. Los argumentos se separan con ! y vemos que ponemos el nombre de disco C: (por defecto viene sin los : así que ponedlo), 80 es el warning al 80% de uso del espacio del disco, el 90 es el critical a 90% de uso del disco, la community chain como hemos dicho y 1 que es la version del protocolo a usar. No olvidamos ir a Relations y añadir el servicio al grupo de hosts Windows-Servers. Como casaw7 pertenece a este grupo le saldrá de forma automática. Guardamos con Save.

Para un servicio de GNU\Linux, lo mismo. Pero vamos a monitorizar la carga media de CPU, eso que sale con el comando uptime en la shell, pero a través de SNMP y nagios/centreon. Vemos la siguiente pantalla.


Los parametros aquí cambian como veis, en este caso la community es el segundo argumento y está puesta a pelo, pero nosotros lo cambiamos y le ponemos $USER2$. Recordad que podeis crear los servicios como querais :-). No olvidaros poner el servicio en el host-group de Linux-Servers en Relations. Guardais y listo.

¿Que falta? Efectivamente, exportar los ficheros a Nagios para que nagios coja los cambios y empiece a monitorizar y luego salgan en centreon. Esto ya lo hemos visto en las entregas anteriores (ver los links del principio del artículo). Una vez hecho, esperamos un ratito para que de tiempo a recopilar datos y listo, en la siguiente pantalla vemos el resultado.



NOTA: Nombres de Community Chain y Ms Windows
Los nombres de contraseña o de comunidad no pueden usar la ñ. Al principio use micontraseñaredlocal, etc. con los nombres de comunidad pero fue imposible obtener datos de Ms Windows con snmpwalk. Tuve que cambiar a otra password sin la ñ. En GNU\Linux si se obtenían datos con un nombre con ñ.

11 comentarios:

  1. Hola me llamo Mauricio y me parece muy bacana esta práctica con SNMP y más porque yo estoy haciendo mi trabajo de grado con este protocolo, y tengo algunas dudas y me gustaría saber si usted me podría ayudar con esto.

    (angel3m84@hotmail.com)

    Gracias.

    ResponderEliminar
  2. Hola

    Me alegro de que te haya gustado el artículo. En cuanto a la ayuda, pues depende, no me considero un experto en SNMP y es posible que tu sepas más que yo :-D.

    Saludos

    ResponderEliminar
  3. mmm listo Francisco

    El Trabajo de Grado es (Investigación sobre el protocolo SNMP y desarrollo de un prototipo funcional de un visualizador del estado de objetos administrables)

    Y estoy en la parte de probar los OID de los dispositivos en los cuales voy a trabajar, para saber si sirven. (Routers Cisco 1700 serie).


    1)Tengo instalado el servicio SNMP en (Windows 7 y en server 2003 “o depronto en Linux”) y no sé qué programa puedo utilizar en el cual pueda introducir estos OID y mirar a ver si me funciona en los dispositivos que tengo.


    Gracias me seria de mucha ayuda ya que no he podido pasar de este punto por qué no se cómo ensayar los OID que tengo.

    ResponderEliminar
  4. A ver si entiendo, ¿lo que quieres es meter los OID de Cisco 1700 Series, es decir, extender el MIB con los de cisco y ver si puedes recopilar datos de ellos?

    Con programas como snmpwalk puedes probar si funciona un dispositivo. Para ello debes activar el agente snmp en el dispositivo cisco en este caso, supongo que por el IOS, y añadirlo a la comunidad. Una vez hecho esto puedes probar si funciona con snmpwalk de la forma

    snmpwalk -v 1 -c communitychainquehayaspuesto direccionipdelcisco

    y debería darte todas las variables disponibles del cisco. Pero vamos, en cada dispositivo has de habilitar el agente snmp que tenga.

    ResponderEliminar
  5. Hola Francisco, tengo un problema similar a la de Azrael. Estoy trabajando con unos equipos receptores de video, poseo los MIBs del fabricante. Cuando en el command prompter ejecuto el comando c:\usr\bin>snmpwalk -v 1 -c public "IP DEL RECEPTOR" system me lista los OID genéricos o estandar. No se de q forma o como puedo hacer para añadir los MIBS PROPIOS DEL FABRICANTE, para cuando ejecute el comando anterior me aparescan todos los mibs que deseo del receptor.

    Muy agradecido si pudieras ayudarme o aclararme el panorama.

    ResponderEliminar
  6. Hola

    En esencia es bajar el fichero mib del fabricante para el firmware correcto del hardware, copiarlo a /var/lib/mibs y reiniciar snmp.

    El fichero mib debemos copiarlo pero debemos llamarlo como pone delante de DEFINITIONS. Por ejemplo, el archivo IF-MIB tiene esta linea IF-MIB DEFINITIONS ::= BEGIN. Pues cuando copiemos el fichero lo llamamos así, IF-MIB.

    Además hay que configurar snmp en el propio receptor de TV en tu caso (o switch, o router o lo que sea) para que pertenezca a la community que tengas y envíe datos snmp.

    Saludos y di que tal te ha ido.

    ResponderEliminar
  7. Una cosa, el directorio /var/lib/mibs/ es un almacen de mibs, también tienes mibs en /usr/share/mibs que si te fijas contienen links soft a /var/lib/mibs.

    Yo pondría los mibs en /var/lib/mibs que es lo suyo. Imagina que tienes un fichero mib llamado mismibs. Haría un link soft (-s) en /usr/share/mibs/mismibs que apuntara a /var/lib/mibs/mismibs.

    Para tenerlo todo en orden.

    ResponderEliminar
  8. Saludos excelente manual y muy bien documentado pero ya todo instalado y aparentemente bien tengo que empezar a agregar dispositivos mayormente impresora sigo los pasos que he visto en tu pagina en varias web y no consigo que centreon me monitoree el dispositivo en configuracion --> host los veo en nagios puedo ver los equipos y veo si estan arriba o abajo pero en la parte de monitoreo de centreon no me aparece ningún equipo estoy seguro que debo estar agergandolos de forma incorrecta pero no he podido dar con la solución agradesco la ayuda que me puedas prestar

    ResponderEliminar
  9. Hola, tengo una pregunta.
    Esto del SNMP serviria para detectar que un PC con W7 conectado a un SAI se ha quedado sin corriente (o sea dependiendo solo del SAI) y enviar la señal a otros equipos de la LAN. O sea hacer creer a los host de la LAN que el PC en cuestion es un SAI.?
    Seria facil de implementar? ¿como? :-)
    Gracias.

    ResponderEliminar
  10. Muy buen tutorial!! estoy haciendo mi proyecto de final de curso y lo sigo bastante, pero tengo un fallo y no se donde... cuando acabo de configurar el archivo /etc/default/snmpd para agregar la dirección de mi servidor y la dirección local, si no reinicio el servicio funciona todo perfectamente pero en el momento en el que lo reinicio snmpd no funciona... no corre el servicio por más que lo arranco y rearranco nada... puede ser por algo de la configuración??

    ResponderEliminar
  11. Hola tengo un problema cuando utilizo el comando:
    snmpwalk -v 1 127.0.0.1 -c s3rv1d0r3s system

    y me sale esto:

    Timeout: No Response from 192.168.128.75
    [root@tmp-box-new ~]# snmpwalk -v 1 127.0.0.1 -c s3rv1d0r3s system
    SNMPv2-MIB::sysDescr.0 = STRING: Linux tmp-box-new.sixbell.com 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64
    SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
    DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (662747) 1:50:27.47
    SNMPv2-MIB::sysContact.0 = STRING: Root (configure /etc/snmp/snmp.local.conf)

    hasta aqui todo esta bien, pero intento monitorear este servidor desde SOLARWINDS y no me hace la conexion.

    que falta por configurar?

    ResponderEliminar

Related Posts with Thumbnails