Despliegue del servidor de logs de Nagios

En mi entorno virtual ya había desplegado un servidor de logs, sin embargo, el servidor rsyslog no tiene capacidades analíticas, simplemente recolecta los logs y punto. Navegando por la web de Nagios veo el producto que tienen para gestionar logs y me decido a probarlo. Hay una versión free para volúmenes pequeños de datos y procedo, a descargarla.

La primera alegría que me llevo es que existe una distribución, en forma de plantilla OVF, que permite desplegar la máquina virtual, de forma inmediata, en mi entorno lab. Profundizando un poco, veo que se trata de un CentOS versión 6 con el producto pre-configurado.

Una vez descargada la plantilla de máquina virtual me pongo a importarla en el entorno:

nagiosls1

nagiosls2

Antes de arrancarla voy a configurar dos interfaces de red en el servidor:

  • Una interfaz conectada a la DMZ para tener acceso a la interfaz web desde el PC de casa.
  • La otra interfaz de red voy a conectarla a la red de gestión.

Por último, voy a utilizar mi servidor de logs actual para concentrar todos los logs y como fuente de logs para Nagios Log Server.

nagiosls8

nagiosls9

Una vez ajustada la configuración, arranco la máquina virtual:

nagiosls3

Me conecto a la máquina para realizar las configuraciones finales:

  • En primer lugar, cambio la password por defecto que aparece en el banner de la consola.
  • Me doy cuenta que el teclado está en inglés, así que voy a cambiar la configuración editando el fichero: /etc/sysconfig/keyboard. Para que la configuración tenga efecto es necesario reiniciar la máquina.
  • El siguiente paso es cambiar el nombre del host. Para ello se edita el fichero /etc/sysconfig/network. El nuevo nombre de host es cenagls.
  • Es necesario configurar los parámetros de red. Para ello, empezamos con el fichero /etc/resolv.conf configurando el servidor de DNS del entorno y el dominio.
  • Configuro, a continuación, las interfaces de red:

nagiosls10

La interfaz eth0 es la que está conectada a la red de gestión y la interfaz eth1 es la que está conectada a la DMZ. Edito los ficheros de configuración correspondientes que se encuentran en /etc/sysconfig/network-scripts/

nagiosls11

nagiosls12

  • Reiniciamos el servicio de red y comprobamos que todo funciona mediante unos cuantos ping:

nagiosls13

  • Finalmente, creamos las entradas necesarias en la base de datos del servidor DNS para el nuevo servidor.

Con esto finalizamos la primera parte del proceso de configuración el servidor de log de Nagios. Para continuar la configuración, nos conectamos, desde el navegador del PC a la URL del servidor de logs de Nagios:

nagiosls14

Completo el formulario y pulso el botón de finalizar instalación:

nagiosls15

Entro en el menú de Administración y escojo la opción de actualizar licencia:

nagiosls16

Escojo la opción de licencia limitada y gratuita que, de acuerdo a la información de la web de Nagios, me permite almacenar hasta 500MB diarios de logs:

nagiosls17

Lo que queda por hacer es configurar las fuentes de logs y comprobar que éstos se reciben y procesan en la herramienta.

nagiosls18

En la infraestructura desplegada tengo un pequeño problema y es que el router VyOS no es capaz de enviar logs al puerto que, por defecto, utiliza Nagios log server (5544). Por lo tanto, tengo que configurar Nagios log server para que escuche en el puerto estándar de syslog (el 514) esto requiere un poco de trabajo.

En primer lugar, lo que necesito es cambiar el usuario bajo el que el servicio Nagios LS se ejecuta ya que para poder abrir los puertos privilegiados (por debajo de 1024) es necesario tener permisos de root. Para esto, edito el fichero /etc/sysconfig/logstash para cambiar el usuario a root:

nagiosls19

Ahora, a través de la interfaz web, configuramos la escucha en el puerto 514. Copiamos la entrada de configuración de Syslog y cambiamos el puerto de escucha al 514:

nagiosls20

Salvamos y aplicamos la nueva configuración y comprobamos que funciona:

nagiosls21

Voy a lanzar un par de logins fallidos en el router VyOS para ver que los mensajes se recogen en el log:

nagiosls22

Un servidor para logs

Los logs proporcionan información sobre el estado del sistema, centralizando los logs en único servidor me va a permitir tener un punto de supervisión único del estado de salud de mi lab.

El estándar para la recogida de logs es syslog y, por lo tanto, lo que voy a hacer es configurar un servidor Ubuntu, conectado a la red de gestión para la recolección de logs mediante el protocolo syslog. Inicialmente voy a dotar al servidor de 1GB de RAM y 10GB de disco.

El primer paso es, por lo tanto, crear la máquina virtual:

syslog1

Lo que quiero conseguir es que el directorio /var/log aparezca un fichero de log para cada uno de los servidores con la dirección IP del servidor. El servicio syslog está implementado a través del programa rsyslog y su fichero de configuración es, naturalmente, rsyslog.conf. Edito, por lo tanto este fichero:

add@ubsyslog:~$ sudo vi /etc/rsyslog.conf

syslog2

Para centralizar los logs en el servidor vamos a permitir que el servidor de logs escuche en los puertos TCP y UDP estándar. Para ello eliminamos los comentarios (borramos el ‘#’ al comienzo de la línea) de las líneas del fichero de configuración que configuran los puertos de escucha y que son las siguientes:

#$ModLoad imudp
#$UDPServerRun 514
#$ModLoad imtcp
#$InputTCPServerRun 514

El siguiente paso es definir una plantilla para los ficheros de log a los que se van a dirigir los logs recibidos en el servidor. Como ya comenté, la idea es que los ficheros de log de cada servidor se identifiquen por la dirección IP del servidor.

Para conseguir esto, añadimos las siguientes líneas al fichero de configuración antes de la sección de directivas globales.

$template ServerLogs,"/var/log/%FROMHOST-IP%/%PROGRAMNAME%.log"
*.*  ?ServerLogs
& ~

Como las cosas en Linux no son siempre intuitivas voy a explicar un poco que es lo que significa cada una de las líneas:

  • La primera línea le dice a rsyslog que la plantilla, de nombre ‘ServerLogs’, escribe en ficheros de log en subdirectorios, cuyo nombre es la dirección IP del equipo bajo el directorio /var/log. El nombre de esos ficheros de log es el nombre del programa que genera el mensaje y la extensión ‘.log’.
  • La segunda línea le dice a rsyslog que aplique la plantilla ServerLogs a todos los mensajes de log recibidos (de ahí el *.*).
  • Por último, la tercera línea, es una regla de redirección que le dice a rsyslog que una vez procesados los mensajes por la regla ServerLogs detenga el proceso posterior de los mensajes. Sin esta regla los mensajes se recogerían dos veces.

El fichero de configuración quedaría:

syslog3

Por último, reiniciamos el servicio rsyslog y comprobamos que el servicio escucha en los puertos correspondientes mediante el comando netstat:

add@ubsyslog:~$ sudo service rsyslog restart
add@ubsyslog:~$ sudo netstat -tulpn | grep rsyslog

El comando produce una salida como:

syslog4

Ahora vamos a configurar los clientes de syslog, en este caso, el router VyOS para que envíe la información de log para todas las facilities de nivel notice o superior a nuestro servidor syslog.

syslog5

En el servidor syslog vemos que se han creado directorios con la dirección IP de localhost y del router y que éstos contienen los ficheros de log.

syslog6

syslog7

Caso cerrado, por ahora. El siguiente paso va a ser el configurar un Nagios para la gestión de los equipos en la red.