viernes, 24 de febrero de 2017

Monitorización de nuestros sistemas: Anticipando los ataques


Nuestros servicios, sistemas o dispositivos en general son víctimas de ataques que pasan desapercibidos a simple vista.




Los sistemas de monitorización nos pueden ayudar a prevenir y anticiparnos a los diversos problemas a los que pueden estar expuestos nuestros servicios, y ya no solo a nivel de la seguridad de los mismos.


Les propongo montar una solución de monitorización muy robusta y escalable basada en soluciones Open Source que nos van a ayudar por ejemplo a saber cuando un servidor web esta sufriendo algún tipo de escaneo, de tal forma que podamos anticiparnos y prevenir males mayores.




El scaneo o DoS contra nuestros servicios dejan rápidamente un rastro en tiempo real en nuestras máquinas debido a un incremento inmediato de recursos (cpu y memoria principalmente).

La idea es poder conocer en tiempo real, por ejemplo haciendo que nuestro sistema de monitorización nos envíe  un e-mail en el momento que uno de nuestros servicios experimente un incremento inusual de su CPU o memoria.


Para ello vamos a montar una solución basada en la integración de diferentes aplicaciones de software libre: Nagios, check-mk, NagVis y pnp4, aunque el núcleo o core del sistema se basa en la aplicación Nagios y el paquete Check-mk.



¿Qué es Nagios?


Nagios a grandes rasgos es una solución de monitorización open source que permite la monitorización de máquinas  y servicios, y notificar los cambios de estado que se producen en ellos.




Se compone de un  núcleo desarrollado en C y de plugins y addons que son llamados por el núcleo bajo demanda.

Los plugins son independientes del núcleo por lo que pueden estar desarrollados en múltiples lenguajes.


Integración de soluciones


Existen variedad de soluciones de monitorización, incluso distribuciones como OMD la cual  integra gran cantidad de servicios específicos para la monitorización de sistemas.


Nuestra idea es construir algo a nuestro gusto y medida, y totalmente controlado por nosotros.

Lo que haremos será integrar un conjunto de soluciones para disponer de una plataforma de monitorización robusta, escalable, con un entorno gráfico para la administración y gestión, que nos permita generar alertas y notificaciones bajo las circunstancias que definamos y además nos dé la posibilidad de obtener informes y reportes.

Vamos a utilizar los paquetes:

  • Nagios Core.
  • Nagios-plugins.
  • Exim.
  • Apache.
  • Check-mk – Livestatus.
  • Pnp4png.
  • rrdtool.
  • Nagvis.

Apoyándonos en el software Nagios como el core de nuestra plataforma,  vamos a integrar Nagios con Check-mk.


Check-mk aporta un mayor rendimiento a la solución, automatización de la monitorización mediante agentes, sencillez para la administración y la integración bajo un mismo entorno gráfico de todas las aplicaciones que vamos a instalar.


Modo de operación



  • Por cada host, Nagios realiza un check llamando a “check-mk” como si de un plugin cualquier se tratase.
  • Check-mk conecta con un agente en el Host destino recogiendo en una sola vez todos los datos significativos.
  • Check_mk carga la información de rendimiento en una BD rrd.
  • Check_mk extrae los datos significativos comparándolos contra los niveles de Warning/Critical y los envía a Nagios mediante un check pasivo.
  • Utilizaremos NagVis para la creación de mapas mediante los datos cargados en Nagios.
  • Utilizaremos pnp4 para recoger la información de RRD y mostrarla en formato gráfico.
  • Mediante check_msite integramos en una interfaz Web el acceso a todas las herramientas.
  • El paquete check-mk incluye una herramienta llamada WATO, básicamente es un Interfaz Web para la creación sencilla de Host y Servicios y configuración de parámetros adicionales.


Fuente: https://mathias-kettner.de


Instalación y configuración de la plataforma


