Monitorización de red y SNMP

Nagios

Nagios es un software que se usa para la monitorización de red y servidores. Permite llevar a cabo las siguiente tareas:

  • Monitorizar la infraestructura completa de sistemas
  • Identificar problemas antes de que ocurran
  • Conocer los incidentes inmediatamente
  • Detectar problemas de seguridad
  • Reducir los tiempos de caida de los servicios

Para conocer Nagios, vamos a trabajar con el siguiente escenario.

Servidor Nagios:

  • 192.168.0.2
  • El servidor Nagios está instalado aquí. Nagios sondea a los clientes instalados en los servidores monitorizados.

Cliente Nagios (servidor monitorizado) Ubuntu Server 14.04

  • 192.168.0.3
  • Contiene instalado un cliente Nagios, que recibe consultas del servidor y devuelve las respuestas.

Cliente Nagios (servidor monitorizado) Windows Server 2008

  • 192.168.0.4
  • Contiene instalado un cliente Nagios, que recibe consultas del servidor y devuelve las respuestas.

Terminal de monitorización

  • 192.168.0.10
  • El servidor Nagios es accesible desde un navegador web

Antes de empezar

Es preciso tener instalado en el servidor Nagios un servidor LAMP. Esto incluye Apache, MySQL y PHP.

Instalar Apache en el servidor Nagios

sudo apt-get install apache2

Una vez instalado, hay que comprobar que está correctamente instalado, abriéndolo desde la terminal de administración.

Instalar MySQL en el servidor Nagios

sudo apt-get install mysql-server mysql-client

Durante la instalación se preguntará la contraseña de administrador de MySQL. Por simplicidad utilizamos la misma contraseña del usuario del servidor.

Para comprobar que se ha instalado correctamente, ejecutamos el siguiente comando:

sudo service mysql status

Instalar PHP en el servidor Nagios

sudo apt-get install php5 php5-mysql libapache2-mod-php5

Para comprobar que todo está en orden con PHP, vamos a crear un archivo llamado "testphp.php" con el siguiente contenido:

<?php phpinfo(); ?>

Después colocaremos el archivo en el directorio raíz de Apache2:

sudo mv testphp.php /var/www/html/testphp.php chmod 644 /var/www/html/testphp.php

Finalmente reiniciamos el servidor Apache:

sudo service apache2 restart

Para comprobar que PHP se ha instalado correctamente, abrimos en la terminal de administración. Abrimos en el navegador la página http://192.168.0.2/testphp.php. El resultado debe ser algo como lo siguiente:

Instalaciones en el servidor

Es preciso llevar a cabo algunas acciones iniciales en el servidor Nagios, tras instalar LAMP, como instalar prerequisitos, crear usuario y grupo para Nagios.

Instalación de prerequisitos

sudo apt-get install build-essential libgd2-xpm-dev apache2-utils

Crear usuario y grupo para Nagios

sudo useradd -m nagios sudo passwd nagios sudo groupadd nagcmd sudo usermod -a -G nagcmd nagios sudo usermod -a -G nagcmd www-data

Instalar Nagios

Nagios tiene una arquitectura de capas:

  • Capa de Lógica de Monitorización, que incluye la definición de objetivos monitorizados, la temporización, la representación, etc. Viene implementada por el paquete nagios
  • Capa de Abstracción de Monitorización, que incluye plugins que llevan a cabo el trabajo de consulta a los objetivos monitorizados, según nagios les va indicando. Los plugins están implementados en el paqute nagios-plugins

Descarga de los paquetes necesarios

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.1.1.tar.gz wget http://nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz

Instalación de Nagios

tar xzf nagios-4.1.1.tar.gz cd nagios-4.1.1 sudo ./configure --with-command-group=nagcmd sudo make all sudo make install sudo make install-init sudo make install-config sudo make install-commandmode

Instalación de la interfaz web de Nagios

sudo make install-webconf

Es posible que obtengamos el siguiente error:

/usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf /usr/bin/install: cannot create regular file '/etc/httpd/conf.d/nagios.conf': No such file or directory Makefile:296: recipe for target 'install-webconf' failed make: *** [install-webconf] Error 1

