Configuración de contenedores seguros para SIEM
Un stack SIEM listo para usar y reforzado para refugios y centros de crisis: Monitorea la red y los dispositivos en busca de intrusiones, stalkerware y otro software malicioso, con paneles preconfigurados y actualizaciones diarias de inteligencia de amenazas.
Características
- Stack SIEM con Wazuh + Elasticsearch + Kibana
- Monitoreo de red con Zeek & Suricata y reglas personalizadas para stalkerware
- Acceso exclusivo por VPN (WireGuard)
- TLS entre todos los servicios
- Cuentas RBAC predefinidas (admin, viewer)
- Actualizaciones diarias de reglas e inteligencia de amenazas
- Copias de seguridad nocturnas cifradas en disco local de 500 GB
- Paneles de Kibana preconfigurados para:
- Resumen de amenazas
- Lista de vigilancia de stalkerware
- Anomalías de red
- Dispositivos de alto riesgo
Requisitos
Sistema anfitrión:
- Servidor Linux (probado en Debian 12, Ubuntu 22.04 LTS, Rocky Linux 9)
- Docker + Docker Compose v2
- Mínimos recomendados:
- CPU: 4 núcleos (8+ recomendados)
- RAM: 8 GB (16 GB recomendados)
- Almacenamiento: 200 GB SSD para datos + disco adicional de 500 GB para copias de seguridad
- Tarjeta de red dedicada para monitoreo (sniffing):
- Una segunda interfaz de red conectada a la red que se desea monitorear
- No debe tener una dirección IP asignada
- Ejemplo:
eth1
en Linux - Puede ser un adaptador USB 3.0 Gigabit Ethernet si no hay ranuras PCIe disponibles
- Conexión a Internet (para actualizaciones de reglas, a menos que se use un feed offline)
Dispositivos cliente (para acceso VPN):
- Cliente WireGuard instalado (Windows, macOS, Linux, iOS o Android)
## Configuración inicial
1. Clonar el repositorio
git clone https://github.com/ninabarzh/secure-shelter-siem-stack.git
cd secure-shelter-siem-stack
2. Copiar y editar variables de entorno
cp .env.example .env
nano .env
Establecer contraseñas seguras para:
ELASTIC_PASSWORD
KIBANA_PASSWORD
WAZUH_PASSWORD
3. Iniciar la VPN WireGuard (requerido)
Todo el acceso a Kibana, Elasticsearch y Wazuh es a través de la VPN — nada está expuesto a internet público.
Desde la raíz del repositorio:
docker-compose up -d vpn
El servidor VPN escucha en UDP/51820.
La puerta de enlace predeterminada de la subred VPN es 10.13.13.1
.
4. Añadir pares VPN (personal, respondedores, agentes remotos)
Para añadir un nuevo par:
./vpn/add-peer.sh <nombre-del-par>
Ejemplo:
./vpn/add-peer.sh alicia
Esto hará:
- Creará un par WireGuard llamado
alicia
- Le asignará una IP en la subred VPN
- Guardará la configuración en
vpn/alicia.conf
Enviar alicia.conf
de forma segura al usuario — puede importarlo en el cliente WireGuard en Windows, macOS, Linux, Android o iOS.
5. Generar certificados TLS para Elasticsearch
Ejecutar:
./scripts/gen-certs.sh
Crea:
config/elasticsearch/certs/elastic-stack-ca.p12
config/elasticsearch/certs/elastic-certificates.p12
La contraseña se establece en .env
— cámbiela si lo desea.
6. Actualizar reglas de detección
Obtener las últimas reglas de Suricata:
./scripts/update-rules.sh
Fuentes:
- Emerging Threats (v7.0.3)
- Lista negra SSL de AbuseCH
custom.rules
local para detección de stalkerware
7. Desplegar el stack SIEM
./scripts/deploy.sh
Inicia:
- Elasticsearch con TLS
- Kibana (importa paneles desde
config/dashboards/
) - Wazuh Manager
- Suricata & Zeek
- Filebeat con TLS a Elasticsearch
8. Acceder a los paneles (via VPN)
Conéctese a la VPN con su configuración de par, luego abra:
http://10.13.13.1:5601
Inicio de sesión:
- Usuario:
kibana_system
(de.env
) - Contraseña: su
KIBANA_PASSWORD
Paneles disponibles:
- Resumen de Amenazas: alertas de todas las fuentes
- Dispositivos de Alto Riesgo: endpoints con detecciones repetidas
- Anomalías de Red: patrones de tráfico sospechosos
- Lista de Stalkerware: detecciones para BadBox, mFly, FlexiSpy, Spynger
9. Desplegar agentes Wazuh
En un endpoint monitoreado (dentro de la VPN o red local):
curl -so wazuh-agent.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.12.0-1_amd64.deb \
&& sudo WAZUH_MANAGER='10.13.13.1' dpkg -i ./wazuh-agent.deb \
&& sudo systemctl enable wazuh-agent --now
10. Requisitos de interfaz de red
Si usa Suricata/Zeek en modo captura de paquetes:
- Establezca
SNIFFING_INTERFACE
en.env
(ej.eth1
) - Poner la interfaz en modo promiscuo:
sudo ip link set eth1 promisc on
Listo para monitorear, detectar y defender.
Paneles
Tras el primer inicio de sesión, verá:
- Resumen de amenazas: Resumen de todas las alertas
- Lista de stalkerware: Detecciones de BadBox, BadBox2, mFly, FlexiSpy, Spynger y otros
- Anomalías de red: Eventos de Suricata/Zeek fuera de patrones normales
- Dispositivos de alto riesgo: Endpoints con múltiples indicadores de stalkerware
Copias de seguridad
- Se ejecutan cada noche a las 02:00
- Cifradas con GPG
- Almacenadas en
/mnt/secure-backup
(disco de 500 GB) - En el primer uso, genera
config/backup/backup-key.gpg
- Copie la clave a un USB y guárdela bajo llave – sin ella, no se pueden restaurar las copias
Restaurar
gpg --import config/backup/backup-key.gpg
gpg --decrypt /mnt/secure-backup/shelter-siem-YYYY-MM-DD_HH-MM.tar.gz.gpg | tar -xz -C data/
Mantenimiento
- Detener stack:
./scripts/stop.sh
- Respaldar datos: se ejecuta cada noche en
/mnt/secure-backup
- Restaurar respaldo:
./scripts/restore-backup.sh
Actualizar reglas manualmente
./scripts/update-rules.sh
docker compose restart suricata zeek
Actualizar stack
docker compose pull && docker compose up -d
Notas de seguridad
- Cambie todas las contraseñas predeterminadas en
.env
antes del despliegue - Almacene configuraciones de pares VPN de forma segura
- Mantenga los certificados TLS de Elasticsearch privados
- Monitoree uso de disco (
./data/elasticsearch
) — pode índices antiguos cuando sea necesario - Todo el acceso es mediante VPN – nunca exponga los puertos 9200, 5601 o 55000 a Internet
- Mantenga el disco de backups en un lugar físicamente seguro
- Pruebe regularmente las configuraciones VPN y las copias de seguridad