Instalando el servidor de Base de Datos

Para ir completando el lab, voy a instalar un servidor de Base de Datos MySQL. En concreto, voy a instalar la versión 5.7 de la Community Edition. La máquina virtual sobre la que voy a instalarlo va a ser la más potente del entorno: 2 procesadores virtuales, 4 GB de RAM, en cuanto al disco, voy a configurar dos discos, uno de 25 GB para sistema operativo y swap y otro de 200 GB de datos. El sistema va a estar conectado a la red de backend.

La primera tarea que hay que hacer es configurar el disco duro adicional que he instalado en la máquina virtual:

mysql1

Voy a crear la partición para datos en el dispositivo /dev/sdb:

mysql2

El siguiente paso consiste en crear el sistema de ficheros en la unidad. Voy a formatear la nueva unidad con un sistema ext3.

mysql3

A continuación, voy a crear el punto de montaje (/var/local/data) para el nuevo disco y a configurar el arranque para que este montaje. Para esto último edito el fichero /etc/fstab

mysql4

Rearranco el servidor y compruebo que los discos están configurados:

mysql5

Una vez instalado y configurado el agente NRPE de Nagios voy a comenzar con la instalación del gestor de bases de datos. La versión que voy a instalar es la 5.7.

mysql6

El proceso de instalación es bastante rápido. En él se solicita la contraseña del administrador de la base de datos. Voy a probar que soy capaz de entrar:

mysql7

Me conecto al servidor y puedo entrar. La siguiente tarea es configurar el servidor MySQL. En primer lugar, ejecuto el script de securización del servidor de base de datos. Se trata de un script interactivo que va haciendo una serie de preguntas.

mysql8

A continuación voy a definir el directorio de datos para que sea el directorio en el que he montado el segundo disco duro (/var/local/data). Desafortunadamente, la instalación de mysql ya ha definido un directorio de datos en /var/lib/mysql y ahora, me temo, que me va a tocar soportar dificultades. Estaba dispuesto a intentar seguir el manual online de MySQL en lo relativo a la definición del directorio de datos pero he encontrado un sitio que tiene un hack, aparentemente, más fácil. Como todavía no tengo datos no pierdo nada con intentarlo.

En primer lugar voy a modificar el propietario y el permiso del nuevo directorio de datos para dejarlo como el actual:

mysql9

Ahora detengo el servicio mysqld y copio los contenidos del directorio de datos actual al nuevo directorio:

mysql10

Cambio el fichero de configuración de MySQL para apuntar al nuevo directorio de datos. Me cuesta un poco encontrar el fichero de configuración pero descubro que, aparentemente, el que me interesa es: /etc/mysql/mysql.conf.d/mysqld.cnf:

mysql11

Finalmente, rearranco el servicio y compruebo si puedo acceder: no puedo. He ido teniendo distintos problemas de permisos y al final, lo que he decidido es cortar por lo sano: he renombrado el directorio de datos existente y he cambiado el punto de montaje del disco duro de datos al directorio de datos de la instalación de MySQL. Con esto he conseguido, finalmente, echarlo a andar.

El siguiente paso es instalar phpMyAdmin para la administración, a través de un interfaz más amigable, del sistema.  Voy a instalarlo, como no podía ser de otra forma, en el servidor de administración y necesito crear un usuario, con privilegios de administrador, que pueda acceder desde este servidor.

mysql12

En el proceso de configuración del acceso he descubierto algunas cosas que no sabía. Por ejemplo, que MySQL sólo es capaz de escuchar en una dirección IP por lo que el acceso de phpMyAdmin no puede hacerse a través de la interfaz de gestión. Afortunadamente, el servidor de administración está conectado a la DMZ con lo que este inconveniente se soslaya (creando, por supuesto, un usuario distinto). Finalmente he conseguido que phpMyAdmin sea accesible.

mysql13

mysql14

En principio, con esto, la instalación del servidor MySQL queda completada. Me quedaría instalar un plugin para realizar la monitorización del servidor desde Nagios pero esto lo voy a poner en mi lista de ToDo’s.

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

Instalando un servidor LDAP

Al igual que en el caso del servidor DNS, voy a crear un servidor Ubuntu con 1GB de RAM y 25GB de disco para el servidor LDAP. La instalación y pre-configuración del servidor es calcada a la que hice para el servidor de nombres así que voy a obviar los detalles. La única diferencia es que mi servidor LDAP va a estar conectado a la red de Backend en lugar de a la DMZ como en el caso del servidor de nombres.

ldap1

La idea es instalar un servidor OpenLDAP para la autenticación y autorización de usuarios del entorno lab. Para empezar, me descargo los correspondientes paquetes y, durante la instalación, se me solicita la contraseña para el directorio.