La razón de este error es que Nagios está intentando crear el archivo nagios.conf en /etc/httpd/conf.d/. Pero en Ubuntu, el lugar para los archivos de "virtual host" deben ir a /etc/apache2/sites-enabled/. Así que lo que tenemos que hacer para solventar el problema es copiar manualmente el archivo nagios.conf a su lugar, ejecutando el siguiente comando:

sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-enabled/nagios.conf

Finalmente debemos asegurarnos de que el archivo nagios.conf está en /etc/apache2/sites-enabled/

A continuación debemos crear un usuario para Apache, para acceder a la interfaz web de Nagios. Es importante recordar la contraseña que pongamos. REPITO: ES IMPORTANTE RECORDAR LA CONTRASEÑA QUE PONGAMOS:

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Finalmente reiniciamos Apache:

sudo service apache2 restart

Instalación de los plugins de Nagios

tar xzf nagios-plugins-2.1.1.tar.gz cd nagios-plugins-2.1.1 sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios sudo make sudo make install

Configuración de Nagios

Los archivos de configuración de Nagios están en /usr/local/nagios/etc. Ya traen parte de la configuración preestablecida, pero debemos hacer algunos cambios.

Restringiendo el acceso al servidor nagios

Si queremos que solamente desde algunas IPs se pueda acceder al servidor Nagios, debemos editar el archivo /etc/apache2/sites-enabled/nagios.conf.

  • Comentar las siguientes líneas:
  • # Order allow,deny # Allow from all
  • Descomentar las siguientes líneas:
  • Order deny,allow Deny from all Allow from 127.0.0.1 192.168.1.0/24

La ip o rango de red especificado debe ser el que queramos autorizar.

Debemos activar los módulos de apache "rewrite" (reescribir urls) y "cgi" (ejecutar scripts de diferentes lenguajes) hacemos lo siguiente:

sudo a2enmod rewrite sudo a2enmod cgi

Reiniciamos Apache

sudo service apache2 restart

Comprobar que no hay errores en el archivo de configuración de Nagios

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Si no hay errores, arrancamos el servicio Nagios y lo definimos como un servicio iniciado durante cada reinicio del sistema.

Iniciar el servicio Nagios

sudo service nagios start sudo ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Acceder a la interfaz web de Nagios

Abrimos la interfaz web de Nagios, abriendo en un navegador (desde la terminal de administración) la url http://192.168.0.2/nagios

Preparar los sistemas monitorizados

Los servidores monitorizados deben tener el software de Nagios instalado. Los sitemas linux requieren Nagios NRPE y Nagios plugins. Por otra parte, Windows requiere NSClient++

Servidor Ubuntu Server 14.04

Vamos a instalar NRPE y Nagios plugins:

sudo apt-get install nagios-nrpe-server nagios-plugins

A continuación vamos a indicar a NRPE cuál es la dirección IP del servidor Nagios. Para ello, editamos el archivo /etc/nagios/nrpe.cfg, y modificamos la línea que incluye el parámetro allowed_hosts:

[...] allowed_hosts=127.0.0.1,192.168.0.2 [...]

Después iniciamos el servicio nrpe:

sudo /etc/init.d/nagios-nrpe-server restart

Ahora ya estamos preparados para empezar a monitorizar el servidor Ubuntu Server.

Servidor Windows Server 2008 R2

Vamos a instalar el paquete NSClient++. Durante la instalación se nos preguntará por las IPs autorizadas (servidor Nagios), así como una contraseña. Estas configuraciones se guardarán en el archivo C:\Archivos de Programa\NSClient++\nsclient.ini:

A continuación seguiremos añadiendo configuración al servidor Nagios para poder monitorizar tanto el servidor Windows como Linux.

Empezar a monitorizar un servidor

Empecemos con el servidor Ubuntu Server 14.04. Para ello nos vamos al servidor Nagios y editamos el archivo /usr/local/nagios/etc/nagios.cfg y haremos un cambio: buscar y descomentar la siguiente línea:

cfg_dir=/usr/local/nagios/etc/servers

Crea un directorio llamado servers en la ruta /usr/local/nagios/etc/:

sudo mkdir /usr/local/nagios/etc/servers

Después, crearemos el archivo /usr/local/nagios/etc/servers/clients.cfg. Allí añadiremos información sobre el servidor Ubuntu Server 14.04:

define host{ use linux-server host_name client alias client address 192.168.0.3 max_check_attempts 5 check_period 24x7 notification_interval 30 notification_period 24x7 }

¿De dónde salen estos parámetros?

Podemos consultarlo en https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/objectdefinitions.html#host.

Algunos de los valores que se pueden ver, como "linux_server" o "24x7" están definidos como plantillas o variables archivos del directorio /usr/local/nagios/etc/objects/.

¡OJO! Para que el archivo de configuración clients.cfg sea leido por Nagios, debemos añadir al arhivo /usr/local/nagios/etc/nagios.cfg la siguiente línea:

cfg_dir=/usr/local/nagios/etc/servers

Para que la nueva configuración se aplique reiniciamos el servidor Nagios

sudo service nagios restart

Desde la interfaz web de Nagios podemos comprobar que ya a parece el nuevo servidor:

Agregar servicios

Para agregar un nuevo servicio a monitorizar, agregamos al final del archivo anteriormente creado (clients.cfg) la definición de un nuevo servicio:

define service { use generic-service host_name client service_description SSH check_command check_ssh notifications_enabled 0 }

Volvemos a reinicar el servicio nagios y comprobamos la interfaz web.

Plugins disponibles

Existen multitud de plugins, los cuales se describen en la página https://www.monitoring-plugins.org/doc/man/index.html. Estos plugins deben ser descritos en el archivo /usr/local/nagios/etc/objects/commands.cfg para poder ser usados como comandos desde los servicios definidos de Nagios.

A continuación se muestran algunas definiciones de servicios y de comandos:

Definiciones de servicios para una máquina monitorizada:

define service { use generic-service host_name client service_description ROOT_STATUS check_command check_local_disk!15%!5%!/dev/sda1 } define service { use generic-service host_name client service_description CARGA check_command check_local_load!0.6,0.5,0.4!0.9,0.8,0.7 }

A continuación se muestra un comando descrito en el archivo /usr/local/nagios/etc/objects/commands.cfg:

# 'check_http' command definition define command{ command_name check_http command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$ }

Si accedemos a la descripción del plugin en https://www.monitoring-plugins.org/doc/man/index.html podremos ver que se pueden añadir más opciones.

Actividad 1. Modifica el servidor Ubuntu 14.04 monitoreado, para que Apache escuche en el puerto 8080. Después, modifica en el servidor Nagios el comando check_http para que sondee el puerto 8080 del servidor monitoreado. Después comprueba que se está monitoreando correctamente.

Toma una captura llamada Act1-nagios.png de la consola web de Nagios, donde se pueda ver el resultado positivo de los sondeos.

Monitorizar un servidor Linux usando NRPE

NRPE son las siglas de Nagios Remote Plugin Executor. NRPE permite ejeuctar plugins de naturaleza local en un servidor remoto. Por ejemplo, si nos fijamos en el plugin check_load, podremos comprobar que en ningún parámetro podemos indicar la dirección IP del servidor. Esto es porque check_load está pensado para ejecutarse en el mismo servidor monitoreado.

Usando el servicio NRPE (instalado en el servidor monitoreado) el servidor Nagios le pide que ejecute un cierto plugin y que le devuelva el resultado.Para que Nagios pueda hacer tal cosa, necesitamos un plugin llamado check_nrpe, que no viene instalado inicialmente en Ubuntu ni en Debian.

Los pasos a seguir para configurar NRPE son los siguientes:

En el servidor monitoreado

Anteriormente, instalamos nagios_nrpe_server en el servidor. Nos tenemos que asegurar de dos cosas en el archivo /etc/nagios/nrpe.cfg:

1. El servidor nagios está entre los admitidos para ejecutar plugins de Nagios:

allowed_hosts=127.0.0.1,192.168.1.100

2. Existe una definición para los comandos que ejecutaremos remotamente:

command[check_load]=/usr/lib/nagios/plugins/check_load -w 1,2,1 -c 3,5,3

Por ejemplo, este comando indica que cuando desde nagios se solicite la ejecución del comando check_load, lo que se hará será ejecutar el plugin check_load con los parámetros indicados.