En este apartado vamos a describir todos los comandos necesarios para poner en marcha la plataforma.

En cualquier caso es importante que reviséis las ultimas versiones estables en los sitios oficiales.
  • sudo aptitude install apache2  libapache2-mod-php5 build-essential libgd2-xpm-dev php5-gd php5-gettext php5-mbstring mbstring php5-xmlrpc php5-sockets php-net-socket graphviz php5-sqlite libsnmp-perl libapache2-mod-python
  • useradd -m -s /bin/bash nagios

tar zxvf  nagios-3.2.3.tar.gz

tar zxvf  nagios-plugins-1.4.15.tar.gz

cd nagios-3.2.3/

./configure --with-command-group=nagcmd

make all

make install
make install-init
make install-config
make install-commandmode

make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users miusuario

/etc/init.d/apache2 reload

cd nagios-plugins-1.4.15/

./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
make
make install


  • Configurar Nagios para arrancar al iniciar el sistema
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios


  •  Arrancar nagios
/etc/init.d/nagios start


  •  Probar a acceder via web

http://192.168.1.1/nagios



  • Descargar otros paquetes adicionales
wget http://downloads.sourceforge.net/project/snmptt/snmptt/snmptt_1.3/snmptt_1.3.tgz 


  •  Paquete check-mk
wget http://mathias-kettner.de/download/check_mk-1.1.10p3.tar.gz      


  • Paquete Nagvis (mapas de red)
wget http://sourceforge.net/projects/nagvis/files/NagVis%201.5/nagvis-1.5.9.tar.gz


  • Paquete pnp4nagios (integración de gráficas de servicio)
wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.15.tar.gz


Integración pnp4 con Nagios



  • Instalar xinetd
 sudo aptitude install xinetd


  • Instalar rrdtool
sudo aptitude install librrds-perl rrdtool


  • Instalar pnp
Seguimos http://docs.pnp4nagios.org/es/pnp-0.6/install


  • Descomprimir
 tar xzvf pnp4nagios-0.6.15.tar.gz

cd pnp4nagios-0.6.15

./configure
make all
make install
make install-config
make install-init
make fullinstall
make install-webconf


  • Habilitamos en apache el modulo rewrite
a2enmod rewrite

  • Reiniciamos apache
/etc/init.d/apache2 reload

  • Editamos el archivo de configuración Nagios para activar el demonio pnp4nagios

  • vi /usr/local/nagios/etc/nagios.cfg

Localizamos las líneas:


    #broker_module=/somewhere/module1.o

    #broker_module=/somewhere/module2.o arg1 arg2=3 debug=0

Añadimos justo debajo:
broker_module=/usr/local/pnp4nagios/lib/npcdmod.o config_file=/usr/local/pnp4nagios/etc/npcd.cfg
process_performance_data=1

Habilitar los comandos que procesan los datos:


host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata

Guardamos y salimos.


Comprobamos que existe el archivo: /usr/local/pnp4nagios/etc/npcd.cfg

Configuración de PNP4Nagios en español:

    Editamos el fichero: /usr/local/pnp4nagios/etc/config.php
    Localizamos estos valores y configuramos:
    $conf['popup-width'] = "500px";
    $conf['lang'] = "es_ES";

A continuación, debemos modificar el archivo de plantillas de nagios:

/usr/local/nagios/etc/objects/templates.cfg


Para añadir en la sección de HOSTS


define host {

   name       host-pnp
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_
   register   0
}

Y en SERVICES


define service {

   name       srv-pnp
   action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
   register   0
}

En /usr/local/nagios/etc/objects/localhost.cfg


Añadiremos el uso de la plantilla que hemos configurado:

define host{

        use                     linux-server,host-pnp

Al igual que en todos los servicios añadiremos el añadido de srv-pnp:

define service{

        use                             local-service,srv-pnp         ; Name of service template to use
        host_name                       localhost
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }

Comprobamos que pnp4nagios se ha instalado correctamente:


http://192.168.1.1/pnp4nagios/


Si todo esta verde borrarmos el fichero:

rm /usr/local/pnp4nagios/share/install.php

Habilitar pop-up, copiamos el archivo status-header.ssi :


cp /usr/local/src/pnp4nagios-0.6.15/contrib/ssi/status-header.ssi /usr/local/nagios/share/ssi/


El servicio tiene que estar arrancado:

/etc/init.d/
/etc/init.d/npcd start

El archivo de configuración esta: /usr/local/pnp4nagios/etc/npcd.cfg



Integración Nagios con Check_mk


cd check_mk-1.1.8

./setup.sh


  • Todo por defecto.
  • Reiniciar nagios y apache.
Installation completed successfully.
Please restart Nagios and Apache in order to update/active check_mk's web pages.

You can access the new Multisite GUI at http://localhost/check_mk/



Integración con Nagvis 



La herramienta Nagvis nos va a permitir crear mapas y sobre ellos poder visionar los servicios/dispositivos que estamos monitorizando, podríamos llegar a construir un bonito cuadro de mando.

tar xzvf nagvis-1.5.9.tar.gz

chmod +x install.sh

./install.sh


Seleccionamos usar mklivestatus


Installation complete                                                        |

|                                                                              |
| You can safely remove this source directory.                                 |
|                                                                              |
| For later update/upgrade you may use this command to have a faster update:   |
| ./install.sh -n /usr/local/nagios -p /usr/local/nagvis -B /usr/local/nagios/bin/nagios -l "unix:/usr/local/nagios/var/rw/live" -b mklivestatus -u www-data -g www-data -w /etc/apache2/conf.d -a y
|                                                                              |
| What to do next?                                                             |
| - Read the documentation                                                     |
| - Maybe you want to edit the main configuration file?                        |
|   Its location is: /usr/local/nagvis/etc/nagvis.ini.php                      |
| - Configure NagVis via browser                                               |
|   <http://localhost/nagvis/config.php>                                       |
| - Initial admin credentials:                                                 |
|     Username: miusuario                                                    |
|     Password: mipassword              


  • /etc/init.d/apache2 restart
  • /etc/init.d/nagios restart
  • Comprobamos: http://192.168.1.1/nagvis/

Plugins basados en SNMP



Nagios es una plataforma modular y junto con check-mk que dispone de inventariado automático snmp, es importante descargar a la plataforma Nagios las diferetnes MIBs, para ello:

sudo aptitude install snmp-mibs-downloader



Envío de notificaciones


Para el correcto envío de notificaciones la plataforma se apoya en un servidor de correo.


Instalamos exim4 por su facilidad de configuración, restringido al envio desde localhost.


apt-get install mailutils exim4




Instalación de agentes



El paquete check-mk dispone de agentes para plataformas Linux y Windows que pueden ser instalados en los equipos finales para la recolección de información.

Los agentes se encuentran en: /usr/share/check_mk/agents

Agentes para Linux

PASO 1: Instalación agente linux


Para instalarlo en un servidor destino Linux:


scp /usr/share/check_mk/agents/check_mk_agent.linux SERVIDOR-DESTINO-A-MONITORIZAR:/usr/bin/check_mk_agent

PASO 2:Instalación y configuración xinetd


Instalamos xinetd:
- apt-get update
- apt-get install xinetd

Configuramos xinetd para el agente:

Desde nuestra plataforma de monitorización por ejemplo aguila1.usj.es ejecutamos:


scp /usr/share/check_mk/agents/xinetd.conf HOST-DESTINO:/etc/xinetd.d/check_mk


En el HOST destino ejecutamos:
root@/etc/xinetd.d# /etc/init.d/xinetd restart
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
chkconfig xinetd on

Y esto es todo, a divertirse porque la solución no tiene limites imaginables.

No hay comentarios:

Publicar un comentario