>_
Terminal
🏴‍☠️
Mini CTF
📊
Activity
guest@dsr: ~
guest@dsr:~$ ./welcome.sh
guest@dsr:~$ cat configuracionIDS.md
Última modificación: 11-02-2026

Configuración de IDS en red doméstica

He decidido montar un IDS en mi red local para monitorizar el tráfico de mi red.

Al tener un servidor proxmox lo que hago es crear una Maquina Virtual con Ubuntu 24.04 y ahi instalaremos Suricata.

EL principal problema de la configuración de un IDS es poner su tarjeta de red en modo promiscuo para que pueda observar el tráfico que navega por la red. Al ser una bridge de la propia tarjeta del servidor la configuración de ello es bastante complejo. Sin embargo, para que podamos decidir el tráfico que pasa y analizar el tráfico tenemos la opción de en los dispositivos que vamos a monitorizar con Suricata su gateway en vez del router, sea la VM con Suricata que acabamos de crear.

De esta manera, los dispositivos que requieran de monitorización en vez de su gateway ser 192.168.1.1 (normalmente el router) a la IP de la VM con Suricata (en mi caso 192.168.1.11)

Entonces el flujo tendrá el siguiente esquema:

  1. Dispositivo que queremos monitorizar 192.168.1.100 configura su gateway a la VM de Suricata 192.168.1.11
  2. Una vez la conexión llega a Suricata, este monitorizará el tráfico.
  3. Una vez Suricata monitorice el tráfico, este saldrá por el gateway configurado en Suricata (el router real de la red 192.168.1.1)
  4. Una vez llega al router este harás las peticiones necesarias.

El proceso es analizado también de forma inversa, todas las conexiones que vaya al dispositivo que queremos monitorizar pasará antes por Suricata y analizará este tráfico de la misma manera.

Visualización de los datos

Ya que no queremos estar leyendo el archivo eve.json todo el rato para ver las alertas configuraremos un entorno gráfico de manera que su visualización sea mucho más cómoda.

Para mi caso he usado EveBox, que tiene un entorno sencillo y podemos visitarlo desde su puerto expuesto.

image.png

Notificaciones importantes

EveBox no tiene sistema de notificaciones, solo de visualización y lo interesante en este ámbito es que “alguien” nos avise que está pasando algo raro en nuestra red.

La solución que he planteado para este problema es usar un flujo de trabajo de n8n. El plan sería el siguiente:

  1. Ejecutaremos un script en nuestra máquina con Suricata, que periódicamente irá mirando el archivo eve.json en busca de alertas críticas (2 o 1). Una vez encuentra una alerta de este estilo llamará a un webhook configurado en n8n pasándole toda la información referente a la alerta.

  2. El flujo llegará a n8n y este lo primero que hará será añadirlo a una base de datos integrada de n8n para tener guardadas las alertas.

  3. Después pasara a un agente de IA que con el siguiente promt analizará si la alerta es de vital importancia o no. Meteremos memoria basada en el nombre de la firma de cara a saber si la misma alerta se ha repetido varias veces en un corto periodo de tiempo. Y este análisis lo pasará a un canal de telegram.

    Analiza esta alerta de Suricata en una red doméstica privada.
    No es un servidor público.
    
    Decide si merece atención humana inmediata.
    
    Clasifica como:
    - IGNORAR
    - MONITORIZAR
    - ALERTAR
    
    Explica en 1 frases máximo.
    Evento:
      timestamp:{{ $json.body.timestamp }}
      signature:{{ $json.body.signature }}
      sverity:{{ $json.body.severity }}
      category:{{ $json.body.category }}
      src_ip:{{ $json.body.src_ip }}
      src_port:{{ $json.body.src_port }}
      dest_ip:{{ $json.body.dest_ip }}
      dest_port:{{ $json.body.dest_port }}
      proto:{{ $json.body.proto }}
      flow_id:{{ $json.body.flow_id }}
    
    

image.png

Script de notificaciones Webhook

import json
import time
import requests

EVE_FILE = "/var/log/suricata/eve.json"
WEBHOOK_URL = "https://n8n.soriaruiz.com/webhook/suricata-alert"

# Severidades importantes (1=high, 2=medium)
IMPORTANT_SEVERITIES = {1, 2}

def follow(file):
    file.seek(0, 2)
    while True:
        line = file.readline()
        if not line:
            time.sleep(0.2)
            continue
        yield line

def summarize_alert(event):
    alert = event.get("alert", {})
    return {
        "timestamp": event.get("timestamp"),
        "signature": alert.get("signature"),
        "severity": alert.get("severity"),
        "category": alert.get("category"),
        "src_ip": event.get("src_ip"),
        "src_port": event.get("src_port"),
        "dest_ip": event.get("dest_ip"),
        "dest_port": event.get("dest_port"),
        "proto": event.get("proto"),
        "flow_id": event.get("flow_id")
    }

def send_to_webhook(data):
    try:
        r = requests.post(WEBHOOK_URL, json=data, timeout=5)
        r.raise_for_status()
    except Exception as e:
        print(f"[!] Error enviando al webhook: {e}")

def main():
    print("[*] Escuchando eve.json…")
    with open(EVE_FILE, "r") as f:
        for line in follow(f):
            try:
                event = json.loads(line)
            except json.JSONDecodeError:
                continue

            if event.get("event_type") != "alert":
                continue

            alert = event.get("alert", {})
            severity = alert.get("severity")

            if severity not in IMPORTANT_SEVERITIES:
                continue

            payload = summarize_alert(event)
            send_to_webhook(payload)

if __name__ == "__main__":
    main()

Prueba real de comportamiento

Tras la instalación final veo que me llegan bastantes alertas con la misma firma y decido revisarlo.

image.png

Es bastante consistente entonces me empiezo a preocupar. Decido mirarlo en el panel de EveBox.

{
    "_id": 167051,
    "_source": {
        "alert": {
            "action": "allowed",
            "category": "Potentially Bad Traffic",
            "gid": 1,
            "metadata": {
                "attack_target": [
                    "Client_Endpoint"
                ],
                "confidence": [
                    "High"
                ],
                "created_at": [
                    "2022_11_15"
                ],
                "deployment": [
                    "Perimeter"
                ],
                "signature_severity": [
                    "Informational"
                ],
                "tag": [
                    "Description_Generated_By_Proofpoint_Nexus"
                ],
                "updated_at": [
                    "2022_11_15"
                ]
            },
            "rev": 1,
            "severity": 2,
            "signature": "ET INFO ZeroTier Related Activity (udp)",
            "signature_id": 2039784,
            "source": {
                "ip": "103.195.103.66",
                "port": 9993
            },
            "target": {
                "ip": "192.168.1.162",
                "port": 9993
            }
        },
        "app_proto": "failed",
        "dest_ip": "103.195.103.66",
        "dest_port": 9993,
        "direction": "to_server",
        "evebox": {
            "agent": {
                "filename": "/var/log/suricata/eve.json"
            },
            "history": []
        },
        "event_type": "alert",
        "flow": {
            "bytes_toclient": 3942,
            "bytes_toserver": 4870,
            "dest_ip": "103.195.103.66",
            "dest_port": 9993,
            "pkts_toclient": 6,
            "pkts_toserver": 33,
            "src_ip": "192.168.1.162",
            "src_port": 9993,
            "start": "2026-02-11T20:19:33.156614Z"
        },
        "flow_id": 1517078657270305,
        "pkt_src": "wire/pcap",
        "proto": "UDP",
        "src_ip": "192.168.1.162",
        "src_port": 9993,
        "tags": [],
        "timestamp": "2026-02-11T20:53:41.658253Z"
    },
    "_metadata": {
        "count": 10,
        "escalated_count": 0,
        "min_timestamp": "2026-02-11T20:19:33.156614+0000",
        "max_timestamp": "2026-02-11T20:53:41.658253+0000"
    }
}

La IP de origen es mi Mac, pero no se que es, no lo llego a identificar de primera mano.

Tras investigar un poco ZeroTier se puede instalar y es necesario de cada a acceder a recursos de forma remota, lo cual tiene sentido pero a la vez me preocupa porque no me suena de nada haberlo instalado.

Con el comando sudo zerotier-cli info podemos averiguar que está pasando y para mi sorpresa:

❯ sudo zerotier-cli info
200 info 165e6a344f 1.14.0 TUNNELE

Decido ver a que network está conectada con el comando zerotier-cli listnetworks:

❯ zerotier-cli listnetworks

200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks cc659d29df8b2b86 IceWhale-RemoteAccess 86:3d:d5:b5:1d:d2 OK PUBLIC feth2274 fdcc:659d:29df:8b2b:8699:9316:5e6a:344f/88,10.249.79.145/16

Recuerdo que hace un año instale ZimaOS el cual tiene un modo de acceder a el remotamente. Lo identifico por IceWhale que es la empresa.

Procedo a quitarlo pues ya no lo uso más y estando latente puede ser peligroso pues cualquiera podría conectarse.

❯ sudo zerotier-cli leave cc659d29df8b2b86

200 leave OK

<< cd ..

HackSimulator - Mini CTF

Top Hackers

  1. Loading...

OSINT Mini CTF

This is a timed competition. Your goal is to find all 4 flag fragments scattered across the simulated system using OSINT techniques.

Once you start, the timer will begin. Good luck.

Activity Monitor
Process Name ↕ % CPU ↓ % Memory ↕ Action

CPU 0.0%

30s history

Memory 0.0%

30s history
— processes CPU avg: — RAM avg: —
>_
🏴‍☠️
📊