Instalar y asegurar OpenSearch en Rocky Linux 9

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.
- 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
- 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.
- 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.
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)
- 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.
- Consultar información del paquete:
sudo dnf info opensearch
En el repositorio suelen estar versiones para x86_64 y aarch64.
- Instalar:
sudo dnf install opensearch
Acepta la clave GPG cuando se solicite.
- 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.
Configurar OpenSearch (ajustes básicos)
Las configuraciones están en /etc/opensearch.
- 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.
- 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.
- 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
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.
Reinicia OpenSearch:
sudo systemctl restart opensearch
Crear usuarios administrativos y aplicar la configuración de seguridad
- 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.
- 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.
- 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.
- 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.
Con esto OpenSearch está instalado y asegurado con TLS y autenticación básica mediante el plugin de seguridad.
Instalar OpenSearch Dashboards
- Ajustar crypto policy (porque el repo usa SHA1 en metadatos):
sudo update-crypto-policies --set LEGACY
- 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
- Instalar:
sudo dnf install opensearch-dashboards
Acepta clave GPG cuando se solicite.
- 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
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
Abre en el navegador: http://192.168.5.25:5601 y autentica con el usuario kibanaserver.
Tras el login verás el dashboard de bienvenida y opciones para añadir datos.
Verifica la conexión con Dev Tools: ejecutar GET / y comprobar HTTP 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.)
- Respaldar configuración y certificados:
sudo tar czf /root/opensearch-backup-$(date +%F).tar.gz /etc/opensearch /etc/opensearch-dashboards /etc/opensearch/certs
- 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
Materiales similares
Reemplazar disco fallido en RAID1

Error 43 en GPU NVIDIA/Intel: guía completa

Desactivar pantalla táctil en iPhone y iPad

OpenSearch en Rocky Linux 9: instalación y seguridad

Desactivar Liquid Glass en iOS 26
