Guía de tecnologías

Instalar y asegurar OpenSearch en Rocky Linux 9

9 min read DevOps Actualizado 30 Sep 2025
OpenSearch en Rocky Linux 9: instalación y seguridad
OpenSearch en Rocky Linux 9: instalación y seguridad

OpenSearch es un motor de búsqueda y analítica 100% open source (fork de Elasticsearch/Kibana). Esta guía paso a paso muestra cómo instalar OpenSearch y OpenSearch Dashboards en Rocky Linux 9, asegurar la comunicación con certificados TLS/SSL, habilitar la seguridad (usuarios y roles) y optimizar la máquina para producción en un nodo único. Incluye checklist, buenas prácticas, procedimientos operativos y soluciones comunes.

Introducción

OpenSearch es un proyecto comunitario iniciado por Amazon, basado en forks de Elasticsearch y Kibana. Es una suite de búsqueda, análisis y visualización totalmente abierta con funcionalidades como seguridad empresarial, alertas, SQL, gestión de índices y ML básico.

En esta guía instalaremos OpenSearch (nodo único) y OpenSearch Dashboards en Rocky Linux 9, configuraremos TLS para node-to-node y cliente-REST, añadiremos usuarios con OpenSearch Security y cubriremos pasos operativos y de verificación.

Importante: los comandos y ejemplos usan la IP 192.168.5.25 y el hostname node-rock1. Sustituye esos valores por los de tu entorno.

Intención principal y variantes relacionadas

  • Instalar y asegurar OpenSearch en Rocky Linux 9
  • Instalar OpenSearch en RHEL/CentOS/Rocky
  • Configurar TLS para OpenSearch
  • Configurar OpenSearch Dashboards con autenticación
  • Buenas prácticas de despliegue de OpenSearch

Prerrequisitos

Antes de comenzar asegúrate de tener:

  • Un servidor con Rocky Linux 9 y al menos 4 GB de RAM (ejemplo usa 8 GB). IP: 192.168.5.25, hostname: node-rock1
  • Usuario no root con privilegios sudo
  • SELinux en modo permissive (o evalúa políticas necesarias en modo enforcing)
  • Conexión de red entre clientes y servidor para puertos 9200 (REST) y 5601 (Dashboards)

Nota importante: si vas a un entorno de producción con más nodos, adapta discovery.replica y otras configuraciones de cluster.

Preparar el sistema

Tareas previas: configurar hostname/FQDN, desactivar swap, ajustar vm.max_map_count.

  1. Establecer hostname y FQDN. Sustituye la IP por la de tu servidor:
sudo hostnamectl set-hostname node-rock1
echo '192.168.5.25  node-rock1.hwdomain.lan  node-rock1' >> /etc/hosts

Cierra la sesión y vuelve a entrar, luego verifica FQDN:

sudo hostname -f

Captura del comando hostname mostrando el FQDN

  1. Desactivar swap (recomendado para Elastic/OpenSearch):
sudo sed -i '/ swap / s/^\\(.*\\\)$/#\1/g' /etc/fstab
sudo swapoff -a

Verifica con:

free -m

La sección Swap debe mostrar 0.

Salida de free -m mostrando Swap 0

  1. Aumentar vm.max_map_count (requerido por Lucene):
sudo bash -c 'echo "vm.max_map_count=262144" >> /etc/sysctl.conf'
sudo sysctl -p

Verifica:

cat /proc/sys/vm/max_map_count

Debe devolver 262144.

Verificación de vm.max_map_count

Con esto el sistema está listo para la instalación.

Formas de instalar OpenSearch: comparación rápida

  • RPM (recomendado para RHEL/Rocky/CentOS): integración con systemd y SELinux
  • Tarball: portable, sin gestión de paquetes
  • Docker: rápido en entornos de contenedores; ojo con volúmenes y permisos
  • Kubernetes: para producción en cluster con StatefulSets

