Actualización Wazuh Manager Para realizar la actualización del servidor de Wazuh procedemos a identificar la versión que tenemos. Se puede identificar desde el Dashboard haciendo clic en la parte superior derecha. Identificamos que tenemos la versión v 4.7.3. En la página oficial de Wazuh se encuentra la documentación donde nos indican cuál es la versión actual en la esquina superior derecha, por lo que procedemos a verificar la última versión. Se deben verificar las características de hardware necesarias para que no se tengan problemas de espacio en disco y cantidad de memoria RAM requerida. Como los servicios de Indexador, Dashboard y Manager de Wazuh se encuentran en el mismo equipo, poseen la misma dirección IP y no se tiene configuración de cluster, se procede a detener estos servicios de Wazuh, con la respectiva verificación. sudo systemctl stop wazuh-manager sudo systemctl stop wazuh-dashboard sudo systemctl stop wazuh-indexer sudo systemctl status wazuh-manager sudo systemctl status wazuh-dashboard sudo systemctl status wazuh-indexer Posteriormente realizamos una actualización de los repositorios. sudo apt-get update Listamos los paquetes que pueden actualizarse para encontrar wazuh-dashboard, wazuh-indexer y wazuh-manager en la lista. sudo apt list --upgradable Por ultimo realizamos la actualización de paquetes con el comando upgrade. sudo apt upgrade Durante la actualización de los componentes del sistema, se nos proporciona la opción de reemplazar archivos en la funcionalidad del dashboard con la siguiente consulta, en la cual debemos seleccionar la opción "D" para revisar los cambios implementados en los archivos de configuración. Fichero de configuración /etc/wazuh-dashboard/opensearch_dashboards.yml' ==> Modificado (por usted o por un script) desde la instalación. ==> El distribuidor del paquete ha publicado una versión actualizada. ¿Qué quisiera hacer al respecto? Sus opciones son: Y o I : instalar la versión del desarrollador del paquete N o O : conservar la versión que tiene instalada actualmente D : mostrar las diferencias entre versiones Z : ejecutar un intérprete de órdenes para examinar la situación La acción por omisión es conservar la versión actual. *** opensearch_dashboards.yml (Y/I/N/O/D/Z) [por omisión=N] ? D --- /etc/wazuh-dashboard/opensearch_dashboards.yml 2024-08-01 20:39:58.576766390 +0000 +++ /etc/wazuh-dashboard/opensearch_dashboards.yml.dpkg-new 2023-05-05 12:31:50.000000000 +0000 @@ -1,15 +1,14 @@ server.host: 0.0.0.0 -opensearch.hosts: https://127.0.0.1:9200 server.port: 443 +opensearch.hosts: https://localhost:9200 opensearch.ssl.verificationMode: certificate -# opensearch.username: kibanaserver -# opensearch.password: kibanaserver +#opensearch.username: +#opensearch.password: opensearch.requestHeadersAllowlist: ["securitytenant","Authorization"] opensearch_security.multitenancy.enabled: false opensearch_security.readonly_mode.roles: ["kibana_read_only"] server.ssl.enabled: true -server.ssl.key: "/etc/wazuh-dashboard/certs/wazuh-dashboard-key.pem" -server.ssl.certificate: "/etc/wazuh-dashboard/certs/wazuh-dashboard.pem" +server.ssl.key: "/etc/wazuh-dashboard/certs/dashboard-key.pem" +server.ssl.certificate: "/etc/wazuh-dashboard/certs/dashboard.pem" opensearch.ssl.certificateAuthorities: ["/etc/wazuh-dashboard/certs/root-ca.pem"] -uiSettings.overrides.defaultRoute: /app/wazuh -opensearch_security.cookie.secure: true +uiSettings.overrides.defaultRoute: /app/wz-home El mismo caso se presenta multiples veces en la instalación de Wazuh Indexer por lo que seleccionamos la misma opción "D" para revisar los cambios que se realizan en nuestros archivos de configuración: --- /etc/init.d/wazuh-indexer 1970-01-01 00:00:00.000000000 +0000 +++ /etc/init.d/wazuh-indexer.dpkg-new 2024-08-30 10:12:22.000000000 +0000 @@ -0,0 +1,168 @@ +#!/usr/bin/env bash +# +# /etc/init.d/wazuh-indexer -- startup script for Wazuh indexer +# +### BEGIN INIT INFO +# Provides: wazuh-indexer +# Required-Start: $network $remote_fs $named +# Required-Stop: $network $remote_fs $named +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Starts wazuh-indexer +# Description: Starts wazuh-indexer using start-stop-daemon +### END INIT INFO +set -e -o pipefail +PATH=/bin:/usr/bin:/sbin:/usr/sbin +NAME=wazuh-indexer +DESC=$NAME +DEFAULT=/etc/default/$NAME + +if [ `id -u` -ne 0 ]; then + echo "You need root privileges to run this script" + exit 1 +fi + +. /lib/lsb/init-functions + +if [ -r /etc/default/rcS ]; then + . /etc/default/rcS +fi + +# The following variables can be overwritten in $DEFAULT + +# Directory where the OpenSearch binary distribution resides +OPENSEARCH_HOME=/usr/share/$NAME + +# Additional Java OPTS +#OPENSEARCH_JAVA_OPTS= + +# Maximum number of open files +MAX_OPEN_FILES=65535 + +# Maximum amount of locked memory +#MAX_LOCKED_MEMORY= + +# OpenSearch configuration directory +OPENSEARCH_PATH_CONF=/etc/$NAME + +# Maximum number of VMA (Virtual Memory Areas) a process can own +MAX_MAP_COUNT=262144 + +# OpenSearch PID file directory +PID_DIR="/var/run/$NAME" + +# End of variables that can be overwritten in $DEFAULT + +# overwrite settings from default file +if [ -f "$DEFAULT" ]; then + . "$DEFAULT" +fi + +# Define other required variables +PID_FILE="$PID_DIR/$NAME.pid" +DAEMON=$OPENSEARCH_HOME/bin/opensearch +DAEMON_OPTS="-d -p $PID_FILE" + +export OPENSEARCH_JAVA_OPTS +export OPENSEARCH_PATH_CONF +export JAVA_HOME +export OPENSEARCH_JAVA_HOME + +if [ ! -x "$DAEMON" ]; then + echo "The wazuh-indexer startup script does not exists or it is not executable, tried: $DAEMON" + exit 1 +fi + +case "$1" in + start) + + log_daemon_msg "Starting $DESC" + + pid=`pidofproc -p $PID_FILE wazuh-indexer` + if [ -n "$pid" ] ; then + log_begin_msg "Already running." + log_end_msg 0 + exit 0 + fi + + # Ensure that the PID_DIR exists (it is cleaned at OS startup time) + if [ -n "$PID_DIR" ] && [ ! -e "$PID_DIR" ]; then + mkdir -p "$PID_DIR" && chown wazuh-indexer:wazuh-indexer "$PID_DIR" + fi + if [ -n "$PID_FILE" ] && [ ! -e "$PID_FILE" ]; then + touch "$PID_FILE" && chown wazuh-indexer:wazuh-indexer "$PID_FILE" + fi + + if [ -n "$MAX_OPEN_FILES" ]; then + ulimit -n $MAX_OPEN_FILES + fi + + if [ -n "$MAX_LOCKED_MEMORY" ]; then + ulimit -l $MAX_LOCKED_MEMORY + fi + + if [ -n "$MAX_MAP_COUNT" -a -f /proc/sys/vm/max_map_count ] && [ "$MAX_MAP_COUNT" -gt $(cat /proc/sys/vm/m> + sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT + fi + + # Start Daemon + start-stop-daemon -d $OPENSEARCH_HOME --start --user wazuh-indexer -c wazuh-indexer --pidfile "$PID_FILE" > + return=$? + if [ $return -eq 0 ]; then + i=0 + timeout=10 + # Wait for the process to be properly started before exiting + until { kill -0 `cat "$PID_FILE"`; } >/dev/null 2>&1 + do + sleep 1 + i=$(($i + 1)) + if [ $i -gt $timeout ]; then + log_end_msg 1 + exit 1 + fi + done + fi + log_end_msg $return + exit $return + ;; + stop) + log_daemon_msg "Stopping $DESC" + + if [ -f "$PID_FILE" ]; then + start-stop-daemon --stop --pidfile "$PID_FILE" \ + --user wazuh-indexer \ + --quiet \ + --retry forever/TERM/20 > /dev/null + if [ $? -eq 1 ]; then + log_progress_msg "$DESC is not running but pid file exists, cleaning up" + elif [ $? -eq 3 ]; then + PID="`cat $PID_FILE`" + log_failure_msg "Failed to stop $DESC (pid $PID)" + exit 1 + fi + rm -f "$PID_FILE" + else + log_progress_msg "(not running)" + fi + log_end_msg 0 + ;; + status) + status_of_proc -p $PID_FILE wazuh-indexer wazuh-indexer && exit 0 || exit $? + ;; + restart|force-reload) + if [ -f "$PID_FILE" ]; then + $0 stop + fi + $0 start + ;; + *) + log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}" + exit 1 + ;; +esac + +exit 0 --- /etc/wazuh-indexer/jvm.options 2024-08-01 20:37:13.516578584 +0000 +++ /etc/wazuh-indexer/jvm.options.dpkg-new 2024-08-30 10:14:23.000000000 +0000 @@ -19,8 +19,8 @@ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space --Xms1955m --Xmx1955m +-Xms1g +-Xmx1g ################################################################ ## Expert settings @@ -79,13 +79,15 @@ # Explicitly allow security manager (https://bugs.openjdk.java.net/browse/JDK-8270380) 18-:-Djava.security.manager=allow +# JDK 20+ Incubating Vector Module for SIMD optimizations; +# disabling may reduce performance on vector optimized lucene +20:--add-modules=jdk.incubator.vector + +# HDFS ForkJoinPool.common() support by SecurityManager +-Djava.util.concurrent.ForkJoinPool.common.threadFactory=org.opensearch.secure_sm.SecuredForkJoinWorkerThreadFact> + ## OpenSearch Performance Analyzer -Dclk.tck=100 -Djdk.attach.allowAttachSelf=true -Djava.security.policy=file:///etc/wazuh-indexer/opensearch-performance-analyzer/opensearch_security.policy ---add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED - -## OpenDistro Performance Analyzer --Dclk.tck=100 --Djdk.attach.allowAttachSelf=true --Djava.security.policy=file:///usr/share/wazuh-indexer/plugins/opendistro-performance-analyzer/pa_config/es_secur> +--add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED \ No newline at end of file --- /etc/wazuh-indexer/opensearch-security/internal_users.yml 2024-08-01 20:40:06.324974273 +0000 +++ /etc/wazuh-indexer/opensearch-security/internal_users.yml.dpkg-new 2024-08-30 10:14:23.000000000 +0000 @@ -1,19 +1,36 @@ --- +# This is the internal user database +# The hash value is a bcrypt hash and can be generated with plugin/tools/hash.sh + _meta: type: "internalusers" config_version: 2 + +# Define your internal users here + +## Demo users + admin: - hash: $2y$12$Cu8jP7gd1mJlSClvW82kCO69/S7Yf74IGdY9bPWcTeHjwoH0uYr6q + hash: "$2a$12$VcCDgh2NDk07JGN0rjGbM.Ad41qVR/YFJcgHp0UGns5JDymv..TOG" reserved: true backend_roles: - "admin" description: "Demo admin user" + +anomalyadmin: + hash: "$2y$12$TRwAAJgnNo67w3rVUz4FIeLx9Dy/llB79zf9I15CKJ9vkM4ZzAd3." + reserved: false + opendistro_security_roles: + - "anomaly_full_access" + description: "Demo anomaly admin user, using internal role" + kibanaserver: - hash: $2y$12$kr4ikvWjGejjmlMnz6wTJ.sIYy6lR9uEy1ljW1l3w8eJMBrNwFd7S + hash: "$2a$12$4AcgAt3xwOWadA5s5blL6ev39OXDNhmOesEoo33eZtrq2N0YrU3H." reserved: true - description: "Demo kibanaserver user" + description: "Demo OpenSearch Dashboards user" + kibanaro: - hash: $2y$12$/nkeD10mgx3qKoD7W6kWwO7WCMPmsS/pgHj0S3GhiYhzgeCS5JJHu + hash: "$2a$12$JJSXNfTowz7Uu5ttXfeYpeYE0arACvcwlPBStB1F.MI7f0U9Z4DGC" reserved: false backend_roles: - "kibanauser" @@ -22,22 +39,25 @@ attribute1: "value1" attribute2: "value2" attribute3: "value3" - description: "Demo kibanaro user" + description: "Demo read only user, using external role mapping" + logstash: - hash: $2y$12$Z7sPb.rL8/MGxz7jtXdbFOoURmtGIW/G4vLjA.96M8wH8y.4FLTUu + hash: "$2a$12$u1ShR4l4uBS3Uv59Pa2y5.1uQuZBrZtmNfqB3iM/.jL0XoV9sghS2" reserved: false backend_roles: - "logstash" - description: "Demo logstash user" + description: "Demo logstash user, using external role mapping" + readall: - hash: $2y$12$T0fcXbC8L/fut/BLGV5/7uSleSxKlrX53LjWEX4mZ9XNlaYhWzSkC + hash: "$2a$12$ae4ycwzwvLtZxwZ82RmiEunBbIPiAmGZduBAjKN0TXdwQFtCwARz2" reserved: false backend_roles: - "readall" - description: "Demo readall user" + description: "Demo readall user, using external role mapping" + snapshotrestore: - hash: $2y$12$sS6Ecv.XpRDuB6Xw1N7OCu8ubT1xB5uKnIMtqzi32ZyD98IotSqXW + hash: "$2y$12$DpwmetHKwgYnorbgdvORCenv4NAK8cPUg8AI6pxLCuWf/ALc0.v7W" reserved: false backend_roles: - "snapshotrestore" - description: "Demo snapshotrestore user" + description: "Demo snapshotrestore user, using external role mapping" Modificamos el nombre de los certificados de Wazuh dashboard para que estén de acuerdo a la nueva configuración. sudo mv /etc/wazuh-dashboard/certs/wazuh-dashboard-key.pem /etc/wazuh-dashboard/certs/dashboard-key.pem sudo mv /etc/wazuh-dashboard/certs/wazuh-dashboard.pem /etc/wazuh-dashboard/certs/dashboard.pem Cambiamos la lista de permisos. sudo chown wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs/*.pem sudo chmod 600 /etc/wazuh-dashboard/certs/*.pem Verificamos la configuración de la API por el puerto "55000". sudo nano /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml hosts: - default: url: https://127.0.0.1 port: 55000 username: wazuh-wui password: "Contraseña Wazuh-Wui" run_as: false Por último para la cantidad de memoria RAM asignada para los procesos modificamos el archivo: sudo nano /etc/wazuh-indexer/jvm.options Dentro del archivo cambiamos "Xms1g" por "Xms2g" En el caso de la modificación de permisos por actualizar desde una versión inferior a 4.5.7 se vuelve a modificar el cambio de directorio del indexador. sudo chmod -R 755 /usr/share/wazuh-indexer sudo chown -R wazuh-indexer:wazuh-indexer /usr/share/wazuh-indexer Realizamos un " restart " a cada uno de los componentes de Wazuh para aplicar los cambios y esperamos aproximadamente 2 minutos para utilizar los servicios. sudo systemctl daemon-reload sudo systemctl restart wazuh-manager sudo systemctl restart wazuh-dashboard sudo systemctl restart wazuh-indexer sudo systemctl status wazuh-manager sudo systemctl status wazuh-dashboard sudo systemctl status wazuh-indexer En el caso del sistema Ubuntu server 22.04 en fecha 03-10-2024, se normalizó la utilización de la herramienta después de un reinicio y una espera de 5 minutos. sudo reboot Ingresamos al dashboard y verificamos que la versión de Wazuh se actualizó con éxito. Consideraciones a tomar en cuenta en caso de más de 50 agentes de Wazuh. nano /etc/wazuh-indexer/jvm.options Expandir la cantidad de recursos que se pueden utilizar en caso de exceso de eventos e incrementar según consumo de recursos Ej. a 2GB para indexación de elementos. # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms2048m -Xmx2048m