Debemos ejecutar cada comando que queramos ejecutar en el servidor.

Después de esto, reiniciamos el servidor nagios_nrpe_server:

# /etc/init.d/nagios_nrpe_server restart

En el servidor Nagios

Instalar el plugin de nrpe en el servidor Nagios

# apt-get install nagios-nrpe-plugin

Después, comprobamos que se ha definido el comando nagios correctamente. Deberíamos poder encontrar un archivo llamado /etc/nagios-plugins/config/check_nrpe.cfg con el siguiente contenido:

## the default command is overwritten ## define command{ command_name check_nrpe command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }

A continuación, añadimos la definición del comando check_nrpe en el archivo donde Nagios guarda las definiciones de comandos conocidos. No tenemos más que compiar la definición anterior en el archivo /usr/local/nagios/etc/objects/commands.cfg.

Después añadimos un servicio check_nrpe a la definición del servidor monitoreado. Por ejemplo:

define service { host_name Ubuntu14.04LTS service_description Comprobar carga check_command check_nrpe!check_load check_interval 1 use generic-service }

Después de esto comprobamos que todo está bien en la configuración de Nagios:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Y finalmente reiniciamos nagios

# service nagios restart

Actividad 2. El plugin check_disk permite conocer el nivel de ocupación de la partición /dev/sda1. Ejecuta dicho plugin en el servidor monitoreado, para poder comprobar su nivel de uso de disco, estableciendo como límite de advertencia en un 15% de espacio libre, y el límite crítico en un 5%.

Toma las siguientes capturas:

  • La configuración del comando en el servidor monitoreado.
  • La configuración del servicio en el archivo de configuración del host en el servidor Nagios
  • La página de Nagios mostrando la información relativa al servicio.

Entrega la actividad con el nombre Act2-monitorización.zip

Monitorizar un servidor Windows

Ahora iremos a configurar Nagios para que monitorice el servidor Windows. Nagios trae un archivo preconfigurado para trabajar con NSClient++. Dicho archivo está en /usr/local/nagios/etc/objects/windows.cfg. Abriendo dicho archivo, podremos ver en primer lugar la definición del servidor Windows:

define host{ use windows-server ; Inherit default values from a template host_name winserver ; The name we're giving to this host alias My Windows Server ; A longer name associated with the host address 192.168.0.4 ; IP address of the host }

En dicho archivo debemos modificar el parámetro address, indicando la ip correcta del servidor Windows con NSClient++ instalado. En este mismo archivo, se incluyen algunos servicios preconfigurados. Por ejemplo, podemos encontrar cosas como:

define service{ use generic-service host_name winserver service_description CPU Load check_command check_nt!CPULOAD!-l 5,80,90 }

Para que el servidor Nagios pueda conectar con el servidor Windows, es preciso que hagamos un cambio en el archivo /usr/local/nagios/etc/objects/commands.cfg, y añadir la contraseña que indicamos al instalar NSClient++. Debemos buscar el bloque dedicado al comando check_nt:

define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -s PASSWORD -p 12489 -v $ARG1$ $ARG2$ }

Y hacemos los siguientes cambios...

define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -s 'Gato200' -p 12489 -v $ARG1$ $ARG2$ }

¡OJO! Para que el archivo de configuración windows.cfg sea leido por Nagios, debemos añadir al arhivo /usr/local/nagios/etc/nagios.cfg la siguiente línea:

cfg_file=/usr/local/nagios/etc/objects/windows.cfg

Hecho esto, podemos reinicar el servidor Nagios.

service nagios restart

Actividad 3. Modifica el sondeo de CPU del servidor Windows, de modo que siga las siguientes especificaciones:

  • Advertencia:
    • si tras 5 minutos, la CPU ha estado al 80%
    • si tras 10 minutos, la CPU ha estado al 70%
    • Si tras 15 minutos, la CPU ha estado al 65%
  • Crítico:
    • Si tras 5 minutos, la CPU ha estado al 90%
    • Si tras 10 minutos, la CPU ha estado al 80%
    • Si tras 15 minutos, la CPU ha estado al 70%

Como ayuda, consulta la siguiente página: https://www.monitoring-plugins.org/doc/man/check_nt.html

