Cómo Instalar Wazuh en la Nube Usando Docker: Guía Completa
Table of contents
- Introducción
- ¿Qué es Docker?
- Ventajas al desplegar Wazuh en la nube
- Desplegar Wazuh con Docker, usando Linode
- Creación de una instancia en la nube con Linode
- Administrar una instancia
- Desplegar Wazuh en contenedores de Docker
- Acceder al panel de control de Wazuh
- Cambiar credenciales predeterminadas
- Conclusión
Introducción
Wazuh (https://wazuh.com) es un HIDS/SIEM de código abierto, libre y gratuito, licenciado bajo GNU/GPL v2, creado en 2015 y basado en OSSEC.
Wazuh es un sistema centralizado y multiplataforma, con un uso orientado a entornos empresariales, que permite monitorear los eventos en los distintos endpoints de una empresa. Además, facilita la interacción con otros sistemas de seguridad, creando un ecosistema robusto que asegura la continuidad de las actividades empresariales.
Hoy veremos cómo desplegar este sistema en una instancia en la nube, usando Docker. Pero... ¿qué es Docker?, ¿por qué usar la nube? ...
Quédate aquí para descubrirlo :D
¿Qué es Docker?
Docker se trata de una plataforma de código abierto que permite desplegar aplicaciones en contenedores de Docker.
Con Docker logramos que la ejecución de las aplicaciones sea mucho más liviana, ya que el funcionamiento de los contenedores de Docker se basa en el aislamiento de procesos y en las funciones de virtualización del kernel de Linux.
Esto en sí es lo que diferencia un contenedor de una máquina virtual (la cual necesita hardware virtualizado y un sistema operativo independiente).
Esquema de funcionamiento de Docker (wikipedia.org)
Ventajas al desplegar Wazuh en la nube
A la hora de desplegar una nueva aplicación tenemos distintas alternativas, entre ellas se encuentra el despliegue de aplicaciones en la nube.
Es opción está seleccionada cada vez más por muchas empresas, y los motivos de ello son los siguientes:
Disponibilidad: Al hacer uso de la nube se nos garantizará prácticamente una disponibilidad 24x7x365.
Escalabilidad: Con un solo click podremos aumentar las capacidades computacionales de nuestro sistema en base a las necesidades que tengamos.
Flexibilidad: Podremos modificar el comportamiento de la instancia donde alojamos nuestro sistemas, a nuestro antojo.
Reducción de costes: Al usar la nube nos ahorramos los costes de mantenimiento de equipos físicos, costes eléctricos, de reparaciones...
Si bien, hay que tener en cuenta de que no todo son ventajas, ya que estaremos dependiendo de la empresa proveedora del servicio, entre otras cosas.
Desplegar Wazuh con Docker, usando Linode
Para comenzar el despliegue de Wazuh necesitamos un proveedor de servicios en la nube. En mi caso he seleccionado Linode como proveedor de servicios, siendo este una solución muy recomendable.
Linode cuenta con una gran cantidad de servidores distribuidos por todo el mundo, lo que consigue que sea una tarea muy sencilla seleccionar aquel que se adecue a nuestras necesidades. Además, nos facilita muchas funciones, como pueden ser las copias de seguridad, clonación de instancias.
Ahora sí, llegó la hora de comenzar con nuestra implementación de Wazuh sobre Docker en una instancia en la nube de Linode:
Creación de una instancia en la nube con Linode
Para poder crear una instancia en la nube con Linode tendremos que acceder al sitio web oficial (https://www.linode.com) y registrarnos en sus servicios:
Una vez creada la cuenta tendremos acceso al panel de administración de Linode.
Panel de administración de Linode
Desde el panel de administración de Linode podremos hacer distintas gestiones:
Crear y gestionar linodes (instancias en la nube)
Crear volúmenes
Balancear la carga de trabajo entre nodos
Crear una red privada y aislada en la nube
Crear y gestionar un firewall en la nube para nuestras instancias
Gestionar dominios
Trabajar con contenedores de Kubernetes
Integrar S3 (Amazon Simple Storage Service)
Desplegar aplicaciones (instancias con aplicaciones ya instaladas y preconfiguradas)
De todas estas cosas que se nos permite hacer, nosotros vamos a centrarnos en una de ellas, que es la creación y gestión de linodes.
Crear una instancia en Linode
Para crear una nueva instancia en Linode, accedemos al panel de administración y hacemos click en “Create”
En el menú desplegable seleccionamos la primera opción (Linode):
De esta forma ya estaremos en el panel de creación de linodes.
Desde el panel de creación de linodes se nos ofrecen varias opciones:
Distribuciones:
Nos permite crear una instancia según nuestras necesidades.
Marketplace:
Nos permite desplegar aplicaciones de forma sencilla con instancias preconfiguradas.
StackScripts:
Nos permite crear instancias de forma automatizada mediante scripts.
Imágenes:
Nos permite crear instancias a partir de imágenes de otras instancias.
Backups
Clonar linode:
Nos permite crear un clon de otra instancia.
En esta ocasión vamos a proceder a crear una instancia desde 0, según nuestras necesidades.
Seleccionar la distribución de Linux
El primer paso para poder crear nuestra instancia es seleccionar la distribución.
Linode nos ofrece una gran variedad de distribuciones Linux (openSUSE, Ubuntu, Kali, CentOS, Debian…). En mi caso voy a optar por Ubuntu 22.04 LTS:
Seleccionar la región de alojamiento
Lo siguiente que haremos es seleccionar la región donde estará hospedada nuestra instancia. Esto es algo muy importante, ya que la velocidad de comunicación con nuestro servidor depende de ello. Y es por esto que Linode nos ofrece una herramienta de speed test que nos ayudará a saber cual es la opción que más nos conviene. Puedes acceder a esta herramienta desde aquí ⏎ (o bien acceder desde el panel de Linode)
En mi caso voy a usar el servidor de Madrid:
Seleccionar las características de la instancia
A continuación vamos a elegir las características de nuestra instancia. Esto va a depender de las necesidades que cada uno tenga para implementar su sistema y hay que tener en cuenta que a mayores características hardware, mayor coste de mantenimiento de la instancia que vayamos a contratar.
Linode nos ofrece una amplia gama de opciones:
CPU Dedicada
CPU Compartida
Con gran cantidad de memoria
Con GPU
CPU Premium
Dado nuestro caso, sabiendo que vamos a implementar Wazuh sobre Docker, siendo esta implementación mucho más liviana, nos vamos a decantar por una instancia con CPU compartida, en concreto con la Linode 2 GB.
Establecer la contraseña para root
Por último tendremos que establecer la contraseña de root para nuestra instancia:
Administrar una instancia
Tareas básicas
Sobre las instancias ya creadas podremos realizar distintas tareas:
Clonar
Redimensionar
Reconstruir
Rescatar
Migrar
Borrar
Acceder a la instancia via SSH
Para acceder via SSH a nuestra instancia, podemos hacerlo de distintas formas:
PuTTY
Powershell
CMD
otros
Independientemente de cómo vayamos a acceder, desde el panel de control de la instancia se nos ofrece la línea de comando para acceder a esta (y también la que nos permite acceder a LISH Console):
Para acceder a nuestra instancia, escribimos el comando correspondiente:
ssh {usuario}@{dirección_ip}
Introducimos las credenciales de root y… ya estaremos dentro de la consola de nuestra instancia:
Desplegar Wazuh en contenedores de Docker
Actualizamos los repositorios del sistema:
apt update -y
Instalar Docker
Para instalar Docker, instalaremos los paquetes:
docker.io
Alternativamente se podría instalar docker-engine. Ambos son lo mismo, pero gestionados por distintas entidades (Ubuntu/Canonical, en el caso de docker.io y Docker Inc. en el caso de docker-engine)
docker-compose
Herramienta para definir y ejecutar aplicaciones multicontenedor en Docker.
apt install docker.io docker-compose -y
Clonamos el repositorio https://github.com/wazuh/wazuh-docker.git:
git clone https://github.com/wazuh/wazuh-docker.git -b v4.7.4
Ahora contaremos con un nuevo directorio wazuh-docker:
Nos situamos en el directorio wazuh-docker
y navegamos al subdirectorio single-node
, donde realizaremos las configuraciones necesarias.
Ahora vamos a generar algunos certificados autofirmados para nuestro nodo, a partir de una imagen de Docker que ya tendremos al haber clonado el repositorio de Git Hub. Para ello introducimos la siguiente línea de comandos:
docker-compose -f generate-indexer-certs.yml run --rm generator
Por último iniciamos los contenedores:
docker-compose up -d
Una vez desplegados los contenedores, podemos introducir el siguiente comando, el cual nos permitirá tener una visión en tiempo real la ejecución de los contenedores:
docker stats
Acceder al panel de control de Wazuh
Desde Linode, accedemos al apartado de red, donde nos fijaremos en el nombre DNS inverso de la instancia:
Copiamos la dirección y la pegamos en el buscador de nuestro navegador para acceder a él.
Seguramente nos saldrá un mensaje de advertencia del propio navegador (o del antivirus, como es mi caso). Esto se debe a que el certificado del sitio es autofirmado.
Aceptamos riesgos y continuamos.
Nos aparecerá una pantalla de login donde tendremos que introducir las credenciales para acceder al panel de control. Al ser una implementación de Wazuh en Docker, las credenciales predeterminadas son admin:SecretPassword
.
Al introducir las credenciales ya estaremos ante el panel de control de Wazuh:
Cambiar credenciales predeterminadas
Una vez hemos accedido al panel de control de Wazuh, es recomendable cambiar la contraseña de los usuarios, ya que las que vienen por defecto no son seguras, además de que estas son conocidas públicamente. Esto puede suponer una brecha de seguridad para nuestro sistema, por lo que vamos a ver como solucionar esto.
Para ello es esencial saber que en Wazuh existen 2 tipos de usuarios:
Usuarios del indexador
admin
kibanaserver
Usuarios de la API
wazuh-wui
Cambiar contraseñas de usuarios del indexador
Cambiar la contraseña de estos usuarios podría parecer que es algo tan simple como acceder a la configuración desde el panel de control y seleccionar la opción “cambiar contraseña”, pero esto no funciona con el usuario administrador por defecto.
Para hacer esto, hay que tener en cuenta que solo se puede cambiar la contraseña de un usuario a la vez.
internal_users.yml
. Si no se hace, este procedimiento hará que se eliminen.Generar el hash para la nueva contraseña
Paramos los contenedores:
docker-compose down
Generamos el hash de la nueva contraseña que vamos a establecer para asegurar que se almacena de manera segura. Para ello vamos a usar un contenedor de docker que genera hashes a partir de los valores de contraseña introducidos:
docker run --rm -ti wazuh/wazuh-indexer:4.7.4 bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.sh
El resultado de la ejecución de este contenedor se vería de la siguiente forma:
Copiamos el hash resultante y abrimos el archivo: ./config/wazuh_indexer/internal_users.yml
Una vez ahí cambiamos el valor del hash por el nuevo:
Por último guardamos los cambios realizados.
Establecer la nueva contraseña
Abrimos el archivo docker-compose.yml
e incluimos la nueva contraseña en los lugares correspondientes:
- wazuh.manager
- wazuh.dashboard
Para aplicar los cambios iniciamos los contenedores de Docker:
docker-compose up -d
Una vez hecho esto listamos los contenedores en ejecución y anotamos el nombre del contenedor del indexador (en mi caso es single-node_wazuh.indexer_1):
docker-compose ps
Accedemos al contenedor:
docker exec -it {nombre_del_contenedor} bash
Ahí establecemos las siguientes variables:
export INSTALLATION_DIR=/usr/share/wazuh-indexer
CACERT=$INSTALLATION_DIR/certs/root-ca.pem
KEY=$INSTALLATION_DIR/certs/admin-key.pem
CERT=$INSTALLATION_DIR/certs/admin.pem
export JAVA_HOME=/usr/share/wazuh-indexer/jdk
Esperamos durante un breve periodo de tiempo (este depende del tamaño de nuestra infraestructura Wazuh) y posteriormente ejecutamos el script securityadmin.sh
:
bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -cd /usr/share/wazuh-indexer/opensearch-security/ -nhnv -cacert $CACERT -cert $CERT -key $KEY -p 9200 -icl
Una vez finalizada la ejecución, salimos del contenedor y ya estarían listos nuestros cambios.
Ahora, habría que repetir el mismo proceso con el usuario kibanaserver.
Cambio de contraseña del usuario de la API
Abrimos el archivo ./config/wazuh_dashboard/wazuh.yml
y modificamos el valor de password por la contraseña que nosotros queramos:
Posteriormente editamos el archivo docker-compose.yml
e incluimos el valor de la nueva contraseña en los lugares que corresponda:
- wazuh-manager
- wazuh-dashboard
Por último iniciamos de nuevo los contenedores:
docker-compose up -d
Para finalizar, probamos a acceder al panel de control de Wazuh con nuestras nuevas credenciales y si los pasos se han realizado correctamente, podrás ver que estarás de nuevo en el dashboard de Wazuh.
Conclusión
Desplegar Wazuh con Docker es una tarea relativamente sencilla que no requiere de grandes conocimientos técnicos, y el uso de proveedores de hosting en la nube como Linode facilita aún más el proceso gracias a sus herramientas útiles y su infraestructura robusta. Aunque la implementación de Wazuh en Docker tiene sus ventajas, como la facilidad de despliegue, también presenta desafíos en la configuración y la integración de funciones debido a la naturaleza de los contenedores. Sin embargo, la opción de desplegar sistemas en la nube es muy atractiva por los beneficios que ofrece, como la disponibilidad, escalabilidad, flexibilidad y reducción de costes. Linode, a pesar de algunos inconvenientes iniciales, se presenta como una solución sólida y confiable para alojar instancias en la nube y ofrecer diversos servicios.
Atlas9, cambio y corto.
Subscribe to my newsletter
Read articles from H. Romo directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
H. Romo
H. Romo
Mi objetivo en Hashnode es aportar información sobre soluciones TI útiles en el día a día, en ámbitos empresariales y domésticos, enfocándome en la comunidad hispanohablante.