Servidor 2 Instalando TheHive + Cortex + MISP
Foto de Eduard Galitsky en Unsplash
Después de completar y tener operativo el primer servidor con el Cortafuegos, Wazuh y Velociraptor vamos a instalar el segundo servidor. Un Ubuntu 24.04.4 como el anterior.
Lo vamos a configurar de igual manera que el primero.
Pero antes veremos una pequeña explicación de como funciona.
Wazuh centraliza los LOGS Puros (La Monitorización)
Wazuh es tu gran ojo avizor. Su función es tragar miles de millones de eventos crudos de los PCs, servidores, del Active Directory y del tráfico de red.
¿Qué ve aquí?: Eventos de seguridad en bruto.
¿Es el centro de control del incidente? No. Si se queda solo en Wazuh, ahí solo verá una alerta que dice "El PC-01 ha ejecutado un comando sospechoso". Pero Wazuh no sabe si ese comando es un falso positivo, qué dice Threat Intel de esa IP, ni qué archivos ha robado el atacante.
TheHive centraliza el INCIDENTE Completo (La Investigación)
Aquí es donde ocurre la magia de la integración que ha montado.
TheHive es el salpicadero del coche. En lugar de ir saltando de pestaña en pestaña, nos centramos en TheHive y la herramienta hace el trabajo sucio por detrás:
Desde Wazuh: Le llega la alerta inicial de forma automática y le abre el caso.
Desde MISP: Sin salir de TheHive, la plataforma consulta a MISP en segundo plano y le pinta un cartelito que dice: *"Ojo, Jose, este hash de archivo que ha visto Wazuh está fichado en MISP como el malware X"*.
Desde Cortex y Velociraptor: Le damos a un botón en TheHive, Cortex ejecuta el "flow" de Velociraptor en el PC afectado, extrae la MFT o el volcado de memoria, y sube los resultados forenses directamente como adjuntos u observables dentro del mismo caso de TheHive.
En Resumen:
Para auditar logs y ver paneles generales de cumplimiento:** Entraremos a Wazuh.
Para resolver, investigar y entender un ataque de principio a fin: Entraremos única y exclusivamente a TheHive. Él se encarga de conectar los cables con MISP, Cortex y Velociraptor para que lo tengamos todo masticado en una sola pantalla. ¡Por eso es el rey de la gestión de incidentes!
Tiene sentido ahora cómo se complementan el "ojo que todo lo ve" (Wazuh) y el "cerebro que todo lo organiza" (TheHive)
Aquí vemos en resumidas cuentas lo que va a hacer cada herramienta que vamos a instalar en este segundo servidor.

Y aquí le voy a preguntar a Gemini Web.
Jose
Buenos días....tengo el servidor 1 completo con el cortafuegos, Wazuh y Velociraptor con la IP 192.168.1.100. Voy a instalar el servidor 2 que llevara...
## Servidor 2 — IR / CTI / SOAR / IA
| Script | Herramienta | RAM | CPU | Disco |
|---|---|---|---|---|
| `install-thehive.sh` | TheHive + Cortex + MISP | 8 GB | 4 | 50 GB |
| `install-shuffle.sh` | Shuffle SOAR | 4 GB | 2 | 30 GB |
| `install-opencti.sh` | OpenCTI | 8 GB | 4 | 60 GB |
| `install-ollama.sh` | Ollama LLM | 8 GB | 4 | 30 GB |
| `install-ai.sh` | IA & Enrichment | 1 GB | 1 | 1 GB |
| `install-notifications.sh` | Notificaciones | 1 GB | 1 | 5 GB |
### Orden de despliegue sugerido en Servidor 2
1. `install-thehive.sh` — TheHive + Cortex + MISP (núcleo IR + CTI).
2. `install-opencti.sh` — plataforma CTI STIX2.
3. `install-shuffle.sh` — SOAR / orquestación.
4. `install-ai.sh` — Ollama + claves OSINT (VT, AbuseIPDB, OTX).
5. `install-notifications.sh` — Gotify + canales SMTP/Slack/Telegram
.Como ves me indica que lo primero que tengo que instalar es `install-thehive.sh` — TheHive + Cortex + MISP (núcleo IR + CTI)
Mi duda es. ¿Que IP estática debo ponerle a este segundo servidor?
Gemini Web
Ayer dejamos el Servidor 1 impecable con Wazuh y Velociraptor, y hoy vas a por la "joya de la corona": ¡la automatización, la inteligencia de amenazas y la IA!
Con la lista de scripts que tienes delante, ese **Servidor 2 va a concentrar herramientas potentes** (TheHive para los incidentes, MISP y OpenCTI para las amenazas, Shuffle para automatizarlo todo con flujos de trabajo y Ollama dándote potencia de IA local).
Vamos directos a resolver tu duda de red para que los cimientos queden perfectos antes de ejecutar ese `install-thehive.sh`.
¿Qué IP estática debes ponerle al Servidor 2?
Siguiendo el esquema de red local limpio y profesional que ya empezaste con el Servidor 1 (`192.168.1.100`), la mejor práctica para tu laboratorio es asignarle la IP correlativa.
IP Estática Recomendada para el Servidor 2: `192.168.1.101`
Los datos completos para tu configuración de red en el Servidor 2:
* **Dirección IP:** `192.168.1.101`
* **Máscara de subred:** `255.255.255.0` (o `/24`)
* **Puerta de enlace (Gateway):** La IP de tu router de casa (suele ser `192.168.1.1` o `192.168.1.254`).
* **Servidores DNS:** Los que prefieras para que tenga salida a internet y baje los scripts (por ejemplo, los de Google `8.8.8.8` y `8.8.4.4`, o Cloudflare `1.1.1.1`).
¿Por qué usar una única IP (`192.168.1.101`) para todo el Servidor 2?
Como ves en tu tabla, vas a instalar un montón de herramientas distintas (TheHive, Cortex, MISP, OpenCTI, Shuffle...). Podrías pensar: *"¿Necesito una IP para cada una?"*. **La respuesta es NO.**
Todas estas herramientas van a convivir felices dentro del mismo Servidor 2 porque **cada una escuchará en un puerto diferente**. Es exactamente igual que lo que hicimos ayer en el Servidor 1: la misma IP servía para la web de Wazuh en un puerto y para Velociraptor en otro.
Cuando termines el despliegue, tu mapa de acceso desde el navegador de Windows quedará estructurado de una forma tan limpia como esta (los puertos exactos dependerán de tus scripts, pero la lógica es esta):
* **MISP (Threat Intelligence):** `https://192.168.1.101:8443` (o similar)
* **TheHive (Gestión de Incidentes):** `http://192.168.1.101:9000`
* **OpenCTI (Inteligencia de Amenazas):** `http://192.168.1.101:8080`
* **Shuffle (SOAR / Automatización):** `http://192.168.1.101:3001`
Fin de Gemini Web
Vamos a instalar ese segundo servidor.
En la imagen se ven las configuraciones del mismo.
En cuanto a la instalación y configuración estática de la red con la IP 192.168.1.101 ya hemos visto como hacerlo.

Una vez que tenemos instalado el servidor actualizamos el sistema. Os recuerdo los comandos.
Actualizar Ubuntu 24.04.4
sudo apt update && sudo apt full-upgrade -yInstalamos el servicio de tiempo
sudo apt install ntpstat ntp -yConfiguramos la zona horaria (Cámbiala si no estás en España)
sudo timedatectl set-timezone Europe/MadridForzamos la sincronización
sudo systemctl restart ntpVerificamos que la hora es la correcta
dateInstalación de Dependencias "Escudo"
Estas son las herramientas que tu script va a necesitar para gestionar contraseñas y certificados sin errores:
sudo apt install -y curl apt-transport-https unzip wget libcap2-bin python3-bcrypt coreutilsLimpieza de reinicio
sudo rebootUna vez que tengamos el sistema actualizado vamos a preguntar como configuramos el lanzador para instalar TheHive + Cortex + MISP
Para eso hago una captura de pantalla y se la paso a Gemini Web.
¿Por que Gemini Web y no Gemini VSCode?
Porque a Gemini VSCode se le va la mano con los diff y cambiar parámetros por su cuenta y yo lo que quiero es lanzar TheHive limpio tal y como me lo ha dado Lovable.
Aquí según vimos en clase vamos a tener que jugar con las APIs.
Es recomendable sino imprescindible abrir un editor de texto plano puro como Notepad++ en lugar de procesadores de texto enriquecido (como Microsoft Word). El motivo es que herramientas como Word modifican automáticamente ciertos caracteres (por ejemplo, transformando comillas rectas en comillas tipográficas curvas o uniendo guiones) e introducen códigos de formato ocultos. Esto provocaría errores de sintaxis invisibles y fallos de autenticación al copiar y pegar contraseñas, hashes, archivos YAML o claves API en los servidores".
Jose