Toma una captura del con la definición del servicio según las especificaciones, y guárdala con el nombre Act3-monitorizacion.png.

Si se desea comprobar directamente desde consola si un cierto plugin es exitoso (por ejemplo, comprobar que el proceso "explorer.exe" está en ejecución en un servidor Windows) debemos tener claras las siguientes cuestiones:

La forma en que se especifica el comando

En el servidor nagios, el archivo /user/local/nagios/etc/objects/commands.cfg contiene la declaración de los comandos que ejecuta nagios para comprobar un determinado servicio. Por ejemplo, para el comprobar un servicio en Windows, declara un comando que emplea el plugin check_nt:

# 'check_nt' command definition define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -s 'Gato200' -p 12489 -v $ARG1$ $ARG2$ }

El plugin check_nt está definido en https://www.monitoring-plugins.org/doc/man/check_nt.html. En el comando anterior los parámetros tienen el siguiente significado:

  • -H $HOSTADDRESS - indica qué host sondear. El valor de la variable $HOSTADDRESS está definido en el archivo de configuración del servidor Windows, en nuestro ejemplo /user/local/nagios/etc/objects/windows.cfg a través del parámetro address.
  • -s 'Gato200' - indica la contraseña con la que se envía el chequeo. Esta contraseña está definida en el servidor Windows, en concreto en el archivo C:\Program Files\NSClient++\nsclient.ini, cuyo contenido se creó al instalar NSClient++
  • -p 12489 - indica el puerto en el que NSClient++ está escuchando en el servidor Windows.
  • -v $ARG1$ $ARG2 - Las variables $ARG1$ y $ARG2$ están especificadas en el archivo de configuración del servidor Windows, en el servidor Nagios.

En el archivo /usr/local/etc/objects/windows.cfg se definen los servicios a sondear en el servidor Windows. Puesto que estamos hablado del comando que comprueba si el proceso "explorer.exe" se está ejecutando en el servidor Windows, vamos a ver únicamente la sección donde se define dicho servicio:

define service{ use generic-service host_name winserver service_description Explorer check_command check_nt!PROCSTATE!-d SHOWALL -l explorer.exe }

Como se puede comprobar, la línea check_command hace referencia al comando check_nt definido en /user/local/nagios/etc/objects/commands.cfg. Detrás del comando aparecen dos parámetros separados por !. De este modo el comando check_nt toma "PROCSTATE" como $ARG1$ y "-d SHOWALL -l explorer.exe" como $ARG2$. En definitiva, el comando que se ejecuta una vez parseado es:

check_nt -H 192.168.0.4 -s 'Gato200' -p 12489 -v PROCSTATE -d SHOWALL -l explorer.exe

Para terminar, vamos a ver el significado de las opciones especificadas en windows.cfg:

  • -v PROCSTATE - indiqua que lo que queremos es comprobar el estado.
  • -d SHOWALL - tal y como se describe en www.monitoring-plugins.org, SHOWALL fuerza a que la respuesta del servidor monitoreado incluya el nombre del servicio.
  • -l explorer.exe - indica que el proceso a comprobar es explorer.exe

Ejecutar un comando manualmente desde la terminal

Podemos estar interesados en ejecutar directamente un comando desde la terminal del servidor Nagios, sin esperar a que la interfaz web nos muestre los resultados. Esto tiene la ventaja de que es inmediato. Si nuestro objetivo es comprobar que el servidor Windows monitoreado tiene en ejecución el proceso explorer.exe, basta con que ejecutemos el comando siguiente (de acuerdo con todo lo explicado anteriormente):

/user/local/nagios/libexec/check_nt -H 192.168.0.4 -s 'Gato200' -p 12489 -v PROCSTATE -d SHOWALL -l explorer.exe

Chequear SNMP desde Nagios

Nagios dispone de un plugin para comprobar SNMP. Dicho plugin está descrito en www.monitoring-plugins.org/doc/man/check_snmp.html. Soporta tanto SNMPv2 como SNMPv3. Ahora que ya sabemos añadir el servico SNMP en un servidor Linux (SNMPv3) y en un servidor Windows (SNMPv2), podemos añadir los chequeos que deseemos mediante definiciones de servicio en los archivos de configuración del servidor Nagios.

