LibreNMS: Una plataforma para el monitoreo de red

Volvemos a la carga con la administración de sistemas y redes, concretamente con LibreNMS, una plataforma de monitoreo de red. Esta detecta automáticamente una amplia gama de hardware de red y sistemas operativos, como por ejemplo GNU/Linux, Cisco, Jupiter, Foundry y muchos más.

LibreNMS es una derivada, basada en la comunidad, de la última versión con licencia GPL del producto Observium

LibreNMS utiliza una licencia GNU General Public License v3.0, por lo que es software libre.

Entre sus principales ventajas encontramos:

  • Descubrimiento automático: Descubre de manera automática toda nuestra red, utilizando CDP, FDP, LLDP, OSPF, BGP, SNMP y ARP
  • Alerta personalizable: Sistema de alerta altamente flexible, incluyendo la notificación por correo electrónico o IRC, entre otros.
  • Acceso API: Una API completa para administrar, graficar y recuperar datos de la instalación.
  • Sistema de cobro: Permite generar facturas de ancho de banda utilizado, para puertos en nuestra red según el uso o la transferencia.
  • Actualizaciones automáticas: Podemos tener el producto actualizado en todo momento, incluyendo corrección de errores, nuevas funcionalidades y mucho más.
  • Escalamiento distribuido: Escalamiento horizontal para crear con nuestra red.
  • Aplicaciones para iPhone y para Android: Las aplicaciones nativas para estos sistemas operativos de dispositivos móviles están disponibles, lo que proporciona una funcionalidad básica.

Además, que no menos importante, soporta integraciones con productos como NfSen, collectd, SmokePing, RANCID o Oxidized.

Permite múltiples manera de autentificación, ya sea base de datos con MySQL/MariaDB, HTTP, LDAP, Radius o Microsoft Active Directory.

Si queremos probar el producto sin instalarlo, podemos utilizar su demo: demo.librenms.org, utilizando el usuario “demo” y la contraseña “demo”

Instalación de LibreNMS

El producto tiene una excelente página de documentación, donde podemos ver diferentes maneras de instalar el producto. En mi caso me he decantado por realizar una instalación del producto en una distribución con Centos 7, y un servidor web LAMP

Siguiendo estos pasos:

  1. yum install epel-release
  2.  
  3. rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  4.  
  5. yum -y install composer cronie fping git httpd ImageMagick jwhois 
  6. yum -y install mariadb mariadb-server mtr MySQL-python net-snmp net-snmp-utils 
  7. yum -y install nmap php72w php72w-cli php72w-common php72w-curl php72w-gd 
  8. yum -y install php72w-mbstring php72w-mysqlnd php72w-process php72w-snmp 
  9. yum -y install php72w-xml php72w-zip python-memcached rrdtool zip unzip

Añadimos el usuario ‘librenms’ al sistema

  1. useradd librenms -d /opt/librenms -M -r
  2. usermod -a -G librenms apache

Instalamos LibreNMS

  1. cd /opt
  2. composer create-project --no-dev --keep-vcs librenms/librenms librenms dev-master

Configuración de la base de datos

Configuramos MySQL/MariaDB

  1. systemctl enable mariadb
  2. systemctl start mariadb

Aseguramos la base de datos:

  1. mysql_secure_installation

Accedemos a la base de datos y añadimos la base de datos:

  1. CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
  2. CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
  3. GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
  4. FLUSH PRIVILEGES;
  5. Exit

Añadimos al fichero de configuración ubicado en “/etc/my.cnf”, dentro de la sección [mysqld]

  1. innodb_file_per_table=1
  2. lower_case_table_names=0

Reiniciamos el motor de la base de datos

  1. systemctl restart mariadb

Configuración del servidor web

Configuramos la zona horaria según nuestra ubicación, editando el fichero “/etc/php.ini”

  1. vi /etc/php.ini

En mi caso:

  1. [Date]
  2. ; Defines the default timezone used by the date functions
  3. ; http://php.net/date.timezone
  4. date.timezone = Europe/Madrid

Configuramos el “virtual host” para Apache

  1. vi /etc/httpd/conf.d/librenms.conf

Con esta configuración:

  1. <VirtualHost *:80>
  2.   DocumentRoot /opt/librenms/html/
  3.   ServerName  librenms.example.com
  4.  
  5.   AllowEncodedSlashes NoDecode
  6.   <Directory "/opt/librenms/html/">
  7.     Require all granted
  8.     AllowOverride All
  9.     Options FollowSymLinks MultiViews
  10.   </Directory>
  11. </VirtualHost>

Siempre es recomendable eliminar la página de bienvenida por defecto de Apache:

  1. rm -f /etc/httpd/conf.d/welcome.conf

Habilitamos el servidor al arranque y lo encendemos

  1. systemctl enable httpd
  2. systemctl restart httpd

Configuración del módulo de seguridad SELinux

