# Plugin MISP to Pandora SIEM

# Introducción

**Ver.** 06/03/2026

Plugin para generar una regla en SIEM con las 500 IPs maliciosas mas activas reportadas en MISP

**Tipo:** Plugin de Servidor

# Matriz de compatibilidad

<table border="1" id="bkmrk-sistemas-donde-se-ha"><tbody><tr><td>**Sistemas donde se ha probado**</td><td>Rocky Linux 9

</td></tr><tr><td>**Sistemas donde debería funcionar**</td><td>Cualquier sistema linux

</td></tr></tbody></table>

# Pre requisitos

Para el correcto funcionamiento del plugin es necesario contar con **Python 3.10 o superior** y la librería `PyMISP` instalada.

Se pueden instalar los requisitos con el siguiente comando:

**En Rocky Linux 8 y 9:**

<span class="hljs-comment">\# Instalar Python y las dependencias de compilación necesarias</span>

```bash
sudo dnf install -y python3.11 python3.11-devel python3.11-pip gcc libffi-devel openssl-devel
```

<span class="hljs-comment">\# Instalar PyMISP y dependencias  
</span>

```bash
sudo pip3.11 install pymisp requests urllib3
```

**En Ubuntu 22.04:**

<span class="hljs-comment">\# Instalar Python y las dependencias de compilación necesarias</span>

```bash
sudo apt update && sudo apt install -y python3 python3-dev python3-pip libffi-dev libssl-dev build-essential
```

\# Instalar PyMISP y dependencias

```bash
sudo pip3 install pymisp requests urllib3 --break-system-packages
```

Una vez instaladas todas las dependencias continuar con la configuración del plugin.

# Configuración del Plugin

Antes de ejecutar el plugin, es necesario ubicar el script en el servidor, otorgarle permisos de ejecución y recopilar los datos de conexión tanto de Pandora FMS como de MISP.

---

#### 1. Ubicación y Permisos

Recomendamos alojar el script `misp_to_pandora.py` en el directorio estándar de plugins del servidor de Pandora FMS.

Sube el archivo al servidor y ejecuta el siguiente comando para darle permisos de ejecución:

```bash
chmod +x /usr/share/pandora_server/util/plugin/misp_to_pandora.py
```

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-133 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_2cdaac09f8a77557","c_b189c74db9e79413",null,"rc_888d2331a3c25a03",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-133"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-133"></div></div></div>---

#### 2. Configuración de la API de Pandora FMS (ACL)

Para que el script pueda inyectar las reglas mediante la API, la IP desde la que se ejecuta debe estar autorizada.

1. Accede a la consola web de Pandora FMS con un usuario administrador.
2. Navega al menú lateral: **Management &gt;** **Settings** -&gt; **System Settings** -&gt; **General Setup** -&gt; pestaña **Security**.
3. Revisa el campo **IP list with API access** (Lista de IPs API permitidas).
4. Asegúrate de que la IP del servidor que ejecutará el script (o `127.0.0.1` si es ejecución local) esté incluida en la lista separada por comas. *Nota: También puedes usar un `*` para permitir cualquier IP.*
5. Por último genera el token de autorización de la API V2 siguiendo las instrucciones de [esta documentación.](https://pandorafms.com/manual/!current/es/documentation/pandorafms/technical_reference/02_annex_externalapi#ks1_3)

---

#### 3. Recopilación de Parámetros

El script requiere 5 parámetros obligatorios que deben pasarse en un orden específico durante su ejecución. Ten a mano los siguientes datos:

- **API\_URL**: La ruta completa hacia la API v2 de tu Pandora FMS. Debe terminar en `/api/v2`   
    (Ejemplo: `http://192.168.1.100/pandora_console/api/v2`).
- **TOKEN**: El token de autorización de la API de Pandora FMS obtenido en el paso anterior.
- **MISP\_URL**: La dirección web de tu instancia de MISP (Ejemplo: `https://misp.midominio.com`).
- **MISP\_KEY**: La clave de autenticación (Auth Key) de tu usuario en MISP. Puedes generarla en MISP yendo a *Global Actions* -&gt; *My Profile* -&gt; *Auth Keys*.
- **RULE\_ID**: El identificador numérico de la regla SIEM que el script va a crear o actualizar en Pandora FMS   
    (por ejemplo: `200200`).

<p class="callout info">Recomendamos usar un ID alto para evitar conflictos con las reglas nativas del sistema o reglas personalizadas previamente creadas.  
</p>

Una vez que tenga todos los datos correctamente apuntados pasaremos a la ejecución del plugin.

# Ejecución manual

Una vez configurados los permisos y recopilados los datos de acceso, es muy recomendable realizar una primera ejecución manual desde la terminal del servidor. Esto nos permitirá confirmar que hay conectividad bidireccional (con MISP y con la API de Pandora FMS) y verificar que la regla se inyecta correctamente en el motor SIEM.

---

#### 1. Ejecución en terminal:

**Estructura del comando:** El script debe ejecutarse llamando a `python3` y pasándole los 5 parámetros entre comillas para evitar problemas con caracteres especiales:

```bash
python3 /usr/share/pandora_server/util/plugin/misp_to_pandora.py "<PANDORA_API_URL>" "<PANDORA_TOKEN>" "<MISP_URL>" "<MISP_KEY>" "<RULE_ID>"
```

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-147 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_e516df6c8467fd6b","c_b189c74db9e79413",null,"rc_11d7974c2473d7c8",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-147"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-147"></div></div></div>**Ejemplo de ejecución real:**

```bash
python3 /usr/share/pandora_server/util/plugin/misp_to_pandora.py "http://192.168.1.142/pandora_console/api/v2" "ff94a1fa-5cc4-4636..." "https://misp.midominio.com" "lpY9q5yy72SC..." "200200"
```

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-148 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_e516df6c8467fd6b","c_b189c74db9e79413",null,"rc_11d7974c2473d7c8",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-148"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-148"></div></div></div>---

#### 2. Verificación de resultados

Si la ejecución ha sido exitosa, el script conectará con MISP, descargará las IPs maliciosas de los últimos 30 días, generará la expresión regular y recargará el motor SIEM.

Puedes verificar que todo ha ido bien de dos formas:

##### 1. Revisando el Log del plugin:

El script genera un archivo de registro detallado en `/var/log/pandora/misp_api_sync.log`.   
  
Puedes consultarlo con:

```bash
tail -f /var/log/pandora/misp_api_sync.log
```

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-149 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_e516df6c8467fd6b","c_b189c74db9e79413",null,"rc_11d7974c2473d7c8",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-149"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-149"></div></div></div>Un log exitoso mostrará líneas indicando la cantidad de atacantes encontrados, la creación (o actualización) de la regla y un mensaje final de `Hot-Reload SUCCESSFUL.`.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2026-03/scaled-1680-/image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2026-03/image.png)

##### 2. Revisando la consola de Pandora FMS:

Accede a **SIEM** -&gt; **Rules** y busca el ID que hayas utilizado (ej. `200200`). Verás que la regla se ha creado con severidad 14 (Crítica) y contiene la lista completa de IPs lista para detectar intrusiones en tus logs.

Una vez que compruebas que esta la regla creada correctamente en el apartado **Rules** del **SIEM** entonces podemos pasar a configurar su ejecución periódica en **crontab.**

# Automatización (Crontab)

Dado que la inteligencia de amenazas de MISP recibe constantemente nuevos Indicadores de Compromiso (IoCs), es fundamental automatizar la ejecución del script. De esta forma, Pandora FMS actualizará su Mega-Regex de forma autónoma sin requerir intervención manual, manteniendo el motor SIEM siempre protegido contra las amenazas más recientes.

Para automatizar la tarea a nivel de servidor, editaremos el archivo crontab global del sistema.

---

#### 1. Editar el archivo crontab

Accede a la terminal del servidor donde has alojado el script y edita el archivo `/etc/crontab` con privilegios de administrador usando tu editor favorito (vim, nano, etc.):

```bash
sudo vim /etc/crontab
```

---

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-177 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_2469c9669674b15c","c_b189c74db9e79413",null,"rc_031be42fb180986f",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-177"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-177"></div></div></div>#### 2. Añadir la tarea programada

Añade la siguiente línea al final del archivo. En este ejemplo, configuraremos el sistema para que ejecute la sincronización **todos los días de madrugada a las 02:00 AM**:

```bash
0 2 * * * root /usr/bin/python3 /usr/share/pandora_server/util/plugin/misp_to_pandora.py "<PANDORA_API_URL>" "<PANDORA_TOKEN>" "<MISP_URL>" "<MISP_KEY>" "200200" > /dev/null 2>&1
```

<div _ngcontent-ng-c937651176="" class="code-block ng-tns-c937651176-178 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_2469c9669674b15c","c_b189c74db9e79413",null,"rc_031be42fb180986f",null,null,"es",null,1,null,null,1,0]]"><div _ngcontent-ng-c937651176="" class="formatted-code-block-internal-container ng-tns-c937651176-178"><div _ngcontent-ng-c937651176="" class="animated-opacity ng-tns-c937651176-178"></div></div></div><p class="callout info">Recuerda sustituir los parámetros `<...>` por tus credenciales y URLs reales, exactamente igual que en la prueba manual.</p>

**Detalles importantes sobre esta configuración:**

- **`0 2 * * *`**: Indica que el script se ejecutará en el minuto 0 de la hora 2 (2:00 AM), todos los días del mes y de la semana.
- **`root`**: Al usar el crontab del sistema, es obligatorio especificar el usuario que ejecutará la acción. Usamos `root` para garantizar que no haya problemas de permisos al escribir en el archivo de log.
- **Rutas absolutas**: Es imprescindible utilizar la ruta completa al binario de Python (`/usr/bin/python3`) y al script (`/usr/share/pandora_server/util/plugin/misp_to_pandora.py`), ya que el entorno de `cron` es muy limitado y no siempre carga las variables `$PATH` del sistema.
- **`> /dev/null 2>&1`**: Esta instrucción silencia la salida estándar en la consola de cron. No te preocupes por perder información, ya que el propio script se encarga de guardar todo el historial detallado de éxitos y errores en su propio archivo de registro (`/var/log/pandora/misp_api_sync.log`).

Guarda los cambios y sal del editor. El servicio cron detectará automáticamente la modificación del archivo y aplicará la nueva tarea.