Decision brief: si gestionas servidores Linux clásicos, usa RPM; para pruebas rápidas, Docker o tarball.

Instalar OpenSearch (vía repositorio RPM)

  1. Añadir repositorio e inspeccionar:
sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo -o /etc/yum.repos.d/opensearch-2.x.repo
sudo dnf repolist

Deberías ver “OpenSearch 2.x” listado.

Lista de repositorios mostrando OpenSearch 2.x

  1. Consultar información del paquete:
sudo dnf info opensearch

En el repositorio suelen estar versiones para x86_64 y aarch64.

Versiones de OpenSearch disponibles

  1. Instalar:
sudo dnf install opensearch

Acepta la clave GPG cuando se solicite.

Instalación de OpenSearch mediante dnf

  1. Recargar systemd y arrancar el servicio:
sudo systemctl daemon-reload
sudo systemctl start opensearch
sudo systemctl enable opensearch

Verifica el estado:

sudo systemctl status opensearch

Debe aparecer active (running) y enabled.

Estado de OpenSearch activo

Configurar OpenSearch (ajustes básicos)

Las configuraciones están en /etc/opensearch.

  1. Ajustes de networking y modo single-node: edita /etc/opensearch/opensearch.yml
sudo nano /etc/opensearch/opensearch.yml

Añade o modifica:

network.host: 192.168.5.25

discovery.type: single-node

plugins.security.disabled: false

Guarda y sal.

  1. Ajustar heap JVM (según memoria del host). Edita /etc/opensearch/jvm.options:
sudo nano /etc/opensearch/jvm.options

Por ejemplo, para un servidor con 8 GB de RAM recomendamos 2 GB de heap:

-Xms2g
-Xmx2g

Reglas: asigna heap = aproximadamente 50% de RAM física hasta 32 GB máximo para heap.

  1. Reinicia OpenSearch para aplicar cambios:
sudo systemctl restart opensearch

Verifica puertos abiertos (por defecto 9200):

ss -tulpn | grep 9200

Resumen de configuraciones importantes

Fact box:

  • Puerto REST por defecto: 9200
  • Puerto Dashboards: 5601
  • Usuario del servicio: opensearch
  • Directorio config: /etc/opensearch
  • Directorio plugins: /usr/share/opensearch/plugins
  • Valor recomendado vm.max_map_count: 262144

Asegurar OpenSearch con certificados TLS

Objetivo: cifrar tráfico node-to-node y REST (cliente-servidor) usando una CA propia y certificados firmados por ella.

Arquitectura de certificados en esta guía:

  • Root CA (autofirmada)
  • Certificados admin para la herramienta securityadmin
  • Certificados por nodo (CN = hostname o IP)

Antes de generar certificados, elimina demo certs y prepara directorio:

sudo rm -f /opt/opensearch/{esnode-key.pem,esnode.pem,kirk-key.pem,kirk.pem,root-ca.pem}
sudo nano /etc/opensearch/opensearch.yml

Comentario: si existía la configuración demo del plugin de seguridad, coméntala.

Crear directorio de certificados y entrar en él:

sudo mkdir -p /etc/opensearch/certs; cd /etc/opensearch/certs
sudo chown -R opensearch:opensearch /etc/opensearch/certs
sudo chmod 0700 /etc/opensearch/certs

Generar Root CA

openssl genrsa -out root-ca-key.pem 2048
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730

Resultado: root-ca-key.pem y root-ca.pem.

Generar certificado admin

openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730

admin.pem será usado por securityadmin.sh para aplicar configuraciones.

Generar certificado para el nodo

openssl genrsa -out node-rock1-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in node-rock1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node-rock1-key.pem
openssl req -new -key node-rock1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node-rock1.hwdomain.lan" -out node-rock1.csr
echo 'subjectAltName=DNS:node-rock1.hwdomain.lan' > node-rock1.ext
openssl x509 -req -in node-rock1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node-rock1.pem -days 730 -extfile node-rock1.ext

