3 ene 2019

PART 2. Installing Nagios Core on CentOS 7 Minimal



In this article we are going to prepare our CentOS 7 VM for Nagios Core installation and perform the installation itself. Then we're going to try a simple check.

NAGIOS AND PLUGINS INSTALLATION

1. First of all, we will need to disable Selinux module:



2. Install all the needed dependencies, including web server, php libaries, ssl libraries, etc:



3. Once done, we are going to add nagios user and group, then we assign nagios group to nagios and apache user:


4. Download Nagios Core and Nagios Plugins package and uncompress them:





5. Once uncompressed, we're compiling Nagios Core and correspondant plugins:




6. Afterwards we are going to create a password in order to being able to acces web interface:


7. After compiling Nagios plugins we're starting the web server and nagios daemon itself:


8. If we cannot access the web server on this stage, we will need to open port 80 on the Nagios machine using the next command:


9. The web page is going to request the password defined in previous steps:



10. Now, if we go to "Tactical overview" we can see the Nagios server itself wich is defined as "localhost". From there we can also see the status of its different services:





DEFINING A NEW HOST

In this step we are going to define a new host which is going to be our Windows 10 machine.

1. Uncomment the "servers" directory line in nagios.cfg file:


2. Create host configuration file in /usr/local/nagios/etc/objects/servers directory:


3. Configure static IP@ on monitord machine:



 4. Define monitored host like in the next example and restart nagios service:


The most important parameters are the address, which is the IP@ of our machine, check_command and the other ones which detailed description you can find on official nagios core web site.


5. Now we are able to see the new host in "tactical overview" tab in our web interface, however pending for now:


6. Configure NTP server in order to show time/date correctly:

Update repositories, install NTP package, set the timezone and check the date:




7. Finally enable http, nagios and ntpd service to launch automatically on startup:


That's it for now. Hope you enjoyed this article and see you soon! :) Happy New Nerdy Year!

30 nov 2018

PART 1. What is Nagios?



Esto es una traducción y adaptación a inglés de mi proyecto final del grado superior de Administración de Sistemas Informáticos en Red, cursado en el instituto de Cuatrovientos entre 2014 y 2016. Me servirá para recordar este interesantísimo mundo de la monitorización del entorno TI y también para practicar el inglés. Espero que también sirva a alguien cara a empezar en el mundillo de Nagios.

This is the traduction and adaptation to English language of my final grade project, which is an introduction to mysteries of Nagios monitorization software and its functionality as well.

1. What is Nagios?

Nagios is a powerful monitorization tool, widely used in the enterprise area. It lets you supervise workstations, servers and other networking devices with their main services, as well as hardware values (CPU, RAM usage, CPU load, storage load, lets you know whether a port on your machine is opened) and services hosted by any particular machine: HTTP, SMTP, POP3, IMAP, FTP, etc.

When a host starts to behave in an abnormal way, Nagios is capable to notify this information to the responsible contact via different ways: E-mail, SMS message, instant messaging.

We can differ between Nagios Core, which is opesource and free and Nagios XI, which is not free, however is based on Nagios Core, superposing additional layers over the original application, extending its functionality, configuration and support of the software. One of its strong points is, with no doubt, the capability of configuration via web interface, whereas Nagios Core needs a manual config.

2. Which are the main functionalities of Nagios XI?

- Detect and respond in the fastest way when an IT failure occurs.
- Via advances statistics, anticipate the need of updating infrastructure before the systems start to fail.
- Coordinate the responses of the tech team.
- Being able to comply the SLA agreement.
- Monitorize efficiently and in a centralized way all of the enterprise infrastructure and assure the continuity of the business.
- Control complex infrastructures using distributed monitoring.

3. Nagios Core / Nagios XI comparison



4. First steps. Lab environment and Nagios installation

I'm going to create a small lab environment which is going to grow as we move along this "tutorial". I'm using VMware Workstation 14.1.2, build-8497320 if anyone's asking. You can use Oracle Virtualbox as an alternative. My virtual lab will consist of 2 virtual machines for now:

