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:
yum install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install composer cronie fping git httpd ImageMagick jwhois
yum -y install mariadb mariadb-server mtr MySQL-python net-snmp net-snmp-utils
yum -y install nmap php72w php72w-cli php72w-common php72w-curl php72w-gd
yum -y install php72w-mbstring php72w-mysqlnd php72w-process php72w-snmp
yum -y install php72w-xml php72w-zip python-memcached rrdtool zip unzip
Añadimos el usuario ‘librenms’ al sistema
useradd librenms -d /opt/librenms -M -r
usermod -a -G librenms apache
Instalamos LibreNMS
cd /opt
composer create-project --no-dev --keep-vcs librenms/librenms librenms dev-master
Configuración de la base de datos
Configuramos MySQL/MariaDB
systemctl enable mariadb
systemctl start mariadb
Aseguramos la base de datos:
mysql_secure_installation
Accedemos a la base de datos y añadimos la base de datos:
CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
Exit
Añadimos al fichero de configuración ubicado en “/etc/my.cnf”, dentro de la sección [mysqld]
innodb_file_per_table=1
lower_case_table_names=0
Reiniciamos el motor de la base de datos
systemctl restart mariadb
Configuración del servidor web
Configuramos la zona horaria según nuestra ubicación, editando el fichero “/etc/php.ini”
vi /etc/php.ini
En mi caso:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Madrid
Configuramos el “virtual host” para Apache
vi /etc/httpd/conf.d/librenms.conf
Con esta configuración:
<VirtualHost *:80>
DocumentRoot /opt/librenms/html/
ServerName librenms.example.com
AllowEncodedSlashes NoDecode
<Directory "/opt/librenms/html/">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
</VirtualHost>
Siempre es recomendable eliminar la página de bienvenida por defecto de Apache:
rm -f /etc/httpd/conf.d/welcome.conf
Habilitamos el servidor al arranque y lo encendemos
systemctl enable httpd
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:
yum install policycoreutils-python
Para que funcione LibreNMS, debemos configurar el contexto:
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/logs(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/logs(/.*)?'
restorecon -RFvv /opt/librenms/logs/
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/rrd(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/rrd(/.*)?'
restorecon -RFvv /opt/librenms/rrd/
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/storage(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/storage(/.*)?'
restorecon -RFvv /opt/librenms/storage/
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/bootstrap/cache(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/bootstrap/cache(/.*)?'
restorecon -RFvv /opt/librenms/bootstrap/cache/
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.
module http_fping 1.0;
require {
type httpd_t;
class capability net_raw;
class rawip_socket { getopt create setopt write read };
}
#============= httpd_t ==============
allow httpd_t self:capability net_raw;
allow httpd_t self:rawip_socket { getopt create setopt write read };
Una vez guardado el fichero. Ejecutamos los siguientes comandos:
checkmodule -M -m -o http_fping.mod http_fping.tt
semodule_package -o http_fping.pp -m http_fping.mod
semodule -i http_fping.pp
El resultado tras ejecutar los comandos en la máquina virtual que estoy utilizando:
Habilitar acceso en el cortafuegos:
firewall-cmd --zone public --add-service http
firewall-cmd --permanent --zone public --add-service http
firewall-cmd --zone public --add-service https
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.
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.backup
cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
vi /etc/snmp/snmpd.conf
Editamos el texto que pone “RANDOMSTRINGGOESHERE” y añadimos la comunidad que a nosotros nos parezca.
curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro
systemctl enable snmpd
systemctl restart snmpd
Creación de tarea programada (Cron job)
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:
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:
Importamos la base de datos:
Añadimos un usuario administrador, sus credenciales y una dirección de correo:
Una vez finalizada la instalación veremos la siguiente pantalla:
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.
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:
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: