Monitoreo de la red con Nagios – PARTE II

PARTE II

|_6. SNMP

|_ _6.1.       ¿Qué es SNMP?

|_ _6.2.       SNMP en VyOS

|_ _6.3.       SNMP en Linux

|_ _6.4.       SNMP en Windows

|_ _6.5.       Comprobaciones de SNMP

|_ _ _6.5.1.       Comprobando con “snmpwalk”

|_ _ _6.5.2.       Comprobando con plugin de nagios “check_snmp”

6. SNMP

6.1. ¿Qué es SNMP?

El IETF (Internet Engineering Task Force) forma parte de los Modelos de Normalizados de Gestión Integrada y se basa en la gestión por medio de SNMP (Simple Network Management Protocol). SNMP es un protocol estándar de internet para la colección y organización de información acerca de dispositivos gestionados en redes IP y para la modificación de información, para cambiar el comportamiento del dispositivo, ya sea: router, switch, servidores, computadoras, entre otros.

SNMP expone la gestión de datos en forma de variables en los sistemas gestionados en una MIB (Management Information Base), la cual describe el estado del sistema y configuración. Estas variables pueden ser encuestadas remotamente, y algunas circunstancias, manipuladas por aplicaciones.

Existen tres versiones de SNMP. La primera es la versión original del protocolo, mientras que SNMPv2c y SNMPv3 introducen mejoras en desempeño, flexibilidad y seguridad, ésta última potenciada por su última actualización, la cual soporta encriptación y autenticación criptográfica de los usuarios.

6.2. SNMP en VyOS

En este caso, los dispositivos de red son funciones de red virtualizadas, o máquinas virtuales con funcionalidades de red, basadas en el sistema operativo de “networking” VyOS. En estas VNFs se configuró SNMPv3 con los siguientes comandos del CLI de VyOS:

En “fw2-vyos1.2.0-rc8”:

set service snmp v3 engineid '0x0aa0d6c6f450'
set service snmp v3 group defaultgroup mode 'ro'
set service snmp v3 group defaultgroup seclevel 'priv'
set service snmp v3 group defaultgroup view 'defaultview'
set service snmp v3 view defaultview oid '1'

set service snmp v3 user nagios auth plaintext-key nagioskey
set service snmp v3 user nagios auth type 'md5'
set service snmp v3 user nagios engineid '0x0aa0d6c6f450'
set service snmp v3 user nagios group 'defaultgroup'
set service snmp v3 user nagios mode 'ro'
set service snmp v3 user nagios privacy type aes
set service snmp v3 user nagios privacy plaintext-key nagioskey
set service snmp contact "ing. Franco Diaz <[email protected]>"
set service snmp location "pve1, NODO, Sevillano, 10 de Octubre, La Habana"

En “fw3-vyos1.2.0-rc8”:

set service snmp v3 engineid '0x0aa0d6c6f451'
set service snmp v3 group defaultgroup mode 'ro'
set service snmp v3 group defaultgroup seclevel 'priv'
set service snmp v3 group defaultgroup view 'defaultview'
set service snmp v3 view defaultview oid '1'

set service snmp v3 user nagios auth plaintext-key nagioskey
set service snmp v3 user nagios auth type 'md5'
set service snmp v3 user nagios engineid '0x0aa0d6c6f451'
set service snmp v3 user nagios group 'defaultgroup'
set service snmp v3 user nagios mode 'ro'
set service snmp v3 user nagios privacy type aes
set service snmp v3 user nagios privacy plaintext-key nagioskey
set service snmp contact "ing. Franco Diaz <[email protected]>"
set service snmp location "pve1, NODO, Sevillano, 10 de Octubre, La Habana"

6.3. SNMP en Linux

En todos los hosts Linux:

El siguiente procedimiento lo haremos en todos los host Linux de nuestra red (al menos los basados en Debian).

Instalamos el descargador de MIBs:

apt-get install snmp-mibs-downloader

Una vez instalado el descargador de MIBs, las bajamos:

download-mibs

Editamos el fichero “/etc/snmp/snmp.conf”:

nano /etc/snmp/snmp.conf

Comentamos la siguiente línea:

#mibs

#===========================================================
NOTA:
Se recomienda obtener las MIBs del dispositivo de red con el cual estamos trabajando. Como VyOS es un sistema basado en Debian, no fue tan difícil entrar obtener sus MIBs localizadas en «/usr/share/snmp/mibs».

scp [email protected]:/usr/share/snmp/mibs/* /usr/share/snmp/mibs

Reniciamos snmp:

systemctl restart snmpd.service

#===========================================================

Sabemos que desde el servidor nagios no podremos verificar directamente nuestros dispositivos de red, por las características que tiene nuestro ejemplo, de una red aislada y segura para la subred de “GESTION”. No obstante, se pueda verificar las MIBs del “fw2-vyos1.2.0-rc8” y fw3-vyos1.2.0-rc8, desde el “fw1-debian9”.

Editamos el fichero de configuración de SNMP, no sin antes hacer una copia de respaldo:

cp /etc/snmp/snmpd.conf /etc/snmp/snmp.conf.save
nano /etc/snmp/snmpd.conf

Borramos todo y configuramos SNMPv3, configuración que debería ser el objetivo de cualquier nueva instalación hoy en día, por las características de seguridad que ofrece. Adapte a su red:

###############################################################################
#
# AGENT BEHAVIOUR
#

# Listen for connections on IPv4 interfaces
agentAddress udp:161


###############################################################################
#
# SNMPv3 AUTHENTICATION
#
# SHA-1 y AES, siempre
createUser nagios SHA "nagioskey" AES "nagioskey"


###############################################################################
#
# ACCESS CONTROL
#
view vmonitoreo included .1.3.6.1.2.1
view vmonitoreo included .1.3.6.1.4.1.2021.7890
# Se refiere a la rama UCD, librenms la usa para el uso de memoria que se muestra en la cabecera de cada host
view vmonitoreo included .1.3.6.1.4.1.2021.4

rouser nagios priv -V vmonitoreo

###############################################################################
#
# SYSTEM INFORMATION
#

# Note that setting these values here, results in the corresponding MIB objects being 'read-only'
# See snmpd.conf(5) for more details
sysLocation pve1, NODO, 10 de Octubre, Sevillano, La Habana
sysContact ing. Franco Diaz <[email protected]>
# Application + End-to-End layers
sysServices 72

# Walk the UCD-SNMP-MIB::prTable to see the resulting output
# Note that this table will be empty if there are no "proc" entries in the snmpd.conf file


#
# Disk Monitoring
#
# 10MBs required on root disk, 5% free on /var, 10% free on all other disks
disk / 10000
disk /var 5%
includeAllDisks 10%

#
# System Load
#
# Unacceptable 1-, 5-, and 15-minute load averages
load 12 10 5

# Walk the UCD-SNMP-MIB::laTable to see the resulting output
# Note that this table *will* be populated, even without a "load" entry in the snmpd.conf file

###############################################################################
#
# EXTENDING THE AGENT
#

#
# Arbitrary extension commands
#
#extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro
#extend .1.3.6.1.4.1.2021.7890.2 hardware '/usr/bin/sudo /usr/sbin/dmidecode -s system-product-name'
#extend .1.3.6.1.4.1.2021.7890.3 manufacturer '/usr/bin/sudo /usr/sbin/dmidecode -s system-manufacturer'
#extend .1.3.6.1.4.1.2021.7890.4 serial '/usr/bin/sudo /usr/sbin/dmidecode -s system-serial-number'


#
# AgentX Sub-agents
#
# Run as an AgentX master agent
master agentx
# Listen for network connections (from localhost)
# rather than the default named socket /var/agentx/master
#agentXSocket tcp:localhost:705

Reiniciamos el servicio snmp.

systemctl restart snmpd.service

6.4. SNMP en Windows

En todos los hosts Windows:

Los siguientes pasos explican muy detalladamente cómo instalar esta característica de Windows en Windows 10 1809 o superior (probado en Windows 10 v1903 build 18362.295).

Accedemos a “Configuración”:

Seleccionamos “Aplicaciones”:

Nos ubicamos en “Aplicaciones y características”, para luego entrar en “Características opcionales”:

Damos click en el símbolo de “+” para agregar una característica de Windows:

Buscamos entre todas las características disponibles, la que tiene por nombre “Protocolo simple de administración de redes (SNMP)” y le damos click en “Instalar”.

Cuando regresamos al repositorio de características de Windows veremos que se encuentra instalándose la característica de SNMP:

Ahora tecleamos en la barra de inicio “Servicios” y accedemos a la aplicación:

Buscamos de entre todos los servicios, el que tiene por nombre “Servicio SNMP”:

Damos un click derecho y seleccionamos propiedades. Acto seguido, detenemos el servicio:

Las únicas opciones disponibles por Windows están para SNMPv1 y SNMPv2c, así que lo configuraremos para esta última. Esto se debe a que Microsoft no da soporte directamente para SNMPv3, sino que lo deja en manos de 3eras aplicaciones de pago. Agregamos primero una comunidad:

La comunidad tendrá permisos de sólo lectura y tendrá como nombre “public”:

Agregamos las direcciones IP que tienen permitido hacer consultas SNMP al servidor Windows:

Llenamos los campos referentes al contacto y la ubicación del servidor:

Iniciamos el servicio:

6.5. Comprobaciones de SNMP

Necesitamos comprobar si podemos obtener la información que nos pueden proporcionar las MIBs por SNMP. Las comprobaciones se harán desde el host “fw1-debian9”, ya que cuando se configuren los servicios definidos en nagios para chequeos indirectos por NRPE, el servidor nagios obtendrá la información de SNMP, de aquellos hosts a los cuales no puede alcanzar directamente, a través de “fw1-debian9”.

6.5.1. Comprobando con “snmpwalk”

En “fw1-debian9”:

Probamos “snmpwalk” hacia “fw2-vyos1.2.0-rc8”:

snmpwalk -v 3 -a MD5 -e 0x0aa0d6c6f450 -l authPriv -x AES -u nagios -X nagioskey -A nagioskey 172.16.12.1 |more

Debe devolver algo como lo siguiente:

SNMPv2-MIB::sysDescr.0 = STRING: VyOS 1.2.0-rc8
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.44641
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (22491599) 2 days, 14:28:35.99
SNMPv2-MIB::sysContact.0 = STRING: ing. Franco Diaz <[email protected]>
SNMPv2-MIB::sysName.0 = STRING: vyos
SNMPv2-MIB::sysLocation.0 = STRING: pve1, NODO, Sevillano, 10 de Octubre, La Habana
.
.
.
--More--

Probamos “snmpwalk” hacia “fw3-vyos1.2.0-rc8”:

snmpwalk -v 3 -a MD5 -e 0x0aa0d6c6f451 -l authPriv -x AES -u nagios -X nagioskey -A nagioskey 172.16.23.1 |more

Debe devolver algo como lo siguiente:

SNMPv2-MIB::sysDescr.0 = STRING: VyOS 1.2.0-rc8
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.44641
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (22485260) 2 days, 14:27:32.60
SNMPv2-MIB::sysContact.0 = STRING: ing. Franco Diaz <[email protected]>
SNMPv2-MIB::sysName.0 = STRING: vyos
SNMPv2-MIB::sysLocation.0 = STRING: pve1, NODO, Sevillano, 10 de Octubre, La Habana
.
.
.
--More--

Probamos “snmpwalk” hacia localhost:

snmpwalk -v 3 -u nagios -l authPriv -a SHA -A nagioskey -x AES -X nagioskey 127.0.0.1 |more

Debe devolver algo como lo siguiente:

SNMPv2-MIB::sysDescr.0 = STRING: Linux fw1-debian9 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u2 (2017-06-26) x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (5924) 0:00:59.24
SNMPv2-MIB::sysContact.0 = STRING: ing. Franco Diaz <[email protected]>
SNMPv2-MIB::sysName.0 = STRING: fw1-debian9
SNMPv2-MIB::sysLocation.0 = STRING: pve1, NODO, 10 de Octubre, Sevillano, La Habana
.
.
.
--More--

Probamos “snmpwalk” hacia “hostmaster-pc”:

snmpwalk -v 1 -c public 192.168.10.6 |more

Debe devolver algo como lo siguiente:

SNMPv2-MIB::sysDescr.0 = STRING: Hardware: Intel64 Family 6 Model 78 Stepping 3 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 18362 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1799156) 4:59:51.56
SNMPv2-MIB::sysContact.0 = STRING: ing. Franco Diaz <[email protected]>
SNMPv2-MIB::sysName.0 = STRING: SPARROW
SNMPv2-MIB::sysLocation.0 = STRING: 10 de Octubre, La Habana
SNMPv2-MIB::sysServices.0 = INTEGER: 79
.
.
.
--More--

En “nagios-debian9”:

Si probamos con el host “nagios-debian9” nos dará el mismo resultado que en “fw1-debian9”, suponiendo que todos son VMs clonadas y que varían sólo los servicios que se tengan configurados, así como sus interfaces de red.

Con la información proporcionada por SNMP, cifrada además por su versión 3 (para los dispositivos de red y hosts Linux), obtendremos las interfaces de los dispositivos de red que están siendo usadas por los hosts consultados. Esto nos servirá más adelante para la configuración de los servicios que serán monitorizados por nagios y que tengan que ver con la información de SNMP. En este ejemplo sería de la siguiente manera:

En “fw1-debian9”:

Probamos “snmpwalk” hacia “fw2-vyos1.2.0-rc8” para obtener el OID “ifAlias”

snmpwalk -v 3 -u nagios -l authPriv -a MD5 -A nagioskey -x AES -X nagioskey 172.16.12.1 ifAlias

Debe devolver algo como lo siguiente (depende de las interfaces de su host):

IF-MIB::ifAlias.1 = STRING: lo
IF-MIB::ifAlias.2 = STRING: Miembro de bond0
IF-MIB::ifAlias.3 = STRING: FW2 <--> FW1
IF-MIB::ifAlias.4 = STRING: FW2 <--> LAN
IF-MIB::ifAlias.5 = STRING: FW2 <--> GI
IF-MIB::ifAlias.6 = STRING: FW2 <--> GI_OUT
IF-MIB::ifAlias.7 = STRING: Miembro de bond0
IF-MIB::ifAlias.8 = STRING: bond0

Probamos “snmpwalk” hacia “fw3-vyos1.2.0-rc8” para obtener el OID “ifAlias”:

snmpwalk -v 3 -u nagios -l authPriv -a MD5 -A nagioskey -x AES -X nagioskey 172.16.23.1 ifAlias

Debe devolver algo como lo siguiente (depende de las interfaces de su host):

IF-MIB::ifAlias.1 = STRING: lo
IF-MIB::ifAlias.2 = STRING: FW3 <--> WAN2
IF-MIB::ifAlias.3 = STRING: Miembro de bond0
IF-MIB::ifAlias.4 = STRING: Miembro de bond0
IF-MIB::ifAlias.5 = STRING: FW3 <--> DMZ
IF-MIB::ifAlias.6 = STRING: FW3 <--> DMZ_OUT
IF-MIB::ifAlias.7 = STRING: FW3 <--> WAN1
IF-MIB::ifAlias.8 = STRING: bond0

Probamos “snmpwalk” hacia “fw1-debian9” para obtener el OID “ifDescr”:

snmpwalk -v 3 -u nagios -l authPriv -a SHA -A nagioskey -x AES -X nagioskey 127.0.0.1 ifDescr

Debe devolver algo como lo siguiente (depende de las interfaces de su host):

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: VMware VMXNET3 Ethernet Controller
IF-MIB::ifDescr.3 = STRING: VMware VMXNET3 Ethernet Controller
IF-MIB::ifDescr.4 = STRING: VMware VMXNET3 Ethernet Controller
IF-MIB::ifDescr.9 = STRING: tun0
IF-MIB::ifDescr.10 = STRING: tun1
IF-MIB::ifDescr.11 = STRING: tun2
IF-MIB::ifDescr.12 = STRING: tun3

Probamos “snmpwalk” hacia “hostmaster-pc” (por SNMPv2c) para obtener el OID “ifAlias”. En mi caso particular sólo me interesa conocer las interfaces Ethernet:

snmpwalk -v 1 -c public 192.168.10.6 ifAlias |grep Ethernet

Debe devolver algo como lo siguiente (depende de las interfaces de su host):

IF-MIB::ifAlias.22 = STRING: Ethernet 2
IF-MIB::ifAlias.29 = STRING: Ethernet (depurador de kernel)
IF-MIB::ifAlias.32 = STRING: Ethernet
IF-MIB::ifAlias.33 = STRING: Ethernet 2-WFP Native MAC Layer LightWeight Filter-0000
IF-MIB::ifAlias.34 = STRING: Ethernet 2-QoS Packet Scheduler-0000
IF-MIB::ifAlias.35 = STRING: Ethernet 2-WFP 802.3 MAC Layer LightWeight Filter-0000
IF-MIB::ifAlias.39 = STRING: Ethernet-WFP Native MAC Layer LightWeight Filter-0000
IF-MIB::ifAlias.40 = STRING: Ethernet-QoS Packet Scheduler-0000
IF-MIB::ifAlias.41 = STRING: Ethernet-WFP 802.3 MAC Layer LightWeight Filter-0000

En “nagios-debian9”:

Probamos “snmpwalk” hacia “nagios-debian9” para obtener el OID “ifAlias”

snmpwalk -v 3 -u nagios -l authPriv -a SHA -A nagioskey -x AES -X nagioskey 127.0.0.1 ifDescr

Debe devolver algo como lo siguiente (depende de las interfaces de su host):

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: VMware VMXNET3 Ethernet Controller
IF-MIB::ifDescr.3 = STRING: tun0
IF-MIB::ifDescr.4 = STRING: tun1

6.5.2. Comprobando con plugin de nagios “check_snmp”

Necesitamos saber si el plugin de nagios funciona correctamente para obtener esta información de gestión por SNMP. Sin embargo, cuando se instalaron los plugins de nagios, no se tenía instalado el

En “fw1-debian9”:

Probamos el plugin de nagios para obtener información snmp de “fw2-vyos1.2.0-rc8”:

/usr/local/nagios/libexec/check_snmp -H 172.16.12.1 -o sysDescr.0 -P 3 -a MD5 -L authPriv -x AES -U nagios -A nagioskey -X nagioskey

Debe devolver algo como lo siguiente

SNMP OK - "VyOS 1.2.0-rc8" |

Probamos el plugin de nagios para obtener información snmp de “fw3-vyos1.2.0-rc8”:

/usr/local/nagios/libexec/check_snmp -H 172.16.23.1 -o sysDescr.0 -P 3 -a MD5 -L authPriv -x AES -U nagios -A nagioskey -X nagioskey

Debe devolver algo como lo siguiente

SNMP OK - "VyOS 1.2.0-rc8" |

Probamos el plugin de nagios para obtener información snmp de “localhost” (fw1-debian9):

/usr/local/nagios/libexec/check_snmp -H 127.0.0.1 -o sysDescr.0 -P 3 -a SHA -L authPriv -x AES -U nagios -A nagioskey -X nagioskey

Debe devolver algo como lo siguiente

SNMP OK - "Linux fw1-debian9 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u2 (2017-06-26) x86_64" |

#===========================================================
NOTA:
Si probamos el plugin de nagios para obtener la información snmp de “localhost”, nos dará el mismo resultado que en “fw1-debian9”, por lo explicado anteriormente (VMs con el mismso sistema base).
#===========================================================

Hasta este punto ya tenemos el escenario listo para que Nagios pueda obtener la información SNMP de los dispositivos de red, a través de “fw1-debian9”. También es capaz de obtener esta información de un host Linux remoto y del propio localhost. Sin embargo, necesitamos editar el comando de definido por nagios para ejecutar el plugin “check_snmp” con los argumentos necesarios para SNMPv3 para hosts Linux y dispositivos de red, y SNMPv2c para el caso de los hosts Windows.

En “nagios-debian9”:

En el host “nagios-debian9”, editamos el fichero “commands.cfg”:

nano /etc/nagios/objects/commands.cfg

Buscamos la definición del comando “check_snmp” y lo editamos, dejándolo definido de la siguiente manera:

define command {

command_name check_snmp
command_line $USER1$/check_snmp -H $ARG1$ -o $ARG2$ -P $ARG3$ -a $ARG4$ -L $ARG5$ -x $ARG6$ -U $ARG7$ -A $ARG8$ -X $ARG9$
}

Debajo definimos un nuevo comando para SNMPv1 específicamente:

define command {

command_name check_snmpv2c
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o $ARG1$ -C $ARG2$ -P $ARG3$
}

Hecho todo lo anterior sólo faltará configurar los chequeos de los servicios, mediante comandos NRPE con argumentos, para que nagios pueda obtener esa información SNMP de los dispositivos de red, a través de “fw1-debian9”, así como los chequeos directos de SNMP para localhost (nagios-debian9). La definición del comando “check_nrpe” no solo ayudará a esto, sino que también permitirá la ejecución de otros chequeos.

 

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.5 / 5. Recuento de votos: 2

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Franco Diaz Hurtado 27 artículos
Ing. Telecomunicaciones y Electrónica; 1er Especialista en Redes de ECASA Nivel Central

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*