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.
Dejar una contestacion