De SELinux ya hablamos en detalle hace unos meses. Si lo tenemos habilitado, debemos instalar el siguiente módulo:

  1. yum install policycoreutils-python

Para que funcione LibreNMS, debemos configurar el contexto:

  1. semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/logs(/.*)?'
  2. semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/logs(/.*)?'
  3. restorecon -RFvv /opt/librenms/logs/
  4. semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/rrd(/.*)?'
  5. semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/rrd(/.*)?'
  6. restorecon -RFvv /opt/librenms/rrd/
  7. semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/storage(/.*)?'
  8. semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/storage(/.*)?'
  9. restorecon -RFvv /opt/librenms/storage/
  10. semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/bootstrap/cache(/.*)?'
  11. semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/bootstrap/cache(/.*)?'
  12. restorecon -RFvv /opt/librenms/bootstrap/cache/
  13. setsebool -P httpd_can_sendmail=1

O directamente, si queremos quitarnos dolores de cabeza, sobre todo ni no se trata de un entorno productivo, deshabilitar SELinux y seréis más felices.

Habilitar FPING dentro de SELinux

Debemos crear el fichero ‘http_fping.tt” con el siguiente contenido. Podemos crear el fichero en cualquier lugar, ya que se trata de un fichero desechable. En el último paso de este procedimiento de instalación, instalará el módulo en la ubicación correcta.

  1. module http_fping 1.0;
  2.  
  3. require {
  4. type httpd_t;
  5. class capability net_raw;
  6. class rawip_socket { getopt create setopt write read };
  7. }
  8.  
  9. #============= httpd_t ==============
  10. allow httpd_t self:capability net_raw;
  11. allow httpd_t self:rawip_socket { getopt create setopt write read };

Una vez guardado el fichero. Ejecutamos los siguientes comandos:

  1. checkmodule -M -m -o http_fping.mod http_fping.tt
  2. semodule_package -o http_fping.pp -m http_fping.mod
  3. semodule -i http_fping.pp

El resultado tras ejecutar los comandos en la máquina virtual que estoy utilizando:

Habilitar acceso en el cortafuegos:

  1. firewall-cmd --zone public --add-service http
  2. firewall-cmd --permanent --zone public --add-service http
  3. firewall-cmd --zone public --add-service https
  4. firewall-cmd --permanent --zone public --add-service https

Configurar snmpd

Copiamos el fichero de configuración de LibreNMS. Previamente realizamos una copia de seguridad del que ya tengamos.

  1. mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.backup
  2. cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
  3.  
  4. vi /etc/snmp/snmpd.conf

Editamos el texto que pone “RANDOMSTRINGGOESHERE” y añadimos la comunidad que a nosotros nos parezca.

  1. curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
  2. chmod +x /usr/bin/distro
  3. systemctl enable snmpd
  4. systemctl restart snmpd

Creación de tarea programada (Cron job)

  1. cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms

Copiar la configuraicón de «logrotate»

LibreNMS guarda los registros de actividad en “/opt/librenms/logs”, con el tiempo, estos pueden volverse grandes y rotar. Para poder rotar los registros antiguos, podemos utilizar el fichero de configuración para “logrotate” proporcionado:

  1. cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

Instalación web

Debemos seguir las instrucciones en el navegador web, escribiendo la URL: http://nuestra-ip/install.php

Lo primera pantalla que nos aparece nos indica si la instalación cumple con los requisitos:

A continuación indicamos las credenciales de la base de datos:

Credenciales de base de datos para instalación LibreNMS

Importamos la base de datos:

Importación de la base de datos del producto

Añadimos un usuario administrador, sus credenciales y una dirección de correo:

Nuevas credenciales del administrador

Una vez finalizada la instalación veremos la siguiente pantalla:

Pantalla final de instalación

El instalador web nos puede solicitar crear un fichero llamado “config.php” en la ubicación de la instalación.

Copiando el contenido que se muestra en pantalla al fichero. Si hacemos esto debemos recordar establecer los permisos del fichero, después de copiar los contenidos en pantalla.

  1. chown librenms:librenms /opt/librenms/config.php

Pantalla de acceso a la plataforma:

Primeros pasos con LibreNMS

Una vez instalada la plataforma, el escritorio está vacío, por lo que debemos crear uno a nuestro gusto con las vistas que nos interesen:

LibreNMS recién instalado

Tras añadir algunos dispositivos y algunas ventanas, podemos obtener una vista como la que sigue:

Lo dejamos aquí. La verdad es que la plataforma me está gustando bastante. Además es muy intuitiva y fácil de configurar. Seguramente escribiré más entradas, como por ejemplo añadir nuevos dispositivos o realizar un descubrimiento de la red. ¿Tenéis experiencia con LibreNMS? ¿Qué os ha parecido?

Fuentes consultadas:

Documentation LibreNMS – Installation in CentOS 7 Apache

Wikitech of Wikimedia – LibreNMS