-CentOS 7 x64 VM, which is the recommended OS for Nagios Core installation.
-Windows 10 x64 VM, which is going to be a monitored host.

Both hosts are being configured in bridged mode, which means they will be able to access the internet, as well as my physical machine.

First we are going to complete CentOS 7 installation, which image can be downloaded on its official web page. I hope my readers already know how to complete that task.


Once operating systems are installed, we are going to perform Nagios Core installation on CentOS 7 VM.

Why Nagios Core and not XI if it's better?

I choose Nagios Core and not XI version, because along with the manual configuration, you are going to understand better how it works internally. It can be compared with learning Linux using GUI instead of learning to work with the Command line/Terminal.

When the installation is finished we are going to login with the root user. If the root password is not defined then you need to login with your regular user and define it manually.

Initially we don't have internet connection in our CentOS machine, as the interface configuration is no definded. We can see it performing a ping to a Google public DNS (8.8.8.8):


Let's see available network interfaces:


We are going to define static config on ens33 interface:



Once we've saved the config file, we are going to restart the network service in order to apply the changes:


And as we can see, we already configured successfully a static IP address on our Nagios machine, with Internet connection:


Now, from the Windows 10 VM we are going to see if there's any problem connecting with the Nagios server:


Now from the server to Windows 10 host:


If you're issuing any problems, make sure the network is bridged correctly (to a physical interface which has Internet connection). If you can't ping Windows machine try to disable the firewall on the VM or define the rule.

In the next chapter we are going to download, install Nagios Core and finally perform our very first check on our Win10 Workstation.

See you and hope you enjoyed the article!

15 feb 2016

Servidor IM (mensajería instantánea) en Windows y GNU/Linux



Mensajería instantánea o IM (Instant Messaging) es una forma de comunicación entre dos o más equipos en tiempo real. Para ello ambos tienen que estar conectados a una red con un servidor IM disponible, ya sea Internet o una red local.

Antes de que el servicio de mensajería instantánea se extienda a las plataformas móviles, se utilizaba ampliamente en los equipos de escritorio (entre ellos los famosos MSN Messenger, ICQ, Jabber, GTalk). Y aunque hoy en día, por la invasión de los teléfonos inteligentes, no sea muy habitual el uso de ese servicio desde los PCs, en ocasiones puede resultar muy cómodo y útil.

Para que esto funcione, se desarrollon multitud de protocolos diferentes: XMPP, OSCAR, IRC, Mumble, Skype, etc. La mayoría de ellos son privados y sólo los pueden implementar sus propietarios, pero otros no lo son y pueden ser implementados libremente por cualquiera.

1. Openfire



Es un servidor de IM, basado en el protocolo XMPP (Extensible Messaging and Presence Protocol) , escrito en Java y distribuido bajo la licencia Apache 2.0. Destaca por la administración via web, uso de TLS y la conectividad con diferentes bases de datos.

Se puede descargar desde la Página oficial

1.1. Instalación

Voy a realizar la instalación de este servidor en una máquina virtual con Windows Server 2008 R2. Ejecutamos el instalador y elegimos el idioma:


Tras estudiarlos detenidamente, aceptamos los términos de licencia:


Si es necesario, cambiamos el directorio de instalación (lo mantendré por defecto):


También elegimos si queremos crear accesos directos en el menú de inicio:


Finalmente, tras la extracción de archivos del servidor, indicamos si queremos ejecutar Openfire:




1.2. Configuración

Cuando se ejecute Openfire, veremos una ventana como esta. Esperamos a que se inicie el servidor y pulsamos Launch Admin para realizar una configuración básica:


Se abrirá un panel de configuración desde nuestro navegador predeterminado, mediante el puerto 9090. Elegimos el idioma del proceso de configuración:


En la siguiente ventana debemos introducir nuestro dominio (en caso de que tengamos uno), si no, mantenemos el campo, que cogerá el nombre de la máquina por defecto. Si es necesario, cambiamos también los puertos de administración:


Especificamos la forma de conectarse a la base de datos Openfire. La 2ª opción es más sencilla y adecuada para un entorno de pruebas:


Almacenaremos las cuentas de usuarios en una base de datos interna de Openfire, eligiendo la opción por defecto:


Introducimos las credenciales del administrador para acceder al panel de control más adelante. Importante acordarse de ellos:


Configuración finalizada :)


1.3. Creación de usuarios

Una vez realizada la configuración inicial, se abrirá la consola de administración:

Introducimos las credenciales del administrador (especificados anteriormente):

Desde aquí se pueden cambiar las configuraciones del servidor, ver logs y otras informaciones útiles:


Desde la pestaña Usuarios/Grupos vamos a crear 2 usuarios nuevos, que se van a guardar en la base de datos de Openfire:


Rellenamos al menos los campos obligatorios y marcamos la casilla de administrador, si le queremos asignar ese privilegio:


1.4. Pruebas con Spark

Spark es un cliente gratuito para los servidores IM basados en el protocolo XMPP. Lo voy a instalar en el propio servidor y en otra máquina virtual con Windows 7, para simular un entorno real.

La instalación del cliente no tiene ninguna complicación:


Desde la máquina del servidor, voy a loguearme con el usuario pepito (especificando login, contraseña y la @IP del servidor):


Logueo correcto:


Lo mismo desde la otra máquina, pero con la cuenta raulito:


Nos aparecerá un error de inicio de sesión. Para solucionarlo tendremos que desactivar el cortafuegos de Windows o, bien, añadir una excepción al mismo.


Vamos al Panel de control -> Sistema y seguridad. Y desactivamos el cortafuegos:




Ahora, al conectarse desde el cliente de Windows 7, ya no tenemos ningún problema:



Para que un usuario pueda comunicarse con el otro lo tendrá que añadir a su lista de contactos. Al hacerlo, el otro usuario tendrá que confirmar esa petición. ¡Allá vamos!

Desde raulito buscamos a pepito y lo agregamos como contacto:




Podemos cambiar el nombre con el que nos aparecerá pepito y también el grupo al que pertenece. Mantengo las opciones por defecto:


Desde la cuenta de pepito (que está en la máquina de Windows Server) vemos la petición que acabamos de realizar. Si no la visualizáis, probad cerrar sesión del usuario y entrar de nuevo:


Si marcamos la casilla, el usuario pepito agregará también a raulito a sus contactos y así podrán ver el uno al otro:



Vamos a enviar algunos mensajes de uno al otro para comprobar que la conectividad sea la correcta:



Si clicamos en el candado, se va a cifrar la conexión. Por lo que, si a partir de ese momento, alguien intercepta algún mensaje, estará cifrado:



Sin embargo, tras realizar una prueba con Wireshark, parece que la conexión se cifra desde el principio independientemente de que lo especifiquemos o no.

Cuando nos logueamos en el servidor se establece una conexión XMPP:


Y enseguida se realiza en intercambio de claves para cifrar la conexión, el cual es iniciado por el cliente mediante la petición Client Key Exchange:



2. Prosody


Prosody (o también lxmppd) es un servidor XMPP multiplataforma escrito en Lua. Tiene por objetivos un bajo consumo de recursos, facilidad de uso y extensibilidad.

Voy a realizar la instalación y la configuración de este servidor en Ubuntu Server 14.04, desde el modo texto.

2.1. Instalación

Aunque en la página oficial se dice que prosody es disponible desde repositorios oficiales de Ubuntu, no lo he conseguido localizar desde allí.

Vamos a añadir el repositorio oficial del desarrollador. Con ello también nos aseguraremos de tener la versión más nueva del servidor.

Abrimos el fichero /etc/apt/sources.list y añadimos la última línea:


Además, tendremos que añadir la clave del desarrollador, si no, no se permitirá su instalación en el sistema. Para ello ejecutamos wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-get key add -


Ahora ya podemos instalar el servidor mediante el apt-get install prosody, por ejemplo. Si no nos localiza el paquete, efectuamos un apt-get update para actualizar nuestros repositorios. Junto con el servidor se instalarán diferentes dependencias (librerías del lenguaje Lua, en su mayoría):


