Cómo instalar y configurar Nagios en Rocky Linux 9

Nagios es un popular y uno de los más potentes sistemas de monitorización de código abierto. Supervisa tu infraestructura informática y mantiene tus redes, servidores, aplicaciones y procesos funcionando sin problemas. Con un sistema de monitorización, puedes detectar problemas antes de que ocurran y solucionarlos rápidamente para ahorrar costes y tiempo de inactividad.

Este tutorial te enseña a instalar y configurar Nagios en un servidor Rocky Linux 9. También haremos alguna configuración básica e instalaremos el Ejecutor del Plugin Remoto de Nagios (NPRE), que nos permite monitorizar hosts remotos.

Requisitos previos

  1. Un servidor con Rocky Linux 9.
  2. Un usuario no usuario con privilegios de root.
  3. SELinux está desactivado. Para este tutorial, incluso si mantienes SELinux activado, funcionaría sin problemas. Pero dependiendo de los monitores Nagios que utilices, tendrás que configurar SELinux o será mejor que lo mantengas deshabilitado.
  4. Otro servidor que ejecute Rocky Linux 9 y que quieras monitorizar.
  5. Asegúrate de que todo está actualizado.
    $ sudo dnf update
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. El servidor Rocky Linux viene con el cortafuegos Firewalld.

Comprueba si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener la siguiente salida.

running

Comprueba los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

dhcpv6-client mdns ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

dhcpv6-client http https mdns ssh

Recarga el Cortafuegos.

$ sudo firewall-cmd --reload

Paso 2 – Instalar Apache y PHP

Para ejecutar Nagios, necesitarás Apache junto con PHP instalados.

Instala y habilita el servicio Apache.

$ sudo dnf install httpd
$ sudo systemctl enable httpd

Para instalar PHP, utilizaremos el Repositorio Remi. Instala Remi Repo y habilita PHP 8.1.

$ sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.1 -y

Instala PHP y varios módulos PHP comunes.

$ sudo dnf install -y php php-gd php-curl

Verifica la instalación de PHP.

$ php --version
PHP 8.1.16 (cli) (built: Feb 14 2023 18:59:41) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.16, Copyright (c), by Zend Technologies

Habilita PHP e inicia el servicio.

$ sudo systemctl enable --now php-fpm

Reinicia el servicio Apache para que el cambio surta efecto.

$ sudo systemctl restart httpd

Puedes comprobar la instalación de Apache y PHP creando un archivo info.php en el directorio /var/www/html creado por el instalador de Apache.

$ sudo nano /var/www/html/info.php

Pega el siguiente código en el editor.

<?php phpinfo();

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Abre la URL http://<yourserverip>/info.php en tu navegador y aparecerá la siguiente página.

Página de información PHP

Paso 3 – Instalar Nagios

La mayor parte de este tutorial requerirá que instales y trabajes en tu servidor principal.

Instalar dependencias

Este tutorial requerirá que Nagios y sus plugins estén construidos desde el código fuente. Por lo tanto, necesitas instalar primero algunas librerías de desarrollo. También necesitamos el repositorio EPEL, pero se instaló automáticamente con el repositorio Remi en el paso anterior, así que podemos omitirlo aquí.

$ sudo dnf install gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel unzip wget gettext autoconf net-snmp-utils postfix automake perl-Net-SNMP

Descarga Nagios

Descarga la última versión de la página de versiones de Nagios en GitHub. En el momento del tutorial, 4.4.10 es la última versión disponible. Modifica el comando en caso de que quieras una versión diferente.

$ cd ~
$ sudo wget -O nagios.tar.gz https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.4.10/nagios-4.4.10.tar.gz

Extrae el archivo tar.

$ sudo tar zxf nagios.tar.gz

Mueve el directorio extraído al directorio /usr/src.

sudo mv nagios-4.4.10 /usr/src/nagios

Cambia al directorio /usr/src/nagios.

$ cd /usr/src/nagios

Compilar Nagios

El siguiente paso es compilar Nagios a partir de sus archivos fuente. Ejecuta el script configure para realizar comprobaciones y asegurarte de que todas las dependencias están presentes.

$ sudo ./configure

Deberías obtener una salida similar tras la finalización satisfactoria del script.

*** Configuration summary for nagios 4.4.10 2023-01-17 ***:

 General Options:
 -------------------------
        Nagios executable:  nagios
        Nagios user/group:  nagios,nagios
       Command user/group:  nagios,nagios
             Event Broker:  yes
        Install ${prefix}:  /usr/local/nagios
    Install ${includedir}:  /usr/local/nagios/include/nagios
                Lock file:  /run/nagios.lock
   Check result directory:  /usr/local/nagios/var/spool/checkresults
           Init directory:  /lib/systemd/system
  Apache conf.d directory:  /etc/httpd/conf.d
             Mail program:  /usr/sbin/sendmail
                  Host OS:  linux-gnu
          IOBroker Method:  epoll

 Web Interface Options:
 ------------------------
                 HTML URL:  http://localhost/nagios/
                  CGI URL:  http://localhost/nagios/cgi-bin/
 Traceroute (used by WAP):  


Review the options above for accuracy.  If they look okay,
type 'make all' to compile the main program and CGIs.

Inicia la compilación.

$ sudo make all

Crear usuario y grupo de Nagios

Crea un nuevo usuario y grupo que ejecutará el proceso Nagios.

$ sudo make install-groups-users

Deberías ver la siguiente salida.

groupadd -r nagios
useradd -g nagios nagios

Añade el usuario apache al grupo nagios.

$ sudo usermod -a -G nagios apache

Instala los binarios de Nagios

Ejecuta el siguiente comando para instalar los binarios, CGIs y archivos HTML de Nagios.

$ sudo make install

Crear directorio de comandos externos

Nagios puede procesar comandos de aplicaciones externas y para ello necesita que se cree un directorio.

$ sudo make install-commandmode
/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/var/rw
chmod g+s /usr/local/nagios/var/rw

*** External command directory configured ***

Instalar los archivos de configuración de Nagios

Instala los archivos de configuración de ejemplo.

$ sudo make install-config

Instalar los archivos de configuración de Apache

Ejecuta el siguiente comando para instalar los archivos de configuración de Apache.

$ sudo make install-webconf

Reinicia el servidor web para activar la configuración.

$ sudo systemctl restart httpd

Crear un archivo de servicio Systemd

Ejecuta el siguiente comando para instalar un archivo de unidad systemd.

$ sudo make install-daemoninit

Activar la autenticación HTTP

Puedes bloquear la interfaz web de Nagios mediante autenticación HTTP. Ejecuta el siguiente comando para utilizar htpasswd para crear el usuario. Se te pedirá una contraseña.

$ sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin

El nombre por defecto para el usuario es nagiosadmin. Puedes utilizar otro nombre de usuario sustituyendo todas las instancias de nagiosadmin en el archivo /usr/local/nagios/etc/cgi.cfg por el nombre de usuario preferido. O puedes añadir el nombre de usuario utilizando una coma como se indica a continuación.

authorized_for_system_information=nagiosadmin, username1
authorized_for_configuration_information=nagiosadmin, username1
authorized_for_system_commands=nagiosadmin, username1
authorized_for_all_services=nagiosadmin, username1
authorized_for_all_hosts=nagiosadmin, username1
authorized_for_all_service_commands=nagiosadmin, username1
authorized_for_all_host_commands=nagiosadmin, username1

Puedes añadir usuarios con acceso de sólo lectura habilitando la siguiente configuración en el archivo eliminando la almohadilla (#) que aparece delante. A continuación, ejecuta el htpasswd con el nombre de usuario.

authorized_for_read_only=username2

Reinicia el servidor para que la configuración surta efecto.

$ sudo systemctl restart httpd

Paso 4 – Instalar los Plugins de Nagios

Instala los requisitos previos necesarios para los plugins de Nagios.

$ sudo dnf install epel-release
$ sudo dnf install -y gcc glibc glibc-common make gettext automake autoconf wget openssl-devel net-snmp net-snmp-utils postgresql-devel openldap-devel bind-utils samba-client fping openssh-clients lm_sensors perl-Net-SNMP

Descarga la última versión de la página GitHub de los plugins de Nagios. En el momento de realizar el tutorial, 2.4.3 es la última versión disponible. Modifica el comando en caso de que quieras una versión diferente.

$ cd ~
$ sudo wget -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.3/nagios-plugins-2.4.3.tar.gz

Extrae el archivo tar.

$ sudo tar zxf nagios-plugins.tar.gz

Mueve el directorio extraído al directorio /usr/src.

$ sudo mv nagios-plugins-2.4.3 /usr/src/nagios-plugins

Vuelve al directorio /usr/src/nagios-plugins.

$ cd /usr/src/nagios-plugins

Ejecuta los siguientes comandos para compilar e instalar los plugins.

$ sudo ./configure
$ sudo make
$ sudo make install

Paso 5 – Instalar el plugin check_nrpe

Descarga la última versión de la página de versiones de GitHub de NRPE. En el momento de escribir este tutorial, la última versión disponible es la 4.1.0. Modifica el siguiente comando en caso de que quieras una versión diferente.

$ cd ~
$ wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz

Extrae el archivo.

$ tar zxf nrpe-*.tar.gz

Mueve el directorio extraído al directorio /usr/src.

$ sudo mv nrpe-4.1.0 /usr/src/nrpe

Cambia al directorio /usr/src/nrpe.

$ cd /usr/src/nrpe

Configura e instala el plugin.

$ sudo ./configure
$ sudo make check_nrpe
$ sudo make install-plugin

Esto colocará el plugin check_nrpe en el directorio /usr/local/nagios/libexec/.

Paso 6 – Iniciar Nagios

Con Nagios y los plugins instalados, es hora de iniciar el servicio Nagios.

$ sudo systemctl start nagios

Comprueba el estado del servicio para ver si se está ejecutando correctamente.

$ sudo systemctl status nagios

Interfaz Web de Nagios

Abre la URL http://<domain_or_ip_address>/nagios en tu navegador. Deberías ver un mensaje de inicio de sesión.

Introduce las credenciales que creaste durante el método de autenticación HTTP y aparecerá la siguiente pantalla.

Página de Nagios

Paso 7 – Monitorización de hosts

Para monitorizar un host, necesitas instalar NRPE Daemon y los plugins de Nagios en el host. Monitorizaremos un servidor Rocky Linux 9 desde nuestro servidor Nagios.

Inicia sesión en tu host.

$ ssh user@monitored_server_ip

Instala los plugins de Nagios

Instala los plugins de Nagios repitiendo el paso 4 anterior.

Instala NRPE

Instala los requisitos previos necesarios para el demonio NRPE.

$ sudo dnf install -y gcc glibc glibc-common openssl openssl-devel perl wget

Descarga NRPE.

$ cd ~
$ wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz

Extrae el archivo.

$ tar zxf nrpe-*.tar.gz

Mueve el directorio extraído al directorio /usr/src.

$ sudo mv nrpe-4.1.0 /usr/src/nrpe

Cambia al directorio NRPE.

$ cd /usr/src/nrpe

Configura e instala NRPE.

$ sudo ./configure --enable-command-args
$ sudo make all

Crea el Usuario y el grupo.

$ sudo make install-groups-users

Instala los binarios NRPE, el demonio NRPE y el plugin check_npre.

$ sudo make install

Instala los archivos de configuración.

$ sudo make install-config

Actualiza el archivo de servicios. El archivo /etc/services se utiliza para traducir los nombres de los servicios a números de puerto.

$ sudo sh -c "echo >> /etc/services"
$ sudo sh -c "sudo echo '# Nagios services' >> /etc/services"
$ sudo sh -c "sudo echo 'nrpe    5666/tcp' >> /etc/services"

Instala el demonio de servicio NPRE.

$ sudo make install-init
$ sudo systemctl enable nrpe

Tienes que actualizar el archivo de configuración NPRE que se encuentra en /usr/local/nagios/etc/nrpe.cfg.

Abre el archivo para editarlo.

$ sudo nano /usr/local/nagios/etc/nrpe.cfg

Por defecto, NPRE sólo escucha peticiones del Localhost (127.0.0.1). Debes añadir al archivo la dirección IP de tu servidor Nagios.

allowed_hosts=127.0.0.1,10.25.5.2

La siguiente opción determina si el demonio NPRE permitirá o no a los clientes especificar argumentos de comando. Permite la opción introduciendo el valor como 1, que habilita las configuraciones avanzadas de NPRE.

dont_blame_nrpe=1

A continuación, al desplazarte hacia abajo, encontrarás una lista de comandos NRPE con sus definiciones. Todos ellos están comentados. Tienes que descomentarlos para que Nagios pueda utilizarlos.

A cada comando se le pueden pasar argumentos. Algunos de los comandos tienen argumentos codificados, mientras que otros pueden aceptar argumentos del usuario. Cada comando puede tener las siguientes opciones de notificación.

  • W significa estados de servicio Advertencia
  • C significa estados de servicio Críticos
  • R significa Notificar al recuperarse el servicio (estados OK)

Así, puedes especificar a qué nivel qué tipo de notificación puede enviar un comando. No entraremos en la descripción detallada y la función de cada uno de los comandos, ya que están fuera del alcance de este tutorial.

# The following examples use hardcoded command arguments...
# This is by far the most secure method of using NRPE

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for
# command arguments *AND* the dont_blame_nrpe directive in this
# config file is set to '1'.  This poses a potential security risk, so
# make sure you read the SECURITY file before doing this.

### MISC SYSTEM METRICS ###
command[check_users]=/usr/local/nagios/libexec/check_users $ARG1$
command[check_load]=/usr/local/nagios/libexec/check_load $ARG1$
command[check_disk]=/usr/local/nagios/libexec/check_disk $ARG1$
command[check_swap]=/usr/local/nagios/libexec/check_swap $ARG1$
command[check_cpu_stats]=/usr/local/nagios/libexec/check_cpu_stats.sh $ARG1$
command[check_mem]=/usr/local/nagios/libexec/custom_check_mem -n $ARG1$

### GENERIC SERVICES ###
command[check_init_service]=sudo /usr/local/nagios/libexec/check_init_service $ARG1$
command[check_services]=/usr/local/nagios/libexec/check_services -p $ARG1$

### SYSTEM UPDATES ###
command[check_yum]=/usr/local/nagios/libexec/check_yum
#command[check_apt]=/usr/local/nagios/libexec/check_apt

### PROCESSES ###
command[check_all_procs]=/usr/local/nagios/libexec/custom_check_procs
command[check_procs]=/usr/local/nagios/libexec/check_procs $ARG1$

### OPEN FILES ###
command[check_open_files]=/usr/local/nagios/libexec/check_open_files.pl $ARG1$

### NETWORK CONNECTIONS ###
command[check_netstat]=/usr/local/nagios/libexec/check_netstat.pl -p $ARG1$ $ARG2$

Descomenta los comandos anteriores eliminando el símbolo # que aparece delante de ellos. Puedes descomentar tantos comandos como necesites.

Añade el siguiente comando para comprobar el espacio del disco raíz.

command[check_root]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Permite el puerto 5666 que utiliza el plugin NPRE.

$ sudo firewall-cmd --permanent --add-port=5666/tcp

Recarga el cortafuegos.

$ sudo firewall-cmd --reload

Inicia NPRE.

$ sudo systemctl start nrpe

Todos los comandos a partir de aquí se ejecutarán en el servidor Nagios principal, a menos que se especifique lo contrario.

Comprueba si NRPE funciona ejecutando el siguiente comando en tu servidor Nagios principal.

$ /usr/local/nagios/libexec/check_nrpe -H monitored_server_ip

Deberías ver la siguiente salida.

NRPE v4.1.0

Para supervisar los hosts, tendrás que crear archivos de configuración para cada host que quieras supervisar. Estos hosts serán accesibles a través de la interfaz web de Nagios.

Crea el directorio para almacenar los archivos de configuración y dale los permisos adecuados.

$ sudo mkdir /usr/local/nagios/etc/servers
$ sudo chown -R nagios:nagios /usr/local/nagios/etc/servers
$ sudo chmod g+w /usr/local/nagios/etc/servers

Abre el archivo de configuración de Nagios /usr/local/nagios/etc/nagios.cfg para editarlo.

$ sudo nano /usr/local/nagios/etc/nagios.cfg

Busca el siguiente archivo y descoméntalo eliminando el # que aparece delante.

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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

El siguiente paso es añadir el comando check_nrpe al archivo /usr/local/nagios/etc/objects/commands.cfg para que se pueda utilizar para monitorizar hosts.

Abre el archivo /usr/local/nagios/etc/objects/commands.cfg para editarlo.

$ sudo nano /usr/local/nagios/etc/objects/commands.cfg

Pega el siguiente código al final del archivo.

define command {
    command_name   check_nrpe
    command_line   $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ $ARG2$
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea un nuevo archivo de configuración para el host remoto en el directorio /usr/local/nagios/etc/servers/.

$ sudo nano /usr/local/nagios/etc/servers/yourhost.cfg

Añade el siguiente código sustituyendo el valor host_name por el nombre de tu host remoto, el valor alias por la descripción de tu host y el valor address por la dirección IP de tu host remoto.

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

Con esta configuración, Nagios te avisará cuando el host esté activo o inactivo. Necesitarás añadir más servicios para monitorizar cosas adicionales.

Añade el siguiente bloque para comprobar las estadísticas de conexión del host.

define service {
      use                             generic-service
      host_name                       monitored_server_host_name
      service_description             PING
      check_command                   check_ping!200.0,20%!400.0,90%
}

Añade el siguiente bloque para monitorizar la media de carga de tu servidor.

define service {
        use                             generic-service
        host_name                       monitored_server_host_name
        service_description             Load average
        check_command                   check_nrpe!check_load!-a '-w 0.7,0.6,0.5 -c 0.9,0.8,0.7'
}

La directiva use generic-service indica a Nagios que herede de una plantilla llamada generic-service predefinida por Nagios.

A continuación, añade un bloque para monitorizar el uso del disco. Modifica el comando con las etiquetas de disco adecuadas.

define service {
        use                             generic-service
        host_name                       monitored_server_host_name
        service_description             /dev/vda1 free space
        check_command                   check_nrpe!check_disk!-a '-w 20% -c 10% -p /dev/vda1'
}

Monitoriza SSH utilizando el siguiente bloque. El siguiente bloque comprobará el servidor SSH y genera una alerta si el servidor no responde en 5 segundos.

define service {
    use                                 generic-service
    host_name                           monitored_server_host_name
    service_description                 SSH Version Check
    check_command                       check_ssh!-t 5
}

Comprobemos el número total de procesos en ejecución.

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			Total Processes            
    check_command           			check_nrpe!check_total_procs
}

Comprobemos los usuarios conectados actualmente.

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			Current Users            
    check_command           			check_nrpe!check_users!-a '-w 5 -c 10'
}

Comprueba el uso del disco SWAP.

define service{                     
    use                     			generic-service            
    host_name               			monitored_server_host_name            
    service_description     			SWAP Usage            
    check_command           			check_nrpe!check_swap!-a '-w 40% -c 20%'
}

Comprueba la partición raíz y su uso de disco.

define service{
    use                                  generic-service
    host_name                            nagiosclient
    service_description                  Root / Partition
    check_command                        check_nrpe!check_disk!-a '-w 20% -c 10% -p /'
}

Comprueba si hay instalado un servidor HTTP.

define service {
    use                                  generic-service
    host_name                            nagiosclient
    service_description                  HTTP
    check_command                        check_http
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia Nagios.

$ sudo systemctl restart nagios

Comprobar los monitores

Abre tu panel de control de Nagios y haz clic en la opción Hosts de la barra lateral izquierda. Deberías ver el host recién configurado junto con localhost en la página.

Monitorización de host Nagios

Haz clic en el host recién configurado(nagiosclient) y si todo está configurado correctamente, deberías ver su estado. El estado tardará aproximadamente un minuto en aparecer.

Monitorización de Servicios de Host Nagios

Para ver los servicios o los monitores que hemos configurado, haz clic en la opción Ver detalle del estado de este host y deberías ser recibido por la siguiente página.

El servicio Nagios monitoriza el estado

Esto debería darte una idea adecuada de cómo están funcionando tus hosts.

Paso 8 – Instalar Nginx

Puedes ejecutar Nagios directamente a través de la IP del servidor o hacer que lo aloje en tu nombre de dominio. Nagios ya incluye archivos de configuración de Apache, pero nosotros utilizaremos Nginx para ejecutarlo. Utilizaremos Nginx como proxy inverso frente al servidor web Apache.

Apache ya lo está ejecutando en el puerto 80. Por lo tanto, primero tenemos que cambiarlo. Y entonces, podremos ejecutar Nginx como proxy.

Abre el archivo /etc/httpd/conf/httpd.conf para editarlo.

$ sudo nano /etc/httpd/conf/httpd.conf

Cambia la línea Listen 80 por Listen 8080. Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Como utilizaremos el nombre de dominio para acceder a Nagios, no necesitamos abrir el puerto 8080 para el acceso público.

Reinicia el servidor Apache.

$ sudo systemctl restart httpd

A continuación, instala Nginx.

Rocky Linux 9 viene con una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.

Crea y abre el archivo /etc/yum.repos.d/nginx.repo para crear el repositorio oficial de Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega en él el siguiente código.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala el servidor Nginx.

$ sudo dnf install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.1

Habilita e inicia el servidor Nginx.

$ sudo systemctl enable nginx --now

Paso 9 – Instalar y configurar SSL

Antes de configurar Nginx, instalaremos y configuraremos un certificado SSL para el dominio que vamos a utilizar con Nagios. En nuestro caso, utilizaremos http://nagios.example.com.

Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador de Snapd. Requiere el repositorio EPEL para funcionar, que ya hemos instalado antes, así que podemos omitirlo.

Instala Snapd.

$ sudo dnf install -y snapd

Activa e inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Ejecuta el siguiente comando para instalar Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica la instalación.

$ certbot --version
certbot 2.3.0

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d nagios.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/nagios.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 10 – Configurar Nginx

Antes de configurar Nginx, hay otro cambio que debemos hacer. Por defecto, Apache sirve Nagios a través de http://<serverIP>:8080/nagios. Ahora, podemos configurar un proxy directamente sobre Nagios, pero se servirá a través de https://nagios.example.com/nagios. Podemos hacer una redirección en Nginx a la URL raíz, lo que complica las cosas. Por eso, haremos un cambio en Apache y Nagios directamente.

Primero, abre el archivo /usr/local/nagios/etc/cgi.cfg para editarlo.

$ sudo nano /usr/local/nagios/etc/cgi.cfg

Cambia url_html_path=/nagios por url_html_path=/.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

A continuación, abre /etc/httpd/conf.d/nagios.conf para editarlo.

$ sudo nano /etc/httpd/conf.d/nagios.conf

Cambia ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin" por ScriptAlias /cgi-bin "/usr/local/nagios/sbin".

Comenta la línea Alias /nagios "/usr/local/nagios/share" cambiándola por lo siguiente.

#Alias /nagios "/usr/local/nagios/share" 

Añade la siguiente línea debajo.

DocumentRoot /usr/local/nagios/share

Añade la siguiente línea al principio del archivo.

<VirtualHost *:8080>

Añade la siguiente línea al final del archivo.

</VirtualHost>

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Y por último, abre el archivo /usr/local/nagios/share/config.inc.php para editarlo.

$ sudo nano /usr/local/nagios/share/config.inc.php

Cambia $cfg['cgi_base_url']='/nagios/cgi-bin'; por $cfg['cgi_base_url']='/cgi-bin';.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia tanto Apache como Nagios.

$ sudo systemctl restart httpd
$ sudo systemctl restart nagios

Para confirmar que todo funciona correctamente, abre la URL http://<serverIP>:1080 en tu navegador y deberías ver que Nagios funciona correctamente. Asegúrate también de que se reciben los datos de los Hosts.

Una vez que todo funcione, podemos proceder a crear nuestro archivo de configuración para Nginx.

Crea un archivo de configuración para Nagios en el directorio /etc/nginx/conf.d.

$ sudo nano /etc/nginx/conf.d/nagios.conf

Pega en él el siguiente código.

server {
    	listen 80; listen [::]:80;
	    server_name nagios.example.com;
    	return 301 https://$host$request_uri;
}

server {
        server_name nagios.example.com;

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        access_log /var/log/nginx/nagios.access.log;
        error_log /var/log/nginx/nagios.error.log;

        ssl_certificate /etc/letsencrypt/live/nagios.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nagios.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/nagios.example.com/chain.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
 
	   location / {
	       proxy_pass http://127.0.0.1:8080;
	       proxy_set_header Host $host;
	       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	       proxy_set_header X-Real-IP $remote_addr;
	       proxy_set_header X-Forwarded-Proto $scheme;
	   }
}

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Valida el archivo de configuración.

$ sudo nginx -t

Si obtienes el siguiente error, tendrás que editar el archivo /etc/nginx/nginx.conf para añadir/ajustar el tamaño de la variable server_names_hash_bucket_size.

nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de

server_names_hash_bucket_size  64;

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Vuelve a validar Nginx.

Si no ves ningún problema, reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Configurar SELinux

Si has mantenido SELinux activado, ejecuta el siguiente comando para permitir que Nginx se conecte a la red.

$ sudo setsebool -P httpd_can_network_connect on

Inicia el dominio https://nagios.example.com en tu navegador, y deberías ser recibido con la página de inicio de Nagios.

Conclusión

Has instalado y configurado Nagios en un servidor Rocky Linux 9 para supervisar varios servicios como la carga, el uso de disco/swap, los usuarios, el total de procesos, HTTP y SSH. Con esto concluye nuestro tutorial. Para saber más, deberías consultar la documentación oficial de Nagios, que cubre la monitorización y varios comandos con gran detalle. Si tienes alguna pregunta, publícala en los comentarios a continuación.

Scroll al inicio