Chequear un OID en un Servidor Ubuntu Server 14.04, mediante SNMPv3

Debemos añadir la siguiente definición de comando al archivo /usr/local/etc/objects/commands.cfg en el servidor Nagios:

# 'check_snmpv3' command definition define command{ command_name check_snmpv3 command_line $USER1$/check_snmp -H $HOSTADDRESS$ -U $ARG1$ -P 3 -L authPriv -a MD5 -A $ARG2$ -x DES -X $ARG2$ -o $ARG3$ }

Posteriormente, en el archivo de configuración /usr/local/etc/servers/client.cfg (donde declaramos el servidor monitoreado y los servicios a chequear), añadimos la siguiente declaración de servicio:

define service { use generic-service host_name client service_description SNMP_RAMFREE check_command check_snmpv3!bootstrap!temp_password!.1.3.6.1.4.1.2021.4.5.0 }

Finalmente, debemos reiniciar el servicio Nagios:

service nagios restart

Chequear un OID en un router.

Muchos dispositivos emplean SNMPv2. El plugin check_snmp también soporta SNMPv2. Debemos añadir la siguiente definición de comando al archivo /usr/local/etc/objects/commands.cfg en el servidor Nagios:

# 'check_snmpv2' command definition define command{ command_name check_snmpv2 command_line $USER1$/check_snmp -P 2c -H $HOSTADDRESS$ -C $ARG1$ -o $ARG2$ }

Como ya hemos visto, es posible hacer consultas a un router o cualquier otro dispositivo que soporte SNMP. Si previamente hemos configurado el router para que active SNMP (ver referencia), podemos hacer consultas SNMP del mismo modo que lo hemos hecho con Windows o con Linux.

Es preciso que el router cuente con su archivo de configuración en el servidor Nagios. Lo crearemos en el directorio /usr/local/nagios/etc/servers/router.cfg. Su contenido podría ser algo como lo siguiente:

define host{ host_name mirouter alias mirouter address 192.168.0.100 max_check_attempts 5 check_period 24x7 notification_interval 30 notification_period 24x7 } define service { use generic-service host_name mirouter service_description SYSNAME check_command check_snmpv2!Public!.1.3.6.1.2.1.1.5.0 }

Con esto es suficiente. Finalmente, debemos reiniciar el servicio Nagios:

service nagios restart

SNMP

SNMP es un protocolo de preguntas y respuestas que permite monitorizar distintos tipos de dispositivos de una red, como switches, routers, servidores, impresoras, etc. Para el protocolo SNMP la red constituye un conjunto de elementos básicos ubicados en los equipos de la red:

  • Estaciones de gestión (NMS), instalados en los sistemas de administración, recopilando la información de dispositivos y servidores.
  • Nodos gestinados, que cuentan con un Agente SNMP, que responde a las encuestas de la estación de gestión.

Agentes SNMP

El agente implementa el protocolo SNMP y es capaz de enviar y recibir mensajes SNMP. Interactúa con el dispositivo físico y obtiene la información necesaria para responder las consultas del NMS y para enviar mensajes trap (mensajes de notificación). El agente también es capaz de realizar cambios en la información de gestión, siguiendo las instrucciones de las peticiones del NMS. Tienen que contar con una configuración de control de acceso para gestionar los privilegios de lectura y escritura.

NMS

Es un host que es capaz de enviar peticiones SNMP y de recibir respuestas SNMP y mensajes de notificación (trap) hacia/desde los nodos gestionados. Existen muchas formas de NMS, desde simples navegadores MIB, hasta sistemas de monitorización completos como Nagios.

MIB

La información disponible sobre un sistema en SNMP depende de su MIB (Management Information Base), que es básicamente un árbol jerárquico que incluye los parámetros sondeables. El agente SNMP busca dentro de este árbol jerárquico para responder a una pregunta SNMP.

Cada uno de los parámetros del MIB es identificable mediante un OID (Object IDentifier). Un OID es un string de enteros, separados por puntos, que coloca el objeto en un nodo de un árbol lógico conocido como el árbol de información de gestión. Por ejemplo, 1.3.6.1.2.1.5.8 es "Número de ICMP echo recibidos".

La mayoría de dispositivos implementan algún tipo de MIB. Lo más probable es que terminemos trabajando con ciertos OIDs concretos. El OID .1.3.6.1 (iso.org.dod.internet) contiene los OIDs más interesantes:

Algunos OIDs usados habitualmente son:

  • % de uso CPU: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3
  • Espacio en C: .1.3.6.1.4.1.311.1.1.3.1.1.5.1.4
  • RAM libre: .1.3.6.1.4.1.311.1.1.3.1.1.1.1

Busca los OIDs comentados en http://oid-info.com/get/1.3.6.1.4.1.311.

Versiones de SNMP

Existen varias versiones de SNMP. El problema que siempre ha arrastrado SNMP es la seguridad, ya que hasta la versión 2 transporta la información (incluida la autenticación) en texto plano. De hecho, una broma decía que SNMP eran las siglas de "Security is Not My Problem". La versión 1 es la más antigua, y por lo general ha sido susituida pora la versión 2. La versión 2 de SNMP aporta una serie de mejoras frente a la original, que, fundamentalmente, se manifiestan en tres áreas particulares: seguridad (autentificación, privacidad y control de acceso). Y por último, la versión 3 mejora aun más la seguridad añadiendo el cifrado para las transferencias de paquetes SNMP.

SNMPv2

Cuando preguntamos a un agente SNMPv2 es preciso que indiquemos la comunidad a que pertenece. La comunidad es una estrategia de seguridad, que hace las veces de contraseña. Mediante las comunidades, podemos establecer si el acceso será de solo lectura o bien de lectura y escritura. Por lo general, para solo lectura se usa la comunidad public, y para lectura y escritura otra comunidad distinta.

SNMPv3

Esta versión no realiza cambios en el protocolo, aparte de la adición de seguridad criptográfica. La consulta a un agente SNMP pasa por el uso de un usuario y de una contraseña. Los niveles de seguridad que soporta son:

  • noAuthPriv - Sin autenticación ni privacidad (cifrado de los mensajes)
  • authNoPriv - Atenticación sin privacidad (sin cifrado)
  • authPriv - Autenticación con privacidad (con cifrado)

Instalando un agente SNMPv2 en Windows Server 2012

Para activar el servicio SNMP en Windows Server 2012, debemos agregar las características siguientes desde el administrador del servidor:

  • Servicio SNMP
  • Herramientas de administración remota del servidor\Herramientas de administración de características\Herramientas SNMP

Hecho esto, reiniciamos el servidor.

Una vez que ya hemos reinicado, nos vamos a la consola de administración de servicios, y buscamos el servicio SNMP. Una vez allí, abriremos las propiedades del servicio. Debemos centrarnos en las siguientes pestañas:

  • Agente
  • Seguridad

Petaña agente

En esta pestaña daremos datos sobre el contacto administrativo, ubicación y otros detalles sobre la máquina (ver https://technet.microsoft.com/en-us/library/cc754579.aspx). Debemos rellenar las entradas de texto.

Pestaña seguridad

Aquí añadiremos las comunidades que vayamos a usar, y desde qué hosts puede hacerse. Podemos crear dos comunidades, por ejemplo:

  • Comunidad Public con permisos de SOLO LECTURA.
  • Comunidad Private con permisos de LECTURA Y ESCRITURA

Además, podemos indicar desde qué hosts aceptaremos las preguntas SNMP. En nuestro caso, por cuestiones de comodidad, podemos utilizar la opción Aceptar paquetes SNMP de cualquier host, aunque no sea una buena idea en un sistema en producción.

Los MIBs de Windows

Windows cuenta con varios MIBs propios. Estos MIBs se encuentran en la carpeta C:\Windows\System32\, y están descritos (algunos de ellos) en https://msdn.microsoft.com/en-us/library/windows/desktop/aa379157(v=vs.85).aspx

Conectando con el agente SNMP de Windows

Necesitaremos un navegador MIB. iReasoning MIB Broser sirve bien a nuestros propósitos. Se puede encontrar aquí

Una vez que descarguemos el navegador MIB, lo instalaremos en una máquina Windows (diferente a la monitorizada).

En primer lugar, debemos indicar que versión de SNMP estamos utilizando. Esto podemos hacerlo en Edit\Settings. Una vez hecho esto, debemos completar la información sobre el host, la comunidad de solo lectura y la comunidad de lectura y escritura.

Inmediatamente, podemos hacer preguntas al agente SNMP, por ejemplo:

Si lo que deseamos es tener acceso a cuestiones sobre el rendimiento del sistema, podemos buscar por los OIDs descendientes de 1.3.6.1.2.1.25 (management/host).

Actividad 4. Abre el navegador MIB y obtén información sobre estas cuestiones:

  • Total de memoria RAM
  • Memoria RAM en uso
  • Total de espacio en la unidad C:\
  • Total de espacio disponible en la unidad C:\
  • Procesos en ejecución
    • Toma una captura para cada pregunta formulada y su correspondiente respuesta, y guárdala con el nombre Act4-monitorizacion.png.

Actividad 5. Modifica el valor del OID .iso.org.dod.internet.mgmt.mib-2.system.sysContact disponible en el árbol SNMPv2-MIB mediante un comando SetSNMP, y comprueba después que en el servidor ha cambiado el valor "Contacto" de la pestaña Agente del servicio SNMP.

Toma una captura del mensaje mostrado en el navegador MIB una vez ejecutado el comando SetSNMP, y guárdala con el nombre Act5-monitorizacion.png.

Instalando un agente SNMPv3 Ubuntu Server 14.04

Contaremos con dos máquinas:

  • El NMS: Un servidor Ubuntu Server 14.04. IP: 192.168.0.2
  • El nodo gestionado: Un servidor Ubuntu Server 14.04. IP: 192.168.0.3

En el NMS

sudo apt-get update sudo apt-get install snmp snmp-mibs-downloader

En el nodo gestionado

sudo apt-get update sudo apt-get install snmpd

Configuración del NMS

Abrimos el archivo /etc/snmp/snmp.conf y comprobamos que contiene la línea siguiente:

mibs :

Configuración del nodo gestionado

Modificamos el archivo /etc/snmp/snmpd.conf para que tenga el siguiente contenido (de este modo aceptamos conexiones de cualquier NMS):

# Listen for connections from the local system only #agentAddress udp:127.0.0.1:161 # Listen for connections on all interfaces (both IPv4 *and* IPv6) agentAddress udp:161,udp6:[::1]:161

En el mismo archivo, vamos añadir información sobre autenticación y cifrado:

createUser bootstrap MD5 temp_password DES

En el mismo archivo, vamos ahora a añadir permisos de lectura/escritura para el usuario "bootstrap":

rwuser bootstrap priv

Con la palabra priv forzamos el uso de cifrado

Una vez hecho esto, reiniciamos el servicio SNMP:

sudo service snmpd restart

Consultas desde el NMS

Para consultar los OIDs que deseemos, debemos ejecutar un comando similar a este:

comando_snmp -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password direccion_ip_del_host comando_snmp

Por ejemplo, si el comando es snmpget:

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password 192.168.0.3 1.3.6.1.2.1.1.1.0

Y como respuesta obtendremos:

SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64

Ya que el OID 1.3.6.1.2.1.1.1.0 es el responsable de mostrar la información del sistema.

Actividad 6. Busca el OID apropiado en http://www.debianadmin.com/linux-snmp-oids-for-cpumemory-and-disk-statistics.html para conocer la cantidad de memoria RAM en uso. Después, realiza la consulta al sistema gestionado empleando el comando snmpget desde el NMS

Toma una captura con la consulta y su resultado. Guárdala con el nombre Act6-monitorizacion.png.

Cualquier dispositivo que soporte SNMP puede ser consultado con un navegador MIB. Dependiendo del dispositivo, la forma de activar SNMP es diferente. En muchos de ellos se activa a través de una interfaz Web. En otros, empleando comandos. En un router Cisco, para activar SNMP basta con que usemos los siguientes comandos:

> enable # configure terminal (config)# snmp-server community Public RO (config)# snmp-server community Private RW

Actividad 7. Configura una topología mediante PacketTracer donde se incluya un router y un host directamente conectados. Configura SNMP en el router y accede al árbol MIB del router desde el navegador MIB incluido en el cliente.

Toma una captura donde se pueda ver como has accedido a un OID del router y guárdala con el nombre Act7-snmp.png.