ldap2

ldap3

A continuación, lanzo la reconfiguración del paquete instalado y voy contestado a las distintas cuestiones relativas a la configuración:

ldap4

ldap5

ldap6

ldap7

A continuación instalo la interfaz web de administración del directorio (phpLDAPAdmin) en el servidor de administración:

ldap8

Realizo la configuración editando el fichero /etc/phpldapadmin/config.php.

ldap10

ldap11

Una vez establecida la configuración, ya se puede acceder al servidor LDAP mediante phpLDAPadmin:

ldap2_1

Ahora un servidor de nombres

1. Introducción

Una vez completada la configuración de la red de gestión, voy a empezar a configurar distintos servidores en el entorno. Para empezar, voy a desplegar un servidor de nombres, basado en bind para mi entorno.

El servidor DNS, como no podía ser de otra forma, lo voy a instalar en la DMZ. La red virtual del lab, va tomando forma de este modo:

dns3

2. Creación y preconfiguración de la máquina virtual

Creo una máquina virtual con la configuración estándar (1GB de RAM y 10 GB de disco):

dns1

Instalo el sistema operativo, Ubuntu para no variar. Antes de ponerme con el despliegue de bind, tengo una serie de tareas que completar:

a) En primer lugar me toca configurar la segunda tarjeta de red para que se conecte a la red de gestión. Esto es, a priori, sencillo, no hay más que configurar la interfaz de gestión en /etc/network/interfaces

dns7

dns8

b) El segundo aspecto a configurar es enviar los logs al servidor de logs. Editamos el fichero /etc/rsyslog.conf y añadimos al final la línea correspondiente:

dns9

c) Por último, necesitamos instalar NRPE y configurarlo para poder monitorizar el servidor DNS desde Nagios. Los pasos a seguir están descritos aquí. Asimismo, tengo que crear los objetos necesarios en el servidor de Nagios para que la monitorización sea efectiva. Finalmente, ya tengo controlado el nuevo servidor en Nagios:

dns10

3. Instalando bind

Instalo el paquete bind9, las utilidades asociadas y la documentación:

dns11

Compruebo que el servicio named esté a la escucha en el puerto 53:

dns12

Todo correcto pero voy a hacer que sólo resuelva para IPv4. Para ello edito el fichero /etc/default/bind9 y añado –4 al parámetro OPTIONS.

dns13

Rearranco el servicio y verifico que no esté escuchando en el puerto 53 en IPv6:

dns14

4. Configurando bind

Ahora voy a configurar bind para que sea el servidor de nombres de mi dominio lab (tcantos.local).

Editamos el fichero de opciones de configuración de bind (/etc/bind/named.conf.options), añadiendo un acl para las redes de mi lab y configurando las opciones de acuerdo a mi entorno. El fichero queda de la siguiente forma:

dns15

A continuación vamos a definir las zonas. Para ello editamos el fichero /etc/bind/named.conf.local. Definimos una zona de resolución directa para las distintas redes del entorno lab y cuatro zonas de resolución inversa para las distintas redes:

dns16

dns17

Ahora definimos los ficheros de datos de bind para la resolución directa e inversa:

  • tcantos.local.db

dns18

  • 2.1.10.db (servidores de backend)

dns20

  • 3.1.10.db (Red de estaciones de trabajo)

dns21

  • 2.168.192.db (DMZ)

dns19

  • 199.168.192.db (Red de Gestión)

dns22

Una vez creados los ficheros necesarios, los llevamos al servidor y verificamos la configuración, las zonas y rearrancamos el servidor bind.

dns23

Finalmente, configuramos los clientes. En los servidores ubuntu editamos el fichero /etc/resolvconf/resolv.conf.d/head para añadir las líneas necesarias y ejecutamos resolvconf:

dns24

Verificamos el funcionamiento del servidor dns con dig y nslookup:

dns25

dns26

dns27

Parece que todo funciona, sólo queda configurar el resto de los equipos.

Monitorizando la red virtual (I)

Una vez instalado Nagios en el servidor designado para ello, el siguiente paso en el camino es monitorizar el resto de los elementos. Ahora mismo, mi red está así:

Dibujo3

Los elementos a monitorizar (por ahora) son, además del propio servidor Nagios, el servidor de Syslog y el router Vyos. Lo que hay que hacer es configurar el servidor Nagios para poder realizar la monitorización. No tengo mucha idea de cómo va esto pero, a priori, el secreto consiste en atacar el router VyOS a través de SNMP y los servidores a través del plugin NRPE.

En este post voy a cubrir la configuración del servidor NRPE en el servidor de syslog.

Para poder monitorizar el servidor de syslog, lo que hay que hacer, en primer lugar, es instalar NRPE y los plugin de Nagios:

add@ubsyslog~$ sudo apt-get update 
add@ubsyslog~$ sudo apt-get install nagios-plugins nagios-nrpe-server

El siguiente paso es editar el fichero de configuración del servidor NRPE. Este fichero es /etc/nagios/nrpe.cfg. En este fichero, establecemos el host desde donde se van a lanzar los comandos de monitorización (servidor ubnagios):

nag_cfg1

y las directivas include para estructurar el contenido de la configuración:

nag_cfg2

Dentro del directorio nrpe.d voy a crear un fichero de configuración (cmds.cfg) que contiene los comandos que van a utilizarse para monitorizar el servidor remoto.

En el caso del servidor ubsyslog, lo que, inicialmente, voy a monitorizar es:

  • Que el servidor esté vivo. Esto se lleva a cabo lanzando un ping desde el servidor de monitorización por lo que, en local, no hay que hacer nada.
  • El número de usuarios conectados al servidor. Para ello empleamos el plugin nrpe check_users estableciendo un nivel de warning a 5 y el nivel crítico a 10.
  • La carga del servidor. Se monitoriza mediante el comando check_load de forma que eleve un aviso si los niveles de carga (de acuerdo a la salida del comando uptime) superan 5,10 y 15 y lanza un nivel crítico cuando estos niveles superan los valores 30, 25 y 20.
  • La ocupación del disco duro del servidor (sistema de ficheros ‘/’), empleando el comando check_disk. El comando emitirá un warning cuando el espacio libre en el disco duro baje del 20% y un aviso crítico cuando el espacio libre esté por debajo del 10%. Es importante saber cuál es el dispositivo en el que se monta el sistema raíz que, en el caso del servidor ubsyslog, es /dev/dm-0 (obtenido mediante el comando ‘df –h /’).
  • El número total de procesos. Para esto, se utiliza el comando check_total_procs, estableciendo un nivel de warning en 150 y el nivel crítico en 200.
  • El espacio de swap libre. Para obtener este valor empleamos el comando check_swap estableciendo el nivel de warning al 20% y el nivel crítico al 10%.
  • El espacio utilizado por los logs (directorio /var/log). Para obtener esto empleamos el comando check_folder_size estableciendo los niveles de warning y crítico respectivamente a 5GB y 6GB (el disco duro total inicial es de 10GB).

El fichero cmds.cfg queda de la siguiente forma:

nag_cfg3

Antes de continuar voy a hacer un breve inciso sobre cómo configurar el comando check_folder_size.sh (yo lo renombré a check_folder_size2.sh) ya que el conseguir que funcione supuso un esfuerzo considerable.

El shell script check_folder_size.sh lo descargué al PC donde ejecuto el vSphere client desde el sitio de internet de Nagios Exchange. Una vez en el PC, surgió el problema de cómo llevarlo a la máquina virtual, la solución que empleé, fue crear una imagen ISO, subirla a vSphere y montarla en la unidad de CD de la máquina virtual. Aquí explican más o menos el mecanismo.

A continuación, tuve un pequeño problema con los permisos. Tuve que cambiar el usuario y los permisos del fichero:

add@ubsyslog:/usr/lib/nagios/plugins$ sudo chown nagios:nagios check_folder_size2.sh
add@ubsyslog:/usr/lib/nagios/plugins$ sudo chmod 755 check_folder_size2.sh

Una vez completado todo esto, conseguí que el comando funcionara en local. Ahora llega la hora de probar que todos los comandos funcionan en remoto desde el servidor de nagios (ubnagios) utilizando el comando check_nrpe:

nag_cfg5

Todo funciona OK y esto me va a servir de plantilla para siguientes configuraciones.

Instalando Nagios (I)

El siguiente paso en la configuración de mi entorno lab es instalar un servidor Nagios para la supervisión y control de los distintos servidores del entorno. En este post y en el siguiente abordaremos la instalación de Nagios y, en un tercero, la configuración de Nagios.

Prólogo

El primer paso en la instalación de Nagios es crear un servidor virtual Ubuntu con 1GB de RAM y 10GB de disco y con el stack LAMP. La selección del stack LAMP la hacemos durante la instalación de Ubuntu.

nagios1

nagios2

Arrancamos la máquina virtual y actualizamos los paquetes instalados. A continuación, ya que hemos desplegado un servidor de syslog, hacemos la configuración necesaria para que los logs de este equipo vayan al servidor de syslog.

Para ello, editamos el fichero /etc/rsyslog.conf y añadimos, al final del fichero, la línea:

*.*	@192.168.199.2

El host 192.168.199.2 es el servidor de syslog.

nagios3

Re-arrancamos el servicio rsyslog y ya tenemos el equipo preparado para el despliegue de Nagios.

Para el despliegue de Nagios voy a ir siguiendo los pasos que se describen en este sitio. A ver si, por una vez, consigo hacer las cosas a la primera. La instalación de Nagios se va a realizar creando los binarios a partir del código fuente.

Capítulo 1. Creando los usuarios

Vamos a crear un usuario “nagios” y un grupo “nagcmd” y a añadir el usuario nagios a este grupo:

nagios4

nagios5

Capítulo 2. Actualizando el sistema e instalando las dependencias

La actualización del sistema la realizamos mediante el comando siguiente:

add@ubnagios~$ sudo apt-get update

A continuación vamos a instalar las dependencias necesarias para la compilación de Nagios:

add@ubnagios~$ sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev xinetd apache2-utils unzip

Capítulo 3. Descarga e instalación de Nagios

El siguiente paso a abordar es la descarga, compilación e instalación de Nagios. De acuerdo a lo que dice en el sitio web, la última versión disponible es la 4.1.1. Así que vamos a descargar el tarball correspondiente, mediante curl.

nagios6

Descomprimimos …

add@ubnagios~$ tar –xvf nagios*

Configuramos …

add@ubnagios~$ cd nagios*
add@ubnagios~/nagios-4.1.1$ ./configure --with-mail=/usr/sbin/sendmail --with-nagios-group=nagios --with-command-group=nagcmd

nagios7

y construimos …

add@ubnagios~/nagios-4.1.1$ make all

nagios8

Ahora instalamos Nagios, ficheros de configuración y scripts de inicialización.

add@ubnagios~/nagios-4.1.1$ sudo make install
add@ubnagios~/nagios-4.1.1$ sudo make install-commandmode
add@ubnagios~/nagios-4.1.1$ sudo make install-init
add@ubnagios~/nagios-4.1.1$ sudo make install-config
add@ubnagios~/nagios-4.1.1$ sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf

Finalmente, para poder lanzar comandos a través de la interfaz web, añadimos el usuario del seervidor web, www-data al grupo nagcmd.

add@ubnagios~/nagios-4.1.1$ sudo usermod -G nagcmd www-data

Continuaremos en la segunda parte instalando los plugins y NRPE.

Instalando vSphere (II)

Tras mi primer y fallido asalto a la instalación de vSphere en mí nuevo servidor (nuevo para mí, obviamente), contemplaba dos alternativas que eran bien comprar una tarjeta de red soportada por vSphere o bien instalar otro hipervisor, en este caso KVM sobre Ubuntu.

Antes de decidirme por una de esas dos alternativas me pongo a explorar, de nuevo, la configuración de la BIOS del equipo y, después de bucear un rato, descubro que la puñetera tarjeta de red ¡está deshabilitada!. Por ahí tenía que haber empezado. Ni corto ni perezoso, habilito la tarjeta de red y, con mi imagen de vSphere 5.5 tuneada me lanzo de nuevo al asalto. y, esta vez, consigo llegar a la instalación:

vsphere4

Me lanzo a instalar y, tras haber leído la licencia de usuario final (es coña) acepto y comienza la instalación. La instalación va muy lenta y aprovecho el tiempo muerto para ir instalando el Cliente vSphere. Al final se completa aparentemente de forma adecuada y estoy en disposición de quitar el pincho USB e intentar el arranque en el modo definitivo.

Pues dicho y hecho, lanzo el arranque desde el disco duro y comienza a cargarse el vSphere, como la cosa va lenta me entretengo un rato con otras cosas y cuando le echo un ojo resulta que está cargando algo así como USB arbitration. Al cabo de media hora sigue en el mismo sitio pulso Alt-F12 y aparece el log con un montón de mensajes. Vuelvo a Internet y descubro que el ESXi no puede acceder a los discos SATA por lo que necesito configurar el RAID y repetir todo el proceso. También veo que hay una persona que ha resuelto esta historia instalando ESXi en un pincho USB. Ahora que había llegado tan lejos y otra vez a pelearme con algo que no conozco, ¡ni de coña!. Decido instalar el vSphere en un pincho USB y ¡voilá! esta vez sí arranca.

Sólo me queda configurar las interfaces de red y probar si accedo desde el cliente. Una vez conseguido esto, estoy tan emocionado que cojo carrerilla y, en el otro disco duro, instalo Ubuntu con KVM pero de eso hablaré en otro lugar.

Aprovechando que está instalado, configuro no sin cierta dificultad, las distintas LANes que tenía configuradas en en la maqueta basada en Workstation y, tras resolver algunos problemas con la imagen, consigo instalar el VyOS de forma similar a como ya lo había hecho.

Lo siguiente que voy a contar es la solución de conectividad que estoy empleando.