Te paso los parámetros del lanzador en TheHive para ver si antes de ejecutar el script debo cambiar alguna configuración.
Gemini Web
¡Qué maravilla de parámetros, Jose! Ver la radiografía completa del script de instalación de TheHive, Cortex y MISP es una delicia. Está súper bien estructurado: te levanta las bases de datos necesarias (Elasticsearch y Cassandra para TheHive, MariaDB y Redis para MISP, MinIO para almacenar los adjuntos de los casos) y te deja los puertos bien ordenados.
Contestando a tu pregunta: **SÍ, hay varios parámetros críticos que debes revisar y cambiar en el lanzador ANTES de generar y ejecutar el script**. Si los dejas por defecto o vacíos, la instalación se completará pero las herramientas no podrán comunicarse entre sí o no sabrás con qué contraseña entrar.
Vamos a repasar la lista de parámetros uno por uno para que los configures a prueba de bombas en la interfaz del lanzador:
Parámetros Críticos que DEBES configurar
1. **`serverIp`**
* ❌ **No lo dejes en vacat** ni en `127.0.0.1`.
* **Pon la IP de este Servidor 2:** `192.168.1.101`. Esto es vital para que las URLs internas de Docker se generen apuntando al sitio correcto.
2. **`adminEmail` y `adminPassword**`
* Configura aquí un correo (puede ser ficticio, tipo `admin@tu-soc.local`) y una **contraseña fuerte que tú elijas** (¡recuerda apuntarla en tu Notepad++!). Esta será la credencial maestra para entrar por primera vez a los paneles web de TheHive, Cortex y MISP.
3. **`orgName`**
* Es simplemente el nombre de tu organización para el laboratorio. Puedes poner algo como `MiSOC-Lab` o `Jose-SOC`.
4. **`storagePassword`**
* Es la contraseña interna que usarán las bases de datos (como MariaDB o Cassandra) y el almacenamiento de MinIO. Pon una clave segura. No la necesitas para loguearte en las webs, pero el script la requiere para que los contenedores se hablen entre sí de forma segura.
5. **`installDir`**
* Déjalo por defecto (seguramente apunte a `/opt/soc-stack/thehive` viendo tu lista de volúmenes). Está perfecto ahí.
¿Qué pasa con las API Keys (`thehiveApiKey`, `cortexApiKey`, `mispApiKey`)?
Aquí viene un detalle muy importante del despliegue:
* 🎲 **Si el lanzador tiene un botón que dice "Regenerar secretos" o "Generar automáticamente":** Úsalo. El sistema inventará cadenas largas de caracteres aleatorios para estas APIs y las inyectará en los archivos de configuración para que TheHive pueda enviarle archivos a Cortex y MISP de forma automática desde el minuto uno.
* **Si te pide que las escribas tú a mano en un cuadro vacío:** No te inventes una palabra simple. Lo ideal es dejar que el script las genere o, en su defecto, escribir un hash aleatorio largo en cada una (por ejemplo, tres contraseñas distintas y largas generadas al azar). *Nota: Lo habitual en estos orquestadores es que si los dejas en blanco, el propio script los autogenere durante la instalación.*
Los Puertos (Para tener en cuenta en tu documentación)
El script te va a mapear estos accesos, así que cuando termine de instalar, entrarás desde tu Windows real escribiendo en el navegador:
* 🐝 **TheHive:** `http://192.168.1.101:9000`
* 🧠 **Cortex:** `http://192.168.1.101:9001`
* ☣️ **MISP:** `https://192.168.1.101` (usa el puerto 443 estándar de HTTPS)
Tu Plan de Acción:
1. Rellena los campos en la interfaz web de tu lanzador asegurándote de fijar la IP `192.168.1.101` y tus contraseñas de administrador.
2. Pulsa en **"Generar Script (.sh)"**.
3. Pásalo a tu Servidor 2 por WinSCP a la carpeta `/tmp`.
Es factible lanzarlo desde /home, pero al lanzarlo desde /tmp al reiniciar y o apagar y volver a encender el servidor el script instalador se elimina y nos da menos problemas si tenemos que desinstalar.
4. Dale permisos de ejecución en Putty (`chmod +x /tmp/install-thehive.sh`) y ejecútalo con `sudo`.
Al llevar tantas bases de datos pesadas (¡Elasticsearch y Cassandra juntas son camiones de carga pesada!), la primera vez puede tardar unos minutos en descargar las imágenes Docker y levantar todo.
Rellena esos parámetros con mimo en tu Notepad++, Jose, ¡y dale al botón de generar! ¿Alguna duda con alguno de los campos antes de darle candela? Lions🚀🔥
Fin de Gemini Web
De momento no voy a tocar nada. La ultima modificación que hizo Lovable ya me dio la automatización de de las IPs para que no se quedara de localhost. Veremos.
Voy a descargar el script, pasárselo al servidor, darle premisos de ejecución y lanzarlo desde el directorio /tmp



Comprobamos en el servidor si el archivo esta correctamente en /tmp

1. Viajamos a la carpeta temporal donde hemos subido el archivo con WinSCP
cd /tmp2. Le damos permisos de ejecución al script correcto
chmod +x install-thehive.sh3. Lo lanzamos con privilegios de administrador (sudo)
sudo ./install-thehive.sh
Me da varias advertencias y me voy a Lovable
Jose

Acabo de ejecutar el script para TheHive...tengo esta salida y quiero saber si los advertencia son algún problema o solo son eso, advertencias.
Lovable
Los WARN sí son un problema real , no hay advertencias inocuas. Te explícito:
Causa raíz
Tu contraseña generada fueWFHP$Nx_tFdKDwXLxPkr. El$dentro lo interpreta Docker Compose como referencia a una variable ($Nx_tFdKDwXLxPkr→ vacía → "variable no establecida"). Resultado: MISP y MinIO han arrancado con la contraseña truncada aWFHP(o vacío en algunos campos). Por eso además vesthehive-thehive-1 Reiniciando— TheHive no puede autenticarse contra MinIO con la clave rota.
El culpable está ensrc/lib/secrets.tslínea 28: el charset incluye$(y otros metacaracteres peligrosos para shell/compose:`,\,",').
Fijación permanente
Qué hacer ahora en el servidor
Como ya está corriendo con secretos rotos, hay que tirar el stack, regenerar secretos en la GUI, y relanzar:
cd /opt/soc-stack/thehive
sudo docker compose down -v # borra también los volúmenes (datos corruptos)
sudo rm -rf /opt/soc-stack/thehiveLuego en la GUI del configurador → TheHive → "Regenerar secretos" (ahora generará passwords sin `$`) → descarga el `.sh` nuevo → ejecútalo otra vez.
Sobre el `thehive Restarting (1)`
Es consecuencia del mismo bug: TheHive intenta conectar a MinIO con `STORAGE_PASSWORD` truncado a `WFHP` y falla la auth S3 → crash loop. Con secretos limpios arrancará bien. Si después de regenerar siguiera reiniciándose, revisamos `sudo docker logs thehive-thehive-1 --tail 50`.
¿Procedemos? Tras el `git pull` en VSCode y regenerar desde la GUI, los WARN desaparecerán.
Fin de Lovable
Me voy al servidor y ejecuto:
cd /opt/soc-stack/thehivele voy a dar un ls -l haber que tenemos.

Borramos también los volúmenes (datos corruptos)
sudo docker compose down -v
sudo rm -rf /opt/soc-stack/thehive
Borro el script desde WinSCP
Descargo los cambios desde Lovable a VSCode con:
git pull origin main
Vuelvo a generar el script.
Se lo paso con WinSCP al servidor en el directorio /tmp
Le doy permisos y lo vuelvo a ejecutar.
El resultado es similar. Por lo que vuelvo a Lovable.
Jose
Paso a VSCode los cambios con git pull origin main. Volvió a generar el script de TheHive + Cortex + MISP, lo lanzó y obtuve un resultado similar.
Lovable
Voy a blindar el generador para que aunque el navegador conserve un secreto antiguo con `$`, el `.env` de Docker Compose salga escapado correctamente.
No tienes que cambiar ningún parámetro del lanzador: el problema viene de una contraseña antigua guardada con `$`.
He reforzado el generador de TheHive para que Docker Compose escape correctamente secretos con `$`, pero esa instalación actual ya está contaminada y hay que limpiarla.
Pasos recomendados:
```bash
cd /opt/soc-stack/thehive
sudo docker compose down -v
sudo rm -rf /opt/soc-stack/thehive
```Luego:
1. Haz `git pull origin main`.
2. Recarga el configurador en el navegador con `Ctrl + F5`.
3. En TheHive, pulsa Regenerar secretos.
4. Genera de nuevo `install-thehive.sh`.
5. Lánzalo otra vez.
Los warnings no son inocentes: indican que Docker Compose está interpretando `WFHP$Nx_tFdKDwXLxPkr` como si `$Nx_tFdKDwXLxPkr` fuese una variable, por eso luego TheHive/MISP arrancan mal o reinician.
Fin de Lovable
Repito la operación pero esta vez me avisa de que regenere el lanzador. Regenerar secretos.
Repetir la secuencia:
cd /opt/soc-stack/thehive
sudo docker compose down -v
sudo rm -rf /opt/soc-stack/thehive
Borrar el script desde WinSCP en Windows y el servidor.
Antes de generar el script. Lo que antes no se hizo. Ir y clicar en Regenerar secretos.

Descargo el script. Se lo paso a Ubuntu y lo lanzo.


En principio se han “volatilizado” las advertencias.
Vamos a probar las URLs haber si nos llevan a las herramientas.
Para acceder a:
TheHive UI: http://192.168.1.101:9000
Cortex UI: http://192.168.1.101:9001
MISP HTTPS: https://192.168.1.101:443
Lovable me deja sin créditos.
Hoy quedan 0 créditos gratuitos.
De momento solo me deja acceder a Cortex.

No me queda otra que esperar al dia siguiente y con los 5 créditos volver a preguntar a Lovable.
Jose
Sigo si poder entrar en el navegador a TheHive y a MISP. Te paso lo que tengo en el servidor.
Le paso lo que me dan estos tres comandos.
# Ver en que estado estan los docker
sudo docker compose ps# 1. Ver los logs de fallos de TheHive
sudo docker logs --tail 50 thehive-thehive-1# 2. Ver los logs de fallos de MISP
sudo docker logs --tail 50 thehive-misp-1Lovable
Voy a revisar el generador de TheHive/MISP y ajustar el script para que cree certificados y arranque TheHive con una configuración explícita, no “a medias” por flags. He corregido el generador de TheHive + Cortex + MISP:
TheHive: ya no arranca con una configuración incompleta por flags; ahora genera application.conf, secret.conf e index.conf explícitos.
MISP: ahora monta volúmenes persistentes para config/files/logs/SSL, añade redis, usa BASEURL correcto y deja que el contenedor cree cert.pem/key.pem.
Archivo cambiado: src/lib/generators/thehive.ts
Validación hecha: el script generado pasa bash -n.
Para tu servidor actual, no vale solo rerun: está contaminado por volúmenes/config vieja. Haz esto:
cd /opt/soc-stack/thehive
sudo docker compose down -v
cd /tmp
sudo rm -rf /opt/soc-stack/thehive
Luego en tu PC:
git pull origin main
Recarga la web con Ctrl + F5
En TheHive pulsa Regenerar secretos
Genera de nuevo install-thehive.sh
Súbelo al servidor y ejecútalo:
chmod +x install-thehive.sh
sudo ./install-thehive.sh
Después prueba:
TheHive: http://192.168.1.101:9000
Cortex: http://192.168.1.101:9001
MISP: https://192.168.1.101
Fin de Lovable
Alguno pensara que es una tontería documentar y publicar mis errores. Yo considero que si alguno de vosotros esta intentando seguir o realizar este proyecto le van a venir bien como ejemplo de lo que le puede pasar.
El script me seguía dando problemas.
El día 27 de mayo Lovable me dice que se acabaron los créditos diarios y mensuales hasta el 1 de junio.
“La paciencia es la madre de todas las ciencias”
El día 1 de junio vuelvo a entrarle a Lovable. Nunca me había dado tantos problemas.
Jose
Entro en el login de Cortex y MISP, aunque no me deja loguearme con la ultima contraseña. Pero no me deja conectarme a TheHive....No se puede acceder a este sitio web....La página 192.168.1.101 ha rechazado la conexión. Tengo esto en Ubuntu…
Fin de Jose
Me salvo “por los pelos”
1 free credit remaining today.
Le paso los logs como ya habíamos visto. Lovable hace su “magia” de nuevo y esta vez si “Funciona”.
Si vamos a la URL de TheHive:

Si vamos a la URL de Cortex:

Aquí nos pediría actualizar la base de datos y entraríamos en el Login.
Eso lo veremos en la siguiente guía.
Y si vamos a la URL de MISP:

¿Como entramos a TheHive, Cortex y MISP?
¿Como configuramos una organización y como generamos un usuario?
Lo veremos en la próxima entrega.
Barakaldo 08 de junio de 2026
Etiquetas:
También te podría interesar...
🔥 Lo más leído en el blog
Sobre Jose
Este autor prefiere mantener el misterio y aún no ha escrito su biografía.
Comentarios (0)
Inicia sesión para unirte a la conversación.
No hay comentarios aún. ¡Sé el primero en comentar!