2.2. Configuración

Vamos a securizar el transporte de los paquetes entre nuestro servidor y los cliente mediante el protocolo SSL, por ello, antes de meterse en el fichero de configuración, vamos a generar una clave.

Con el siguiente comando generamos un parametro DH (dhparam), que hará el intercambio de claves entre el cliente y servidor más rápido:


El fichero de configuración principal de Prosody es /etc/prosody/prosody.cfg.lua y sigue la sintáxis del lenguaje Lua mencionado anteriormente. En ese lenguaje una línea se comenta poniendo doble guíon (--) delante:


La variable admins, indica los JID (nombre_de_usuario@dominio) de los administradores. Especificamos nuestra cuenta de administrador:


Hay muchas más características para configurar. Sin embargo, las mantendré tal y como están. Si quisieramos activar una de ellas (por ejemplo "admin_telnet" que viene desactivada por defecto), bastaría con quitar "--" de la línea. Para desactivar, pondríamos "--" en esa línea, respectivamente:


En la configuración SSL, especificamos la versión del protocolo en la variable protocol y la ubicación del dhparam generado antes:


El parametro authentication establece cómo se van a guardar las contraseñas de los usuarios de nuestro servidor. Por defecto las guarda en texto plano ("internal_plain"). Lo mantenemos así para una mejor compatibilidad con diferentes clientes. Si quisieramos guardarlas cifradas (en hash), bastaría con cambiar el valor del parametro a "internal_hash":


Cada virtual host representará el dominio al que reparta servicio nuestro servidor. Nuestro dominio se llama andrii.org:


Tras realizar las configuraciones reiniciamos el demonio mediante prosodyctl restart.

Nota: aparecerá un error (más bien advertencia), indicando que la versión actual de LuaExpat (una de las dependencias instaladas con el servidor) está en una versión vulnerable.


Para crear usuarios utilizamos el comando prosodyctl adduser, indicando el nombre de usuario con su dominio. Creamos al usuario admin@andrii.org:


Las contraseñas serán almacenadas en texto plano y lo podemos comprobar visualizando el fichero /var/lib/prosody/NOMBRE_DOMINIO/accounts/NOMBRE_USUARIO.dat:


De la misma forma que antes, creamos el usuario user@andrii.org:


Para simular un servidor DNS, resolvemos andrii.org a nuestra propia máquina, escibiéndolo de la siguiente manera en el fichero /etc/hosts:


2.2. Pruebas (Pidgin y Spark)

Vamos a realizar las pruebas de este servidor, voy a configurar las @IP de las máquinas en el rango 172.30.0.0/16 (fichero /etc/network/interfaces para configurarlo desde modo texto):


Reiniciamos la interfaz para aplicar los cambios, y con un ifconfig comprobamos que la dirección sea la correcta:



Voy a emplear otra máquina con Windows 7 y una con Debian 8 (ambos con Pidgin) para simular probar el servicio con diferentes clientes. Nos aseguramos de que esas máquinas también tengan un direccionamiento IP correcto:


Si no tenemos un servidor DNS que lo haga, no olvidamos resolver el nombre de nuestro dominio a la @IP del servidor. En Windows el fichero a editar es C:\Windows\system32\drivers\etc\hosts:


En la máquina Debian 8 se haría de igual forma que en Ubuntu Server.

Instalando y configurando Pidgin

Pidgin es un cliente IM multiplataforma, multiprotocolo y además gratuito. Página oficial

En el proceso de la instalación, tras aceptar los terminos de licencia e indicar la ruta, no olvidamos marcar xmpp: en la lista de componentes a instalar:


Esperamos a que el proceso finalice:


En el primer inicio del programa se nos ofrecerá añadir una cuenta nueva, pulsando Añadir:


En la siguiente ventana tenemos que elegir el protocolo (XMPP), nombre de usuario y contraseña, además de nuestro dominio. En la máquina Windows 7 me logueo con el usuario admin:


En la pestaña Avanzadas, elegimos la opción utilizar cifrado si es posible:


En Debian 8, Pidgin ya viene preinstalado en el sistema. Además, su configuración idéntica a la que acabamos de realizar. En esta máquina me loguearé con user:



Desde el menú del usuario, voy añadir a admin a la lista de contactos de nuestro usuario:


Rellenamos el nombre de usuario completo al que queramos añadir (admin@andrii.org), su apodo y el grupo al que va a pertenecer. No olvidamos de elegir la cuenta desde la que realizaremos la petición (user@andrii.org):


En la otra máquina nos aparecerá una petición de amistad de admin@andrii.org:


 Lo autorizamos y además y también lo añadimos a la lista de contactos de user@andrii.org:


También tendremos que aceptar la autorización desde el otro lado:


Para finalizar, una prueba de comunicación, enviando algunos mensajes de un usuario a otro. Con ello nos aseguramos de que el destinatario los recibe:




Prueba con Spark

Ahora, desde la máquina Windows, mediante Spark, me loguearé con la misma cuenta (admin@andrii.org), simplemente para comprobar que este cliente también funciona con Prosody:


Puedemos visualizar que ya tenemos un usuario añadido en nuestra lista de contactos (user@andrii.org, al que agregamos en la prueba anterior). Vamos a ver si recibe un mensaje de prueba:




3. Ejabberd en Windows


Es un servidor IM multiplataforma de código abierto. Está escrito principalmente en Erlang. Y al igual que todos los servidores IM que hemos visto, hace uso del protocolo XMPP.

Página oficial

3.1. Instalación

Voy a instalar este servidor sobre una máquina con Windows 7 Ultimate.

El proceso de instalación es el típico. Aceptamos los términos e indicamos el directorio de instalación:



Indicamos nuestro dominio (uno diferente al utilizado en la instalación de Openfire, para evitar conflictos):


Introducimos las credenciales del administrador de nuestro servidor:



Y esperamos a que se realice el proceso de la instalación:


3.2. Iniciamos y creamos usuarios

Desde el enlace creado en el escritorio tras la instalación, iniciamos el servidor:


Se nos redirigirá a una página web local, que contendrá el enlace al panel de control de nuestro servidor:


Para acceder a él vamos a introducir las credenciales del administrador de ejabberd:


No he encontrado la opción para crear usuarios nuevos desde el panel de control, pero se puede hacer mediante la línea de comandos. Nos tenemos que situar en la carpeta bin del directorio del servidor (en mi caso cd C:\Program Files\ejabberd-16.01\bin). Una vez allí, utilizamos el comando ejabberctl, indicando el nombre del usuario, el dominio y la contraseña (por ejemplo ejabberctl register andrii asir2.com password). Voy a crear 2 usuarios - andrii y pepe:


Tanto en el lado del servidor, como en el del cliente asir2.com se debe resolver a la @IP de nuestro servidor. Para ello podemos implementar un servidor DNS, o añadir el registro manualmente al fichero hosts, como hicimos en las pruebas anteriores.

Lo podemos comprobar con un ping:


Desde otra máquina con Windows 7 me voy a loguear con el usuario andrii, utilizando el cliente Spark:


En Ubuntu 14.04 voy a emplear el cliente Psi que viene preinstalado en la distribución. Al iniciarlo por primera vez, indicaremos los detalles necesarios de la cuenta (pepe):



Al conectarnos, nos aparecerá un mensaje de aviso, al utilizarse un certificado autofirmado en el servidor:


Y ya estaríamos en la interfaz del programa:


Desde la cuenta andrii, cuya sesión está iniciada en Spark, voy a agregar a pepe:


Desde el otro lado, veríamos un contacto nuevo en nuestra lista, cuya petición vamos a aceptar:



En el lado de andrii nos preguntará si queremos que nos agreguen a la lista de contactos. De nuevo lo aceptamos:


Para finalizar, una prueba de comunicación entre los 2 clientes conectados a nuestro servidor ejabberd: