Implementar SOC: Instalación Opensearch
Seguimos implementando un SOC bajo Opensource como en anteriores entradas (las dejo al final del artículo).
Hoy vamos a montar bajo Debian nuevamente, una alternativa a ElasticSearch, en este caso me decidiré por OpenSearch. Montamos Wazuh, que se centra en la seguridad y monitorización, mientras que OpenSearch está enfocado en la búsqueda y análisis de datos. La idea es integrar Wazuh y el resto de herramientas con OpenSearch en próximas entradas. Os explico un poco más en qué consiste.
Qué es Opensearch
OpenSearch es una suite de software de código abierto para búsqueda y análisis de datos. Este proyecto fue iniciado por Amazon como un fork del proyecto Elasticsearch 7.10.2 y Kibana 7.10.2, después de que Elasticsearch y Kibana se licenciaran bajo la Elastic License, que no es compatible con muchos proyectos de código abierto debido a sus restricciones.
Componentes Principales de OpenSearch
OpenSearch incluye dos componentes principales:
- OpenSearch: El sucesor de Elasticsearch, es un servidor de búsqueda y análisis distribuido y escalable. Se utiliza principalmente para la indexación rápida y eficiente de grandes volúmenes de datos y la realización de búsquedas complejas.
- OpenSearch Dashboards: Anteriormente conocido como Kibana, es una plataforma de visualización de datos para OpenSearch. Permite a los usuarios crear gráficos y dashboards interactivos para explorar y visualizar datos indexados en OpenSearch.
Características y Funcionalidades de OpenSearch
- Búsqueda y Análisis: OpenSearch permite realizar búsquedas y análisis en tiempo real, lo que es ideal para aplicaciones que requieren una rápida recuperación de información y análisis detallado, como sistemas de monitoreo, aplicaciones de e-commerce, y más.
- Escalabilidad: Al igual que Elasticsearch, OpenSearch es altamente escalable, permitiendo la distribución de datos y búsquedas en múltiples nodos para manejar grandes volúmenes de datos y tráfico de consulta sin degradar el rendimiento.
- Compatibilidad con APIs: OpenSearch mantiene compatibilidad con la mayoría de las APIs de Elasticsearch, lo que permite a los usuarios migrar sus sistemas existentes de Elasticsearch a OpenSearch con relativa facilidad.
- Comunidad y Código Abierto: Siendo un proyecto de código abierto, OpenSearch es desarrollado y mantenido por una comunidad activa. Esto permite una rápida evolución del software y la capacidad de influir en su desarrollo.
- Plugins y Extensibilidad: OpenSearch soporta una variedad de plugins que extienden su funcionalidad, incluyendo seguridad avanzada, aprendizaje automático, alertas, y más.
Uso de OpenSearch
OpenSearch se puede utilizar en una variedad de aplicaciones, incluyendo:
- Sistemas de Gestión de Logs: Para recopilar, buscar y analizar logs de sistemas y aplicaciones, facilitando el diagnóstico y la resolución de problemas.
- Análisis de Datos: Como herramienta para procesar y visualizar grandes conjuntos de datos en diversas aplicaciones industriales y de investigación.
- Motor de Búsqueda de Sitios Web: Proporcionando capacidades de búsqueda potentes y rápidas para sitios web y aplicaciones.
- Monitoreo en Tiempo Real: Analizando y visualizando datos en tiempo real para aplicaciones de monitoreo de infraestructura o rendimiento de aplicaciones.
Requerimientos OpenSearch
Aunque no aparece Debian en el listado, puede correr como veremos en un momento:
Recomiendan utilizar almacenamiento SSD y en local.
La versión de Java que utiliza es:
Puertos de comunicación necesarios:
Será necesario ampliar en nuestras máquinas el siguiente valor en entornos de producción y deshabilitar la swap para mejorar el rendimiento:
- Editamos fichero “/etc/sysctl.conf” y valor:
1vm.max_map_count=262144
Os dejo el procedimiento:
1 2 3 4 5 6 7 8 9 10 11 |
# Disable memory paging and swapping. sudo swapoff -a # Edit the sysctl config file that defines the host's max map count. sudo vi /etc/sysctl.conf # Set max map count to the recommended value of 262144. vm.max_map_count=262144 # Reload the kernel parameters. sudo sysctl -p |
Descarga de paquetes OpenSearch para Debian
Podemos descargar paquetes para diferentes distribuciones Linux. En mi caso utilizaré la instalación bajo repositorio APT para Debian 12, que va a ser mucho más cómodo de mantener e instalar.
- PAQUETES: https://opensearch.org/downloads.html
- Enlaces de instalación:
Instalar OpenSearch en Debian
Mi instalación va a ir sobre un contenedor LXC Debian 12 en Proxmox, así que tengo que instalar algún paquete adicional, porque son imágenes bastante comprimidas.
Instalo entre otras dependencias como “curl” o “gpg” para poder hacer las descargas y la instalación de la herramienta:
1 |
root@OPENSEARCH:~# apt-get update && apt-get install lsb-release ca-certificates gnupg2 curl gpg -y |
Verificamos las huellas digitales, ya que el paquete de Debian para OpenSearch no está firmado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
root@OPENSEARCH:~# curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch/2.13.0/opensearch-2.13.0-linux-x64.deb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 841M 100 841M 0 0 95.3M 0 0:00:08 0:00:08 --:--:-- 98.5M root@OPENSEARCH:~# curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch/2.13.0/opensearch-2.13.0-linux-x64.deb.sig % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 287 100 287 0 0 597 0 --:--:-- --:--:-- --:--:-- 597 root@OPENSEARCH:~# curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --import - gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4300 100 4300 0 0 101k 0 --:--:-- --:--:-- --:--:-- 102k gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key 39D319879310D3FC: public key "OpenSearch project <opensearch@amazon.com>" imported gpg: Total number processed: 1 gpg: imported: 1 root@OPENSEARCH:~# gpg --verify opensearch-2.13.0-linux-x64.deb.sig opensearch-2.13.0-linux-x64.deb gpg: Signature made Tue Apr 2 21:52:45 2024 UTC gpg: using RSA key C2EE2AF6542C03B4 gpg: Good signature from "OpenSearch project <opensearch@amazon.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: C5B7 4989 65EF D1C2 924B A9D5 39D3 1987 9310 D3FC Subkey fingerprint: 2187 3199 B103 0FCD 49DA 83F8 C2EE 2AF6 542C 03B4 |
Descargamos el resto de paquetes necesarios:
1 2 3 4 5 6 7 |
root@OPENSEARCH:~# curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4300 100 4300 0 0 30054 0 --:--:-- --:--:-- --:--:-- 30069 root@OPENSEARCH:~# echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" | tee /etc/apt/sources.list.d/opensearch-2.x.list deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main |
Lanzamos la instalación, colocando una contraseña para el usuario “admin”:
1 |
root@OPENSEARCH:~# env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> apt-get install opensearch |
Podemos revisar las versiones que nos deja instalar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
root@OPENSEARCH:~# apt update Hit:1 http://security.debian.org bookworm-security InRelease Hit:2 http://deb.debian.org/debian bookworm InRelease Hit:3 http://deb.debian.org/debian bookworm-updates InRelease Get:4 https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable InRelease [7535 B] Get:5 https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable/main amd64 Packages [2350 B] Fetched 9885 B in 0s (25.4 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. root@OPENSEARCH:~# apt list -a opensearch Listing... Done opensearch/stable 2.13.0 amd64 opensearch/stable 2.12.0 amd64 opensearch/stable 2.11.1 amd64 opensearch/stable 2.11.0 amd64 opensearch/stable 2.10.0 amd64 opensearch/stable 2.9.0 amd64 opensearch/stable 2.8.0 amd64 opensearch/stable 2.7.0 amd64 opensearch/stable 2.6.0 amd64 opensearch/stable 2.5.0 amd64 |
Preparamos el servicio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
root@OPENSEARCH:~# systemctl enable opensearch Synchronizing state of opensearch.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable opensearch Created symlink /etc/systemd/system/multi-user.target.wants/opensearch.service -> /lib/systemd/system/opensearch.service. root@OPENSEARCH:~# systemctl start opensearch root@OPENSEARCH:~# systemctl status opensearch * opensearch.service - OpenSearch Loaded: loaded (/lib/systemd/system/opensearch.service; enabled; preset: > Active: active (running) since Mon 2024-05-13 19:25:55 UTC; 22s ago Docs: https://opensearch.org/ Main PID: 4549 (java) Tasks: 86 (limit: 76823) Memory: 1.3G CPU: 20.713s CGroup: /system.slice/opensearch.service `-4549 /usr/share/opensearch/jdk/bin/java -Xshare:auto -Dopensear> May 13 19:25:46 OPENSEARCH systemd-entrypoint[4549]: WARNING: System::setSecur> May 13 19:25:46 OPENSEARCH systemd-entrypoint[4549]: WARNING: Please consider > May 13 19:25:46 OPENSEARCH systemd-entrypoint[4549]: WARNING: System::setSecur> May 13 19:25:46 OPENSEARCH systemd-entrypoint[4549]: May 13, 2024 7:25:46 PM s> May 13 19:25:46 OPENSEARCH systemd-entrypoint[4549]: WARNING: COMPAT locale pr> May 13 19:25:47 OPENSEARCH systemd-entrypoint[4549]: WARNING: A terminally dep> May 13 19:25:47 OPENSEARCH systemd-entrypoint[4549]: WARNING: System::setSecur> May 13 19:25:47 OPENSEARCH systemd-entrypoint[4549]: WARNING: Please consider > May 13 19:25:47 OPENSEARCH systemd-entrypoint[4549]: WARNING: System::setSecur> May 13 19:25:55 OPENSEARCH systemd[1]: Started opensearch.service - OpenSearch. lines 1-21/21 (END) |
Comprobamos que funciona:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
root@OPENSEARCH:~# curl -X GET https://localhost:9200 -u 'admin:password-usuario' --insecure { "name" : "OPENSEARCH", "cluster_name" : "opensearch", "cluster_uuid" : "mG2NHTJrTjyu_UC7LCft8A", "version" : { "distribution" : "opensearch", "number" : "2.13.0", "build_type" : "deb", "build_hash" : "7ec678d1b7c87d6e779fdef94e33623e1f1e2647", "build_date" : "2024-03-26T00:13:13.172253920Z", "build_snapshot" : false, "lucene_version" : "9.10.0", "minimum_wire_compatibility_version" : "7.10.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "The OpenSearch Project: https://opensearch.org/" } |
Y los componentes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
root@OPENSEARCH:~# curl -X GET https://localhost:9200/_cat/plugins?v -u 'admin:<custom-admin-password>' --insecure name component version OPENSEARCH opensearch-alerting 2.13.0.0 OPENSEARCH opensearch-anomaly-detection 2.13.0.0 OPENSEARCH opensearch-asynchronous-search 2.13.0.0 OPENSEARCH opensearch-cross-cluster-replication 2.13.0.0 OPENSEARCH opensearch-custom-codecs 2.13.0.0 OPENSEARCH opensearch-flow-framework 2.13.0.0 OPENSEARCH opensearch-geospatial 2.13.0.0 OPENSEARCH opensearch-index-management 2.13.0.0 OPENSEARCH opensearch-job-scheduler 2.13.0.0 OPENSEARCH opensearch-knn 2.13.0.0 OPENSEARCH opensearch-ml 2.13.0.0 OPENSEARCH opensearch-neural-search 2.13.0.0 OPENSEARCH opensearch-notifications 2.13.0.0 OPENSEARCH opensearch-notifications-core 2.13.0.0 OPENSEARCH opensearch-observability 2.13.0.0 OPENSEARCH opensearch-performance-analyzer 2.13.0.0 OPENSEARCH opensearch-reports-scheduler 2.13.0.0 OPENSEARCH opensearch-security 2.13.0.0 OPENSEARCH opensearch-security-analytics 2.13.0.0 OPENSEARCH opensearch-skills 2.13.0.0 OPENSEARCH opensearch-sql 2.13.0.0 |
Como veis, OpenSearch está instalado y funcionando, ahora necesitamos un dashboard que nos facilite la gestión.
Instalar OpenSearch Dashboard en Debian
Para OpenSearch Dashboard, seguimos un procedimiento muy parecido, lo dejo en un bloque para no extenderlo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@OPENSEARCH:~# curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.13.0/opensearch-dashboards-2.13.0-linux-x64.deb % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 2 300M 2 9160k 0 0 15.8M 0 0:00:18 --:--:-- 0:00:18 15.8 33 300M 33 101M 0 0 65.0M 0 0:00:04 0:00:01 0:00:03 65.0 66 300M 66 201M 0 0 78.3M 0 0:00:03 0:00:02 0:00:01 78.3100 300M 100 300M 0 0 84.3M 0 0:00:03 0:00:03 --:--:-- 84.3M root@OPENSEARCH:~# curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.13.0/opensearch-dashboards-2.13.0-linux-x64.deb.sig % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 100 287 100 287 0 0 642 0 --:--:-- --:--:-- --:--:-- 643 root@OPENSEARCH:~# curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --import - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 100 4300 100 4300 0 0 105k 0 --:--:-- --:--:-- --:--:-- 107k gpg: key 39D319879310D3FC: "OpenSearch project <opensearch@amazon.com>" not changed gpg: Total number processed: 1 gpg: unchanged: 1 root@OPENSEARCH:~# gpg --verify opensearch-dashboards-2.13.0-linux-x64.deb.sig opensearch-dashboards-2.13.0-linux-x64.deb gpg: Signature made Tue Apr 2 21:57:17 2024 UTC gpg: using RSA key C2EE2AF6542C03B4 gpg: Good signature from "OpenSearch project <opensearch@amazon.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: C5B7 4989 65EF D1C2 924B A9D5 39D3 1987 9310 D3FC Subkey fingerprint: 2187 3199 B103 0FCD 49DA 83F8 C2EE 2AF6 542C 03B4 |
Agregamos repositorio:
1 2 3 4 5 6 7 8 9 |
root@OPENSEARCH:~# curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-ke yring % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 100 4300 100 4300 0 0 113k 0 --:--:-- --:--:-- --:--:-- 116k root@OPENSEARCH:~# echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/apt stable main" | tee /etc/apt/sources.list.d/opensearch-dashboards-2.x.lis t deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/apt stable main |
Actualizamos:
1 |
root@OPENSEARCH:~# apt-get update |
Comprobamos las versiones disponibles:
1 2 3 4 5 6 7 8 9 10 11 12 |
root@OPENSEARCH:~# apt list -a opensearch-dashboards Listing... Done opensearch-dashboards/stable 2.13.0 amd64 opensearch-dashboards/stable 2.12.0 amd64 opensearch-dashboards/stable 2.11.1 amd64 opensearch-dashboards/stable 2.11.0 amd64 opensearch-dashboards/stable 2.10.0 amd64 opensearch-dashboards/stable 2.9.0 amd64 opensearch-dashboards/stable 2.8.0 amd64 opensearch-dashboards/stable 2.7.0 amd64 opensearch-dashboards/stable 2.6.0 amd64 opensearch-dashboards/stable 2.5.0 amd64 |
Instalamos la última versión:
1 |
root@OPENSEARCH:~# env OPENSEARCH_INITIAL_ADMIN_PASSWORD=password-usuario apt-get install opensearch-dashboards |
Habilitamos el servicio:
1 2 3 |
systemctl enable opensearch-dashboards systemctl start opensearch-dashboards systemctl status opensearch-dashboards |
Cuando intentáis acceder por primera vez al dashboard a través del puerto 5601, veréis que no es posible, salvo que accedáis vía localhost. En mi caso, como es un LXC sin interfaz gráfica, deberemos modificar el valor del siguiente fichero:
1 2 3 4 5 6 |
## MODIFICAR FICHERO vi /etc/opensearch-dashboards/opensearch_dashboards.yml ## AGREGAR ESTA LINEA server.host: 0.0.0.0 ## REINICIAMOS UNA VEZ GUARDADA LA MODIFICACION (:wq) systemctl restart opensearch-dashboards |
Revisamos el acceso. El usuario “admin” y la contraseña que hemos ingresado en la instalación:
ENTRADAS RELACIONADAS CREACION SOC OPENSOURCE
-
- Crear SOC mediante herramientas OpenSource
- Implementar SOC: Instalación Suricata bajo Proxmox
- Instalar Docker sobre contenedor LXC Proxmox
- Implementar SOC: Instalación Wazuh
- Implementar SOC: Instalar TheHive, Cortex y MISP
- Implementar SOC: Instalación Patrowl
- Implementar SOC: Instalación Opensearch
- Implementar SOC: Decoders, Playbooks y Workflows
- Implementar SOC: Directorios Windows, Linux y MacOS a revisar
- Implementar SOC: Monitorización Completa con Prometheus, AlertManager, Grafana y Loki bajo Contenedores
- Implementar SOC: Instalar Security Onion sobre Proxmox
- Implementar SOC: Códigos de estado, Mensajes y Alertas
- Suricata: Cómo crear y testear reglas personalizadas
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?