Firma el CSR con la CA y produce node-rock1.pem.

Limpiar archivos temporales y registrar la CA en el sistema

rm *temp.pem *csr *ext
openssl x509 -outform der -in root-ca.pem -out root-ca.crt
sudo cp root-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

Ajustar permisos (ya mostrado antes):

sudo chown -R opensearch:opensearch /etc/opensearch/certs
sudo chmod 0700 /etc/opensearch/certs
sudo chmod 0600 /etc/opensearch/certs/*.pem
sudo chmod 0600 /etc/opensearch/certs/*.crt

Listado de certificados en /etc/opensearch/certs

Añadir certificados a opensearch.yml (bloque de seguridad)

Para añadir los parámetros de TLS y DNs, puedes usar un script que agregue las líneas en /etc/opensearch/opensearch.yml. Crea add.sh:

#! /bin/bash

echo "plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.authcz.admin_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo "  - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.nodes_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo "  - 'CN=node-rock1.hwdomain.lan,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /etc/opensearch/opensearch.yml

Hazlo ejecutable y ejecútalo:

chmod +x add.sh
sudo ./add.sh

Verifica que /etc/opensearch/opensearch.yml contenga las nuevas líneas.

Salida que muestra que se agregaron las configuraciones TLS en opensearch.yml

Reinicia OpenSearch:

sudo systemctl restart opensearch

Crear usuarios administrativos y aplicar la configuración de seguridad

  1. Generar hashes de contraseña (herramienta incluida en plugin):
cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./hash.sh

Introduce la contraseña en texto plano y copia el hash resultante. Repite para otro usuario.

Generación de hash de contraseña con hash.sh

  1. Editar /etc/opensearch/opensearch-security/internal_users.yml y reemplazar usuarios por los tuyos. Ejemplo:
admin:
  hash: "$2y$12$BnfqwqWRi7DkyuPgLa8.3.kLzdpIY11jFpSXTAOKOMCVj/i20k9oW"
  reserved: true
  backend_roles:
  - "admin"
  description: "Admin user"

kibanaserver:
  hash: "$2y$12$kYjgPjPzIp9oTghNdWIHcuUalE99RqSYtTCh6AiNuS5wmeEaWnbzK"
  reserved: true
  description: "Demo OpenSearch Dashboards user"

Sustituye los hashes por los tuyos.

  1. Reiniciar OpenSearch y ejecutar securityadmin.sh para aplicar los cambios:
sudo systemctl restart opensearch
cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./securityadmin.sh -h 192.168.5.25 -p 9200 -cd /etc/opensearch/opensearch-security/ -cacert /etc/opensearch/certs/root-ca.pem -cert /etc/opensearch/certs/admin.pem -key /etc/opensearch/certs/admin-key.pem -icl -nhnv

securityadmin.sh aplicará los usuarios, roles y permisos en el índice de seguridad.

Ejecución de securityadmin.sh mostrando comunicación con 192.168.5.25:9200

  1. Verificar con curl (usa -k para omitir verificación si opensearch.ssl.verificationMode=none en Dashboards; en producción no uses -k):
curl https://node-rock1:9200 -u admin:password -k
curl https://node-rock1:9200 -u kibanaserver:kibanapass -k

Verifica que la respuesta muestre información del clúster y que la autenticación sea correcta.

Verificación del usuario admin vía curl

Verificación del usuario kibanaserver vía curl

Con esto OpenSearch está instalado y asegurado con TLS y autenticación básica mediante el plugin de seguridad.

Instalar OpenSearch Dashboards

  1. Ajustar crypto policy (porque el repo usa SHA1 en metadatos):
sudo update-crypto-policies --set LEGACY
  1. Añadir repositorio de Dashboards:
sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/opensearch-dashboards-2.x.repo -o /etc/yum.repos.d/opensearch-dashboards-2.x.repo
sudo dnf repolist

Repositorio de OpenSearch Dashboards añadido

  1. Instalar:
sudo dnf install opensearch-dashboards

Acepta clave GPG cuando se solicite.

Instalación de OpenSearch Dashboards

  1. Iniciar y habilitar:
sudo systemctl start opensearch-dashboards
sudo systemctl enable opensearch-dashboards
sudo systemctl status opensearch-dashboards

Configurar OpenSearch Dashboards

Editar el fichero principal:

sudo nano /etc/opensearch-dashboards/opensearch-dashboard.yml

Ajustes sugeridos:

server.port: 5601
server.host: "192.168.5.25"

opensearch.hosts: ["https://192.168.5.25:9200"]
opensearch.ssl.verificationMode: none
opensearch.username: kibanaserver
opensearch.password: kibanapass

Nota: opensearch.ssl.verificationMode: none evita la verificación del certificado en Dashboards; en producción preferible configurar la CA y usar verificationMode: full con la ruta a la CA.

Reinicia Dashboards:

sudo systemctl restart opensearch-dashboards

Configuración de OpenSearch Dashboards

Abrir puerto y acceder a OpenSearch Dashboards

Permitir el puerto 5601 en firewalld:

sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Reglas de firewalld con puerto 5601 abierto

Abre en el navegador: http://192.168.5.25:5601 y autentica con el usuario kibanaserver.

Pantalla de login de OpenSearch Dashboards

Tras el login verás el dashboard de bienvenida y opciones para añadir datos.

Página de bienvenida de OpenSearch Dashboards

Verifica la conexión con Dev Tools: ejecutar GET / y comprobar HTTP 200 - OK.

Dev Tools ejecutando GET / mostrando 200 OK

Comprobaciones y pruebas básicas

  • systemctl status opensearch y opensearch-dashboards
  • ss -tulpn | grep -E “9200|5601”
  • curl https://127.0.0.1:9200 -u admin:tu_pass -k
  • Acceso web a Dashboards y ejecución de GET /
  • Verificar índices con GET _cat/indices?v

Buenas prácticas y endurecimiento de seguridad

  • No uses opensearch.ssl.verificationMode: none en producción; configura truststore y verificationMode: full.
  • Usa contraseñas seguras y rotación periódica.
  • Restringe acceso de red a puertos 9200 y 5601 mediante firewall y listas de control.
  • Configura backups (snapshots) a un repositorio remoto (NFS/S3).
  • Habilita auditoría de seguridad para rastrear cambios.
  • Monitoriza métricas JVM, uso de disco e índices.

Respaldo y restauración de certificados y configuración (mini S.O.P.)

  1. Respaldar configuración y certificados:
sudo tar czf /root/opensearch-backup-$(date +%F).tar.gz /etc/opensearch /etc/opensearch-dashboards /etc/opensearch/certs
  1. Restaurar en un host nuevo:
sudo tar xzf /root/opensearch-backup-YYYY-MM-DD.tar.gz -C /
sudo chown -R opensearch:opensearch /etc/opensearch/certs
sudo systemctl daemon-reload
sudo systemctl restart opensearch

Playbook operativo resumido

  • Preparación del host (hostname, swap off, vm.max_map_count)
  • Instalar repositorio e instalar opensearch
  • Configurar opensearch.yml y jvm.options
  • Generar CA y certificados, instalarlos y fijar permisos
  • Añadir TLS y DNs a opensearch.yml
  • Generar hashes de contraseña y aplicar securityadmin.sh
  • Instalar OpenSearch Dashboards y configurarlo
  • Abrir firewall y verificar acceso

Lista de comprobación por roles

Administrador de sistemas:

  • Host con hostname y FQDN configurados
  • Swap deshabilitado
  • vm.max_map_count configurado
  • Repositorio OpenSearch añadido
  • OpenSearch y Dashboards instalados y habilitados

Equipo de seguridad:

  • CA y certificados generados y almacenados de forma segura
  • TLS activado para transporte y HTTP
  • Usuarios con roles mínimos definidos
  • Auditoría activada

Desarrollador/Usuario de Dashboards:

  • Acceso a Dashboards probado
  • Dev Tools GET / devuelve 200
  • Indices básicos creados y visibles

Solución de problemas comunes

  • OpenSearch no arranca: revisar journalctl -u opensearch, problemas típicos: permisos en /etc/opensearch/certs, formato PKCS, errores de bootstrap por discovery cuando no está en single-node.
  • securityadmin.sh falla: comprobar rutas de certificados, que el servicio esté a la escucha en 9200 y que la hora del sistema esté sincronizada.
  • Dashboards no conecta: revisar opensearch.hosts, credenciales, verificationMode, logs de /var/log/opensearch-dashboards.

Alternativas y cuándo elegir otra opción

  • Docker: si quieres despliegues efímeros o CI, usar contenedores acelera pruebas; sin embargo en producción necesitarás manejar volúmenes, reinicios y políticas de datos.
  • Kubernetes: recomendable para clusters con autoescalado y alta disponibilidad; añade complejidad operacional.
  • Tarball: útil en entornos con políticas de paquetes estrictas o para desarrolladores.

Diagrama de decisión (Mermaid)

flowchart TD
  A[Necesitas OpenSearch?] --> B{Entorno}
  B --> |Servidor Linux| C[RPM]
  B --> |Contenedores| D[Docker]
  B --> |Kubernetes| E[Helm / StatefulSet]
  C --> F[Configurar TLS y Security]
  D --> F
  E --> F
  F --> G[Monitoreo, Backup, Escalado]

Criterios de aceptación

  • OpenSearch y OpenSearch Dashboards en ejecución y habilitados al arranque.
  • TLS habilitado para transporte y HTTP.
  • Usuario admin y kibanaserver creados y aplicados vía securityadmin.sh.
  • Acceso a Dashboards con HTTP 200 en GET / desde Dev Tools.

Glosario rápido (1 línea por término)

  • OpenSearch: motor de búsqueda y analítica open source derivado de Elasticsearch.
  • OpenSearch Dashboards: interfaz de visualización derivada de Kibana.
  • CA: Autoridad de certificación que firma certificados TLS.
  • CSR: Certificate Signing Request, petición para firmar un certificado.
  • PKCS#8: Formato estándar para almacenar claves privadas.

Lista de pruebas/aceptación (Test cases)

  • TC1: systemctl status opensearch -> active (running)
  • TC2: curl https://node:9200 -u admin:pass -k -> HTTP 200
  • TC3: Acceso a http://node:5601 -> Página login
  • TC4: Dev Tools GET / -> JSON con versión y cluster_name

Mejoras futuras y escalado

  • Convertir a cluster multi-nodo: configurar discovery.seed_hosts y cluster.initial_master_nodes.
  • Implementar snapshots automáticos a repositorio S3.
  • Configurar alertas y reglas de index lifecycle management (ILM).

Notas finales

Has instalado OpenSearch y OpenSearch Dashboards en Rocky Linux 9, protegido la comunicación con certificados TLS, creado usuarios y aplicado la configuración de seguridad. Desde aquí puedes escalar a clústeres múltiples, integrar con sistemas de autenticación centralizada (LDAP/AD) y automatizar despliegues con Ansible o Helm.

Resumen final: sigue las listas de comprobación, guarda copias de seguridad de certificados, monitoriza métricas y aplica políticas de acceso mínimo para mantener tu despliegue seguro y estable.

Recursos recomendados

  • Documentación oficial de OpenSearch: https://opensearch.org
  • Guía de seguridad y plugin opensearch-security en la documentación oficial
Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach