Contexto y motivación

En entornos domésticos y de laboratorio es habitual que exista una gran cantidad de dispositivos heterogéneos conectados a la red local:

estaciones Windows y Linux

móviles

Smart TVs

consolas

dispositivos IoT

Aunque estos entornos no suelen disponer de herramientas SOC tradicionales, sí presentan superficie de ataque real:

uso de DNS externo no controlado

exposición a dominios sospechosos o de baja reputación

malware o PUPs generando tráfico anómalo

dispositivos desconocidos uniéndose a la red

configuraciones inseguras difíciles de ver sin telemetría

El objetivo de este proyecto es crear una capacidad de visibilidad y detección temprana en una red doméstica usando hardware de bajo coste, concretamente una Raspberry Pi Zero 2 W, actuando como:

resolutor DNS local

sensor de comportamiento DNS

punto de inventariado básico de clientes

base experimental de laboratorio Blue Team

2. Justificación técnica

Este enfoque se basa en una premisa clave:

El tráfico DNS es una de las fuentes de telemetría más útiles, ligeras y accesibles para detección temprana en entornos pequeños.

Razones para instrumentar DNS

permite observar qué dominios solicitan los dispositivos

permite detectar dominios inusuales o nuevos

ayuda a identificar beaconing, DGA, staging y abuso de resoluciones

permite construir una baseline de comportamiento

consume menos recursos que inspección profunda de paquetes

es más viable en hardware limitado

Razones para usar una Raspberry Pi Zero 2 W

bajo coste

consumo energético reducido

tamaño compacto

suficiente para tareas de DNS y logging ligero

útil como laboratorio reproducible

Razones para descartar una solución pesada

Se evaluó una aproximación basada en Maltrail, pero en este hardware aparecieron limitaciones:

consumo elevado de memoria

inestabilidad operacional

necesidad de feeds y procesamiento más intensivo

peor encaje para servicio 24/7 estable

Por ello se adoptó una arquitectura simplificada y robusta.

3. Objetivo general

Diseñar e implantar un sistema de monitorización ligera centrado en DNS para una red doméstica, que permita:

observar qué clientes usan el DNS local

registrar eventos y anomalías DNS

detectar nuevos dispositivos

construir una baseline de comportamiento

facilitar troubleshooting y ampliaciones posteriores

servir como proyecto documentable y presentable en portfolio Blue Team

4. Objetivos específicos

desplegar unbound como servidor DNS local

redirigir clientes de la red al DNS de la Raspberry Pi

registrar actividad DNS observada

detectar clientes nuevos y dominios nuevos

generar alertas básicas persistentes

mantener el sistema ligero y estable

dejar preparada una senda de integración con dashboards y herramientas SOC

5. Alcance

Incluido

monitorización DNS de dispositivos que usen la Pi como resolver

baseline simple de dominios y clientes

alertado local por eventos relevantes

inventario básico mediante arpwatch

documentación técnica y troubleshooting

No incluido

inspección completa del tráfico cifrado

visibilidad total de dispositivos que usen DoH/DoT o DNS manual

IDS/IPS de red completo

correlación avanzada multi-fuente

EDR en endpoints

captura 24/7 de todo el tráfico

6. Arquitectura propuesta

Componentes principales

Router doméstico

entrega por DHCP la IP de la Pi como DNS primario

Raspberry Pi Zero 2 W

unbound: resolución DNS local

dns-spy: detección de anomalías y persistencia

arpwatch: detección de cambios ARP y nuevos dispositivos

journald y logs locales persistentes

Clientes de red

PCs, móviles, IoT y otros equipos que usen la Pi como DNS

PC principal / estación de análisis

revisión de logs

posible dashboard futuro

documentación y portfolio

Flujo lógico

El cliente de red solicita resolución DNS.

El router le ha entregado la Pi como servidor DNS.

unbound recibe y resuelve la petición.

dns-spy analiza patrones observados.

Las alertas se almacenan localmente.

arpwatch detecta dispositivos nuevos o cambios de MAC/IP.

La información puede revisarse por CLI o exportarse a un dashboard futuro.

7. Componentes desplegados

7.1 Unbound

Funciona como resolutor DNS local y punto de observación principal.

Función operativa

recibir consultas DNS de clientes de la LAN

resolverlas localmente o hacia upstreams configurados

dejar rastro suficiente para observación

7.2 dns-spy

Script ligero orientado a detección básica.

Casos de uso

detectar dominios nuevos

registrar clientes nuevos

detectar TLDs raros

detectar dominios largos o sospechosos

detectar ráfagas de NXDOMAIN

persistir baseline

7.3 arpwatch

Complementa la visibilidad DNS con observación de presencia de dispositivos.

Casos de uso

detectar nuevos hosts

detectar cambios de IP/MAC

ayudar al inventario de red

8. Detalle de artefactos del sistema

Ficheros relevantes

/home/sammi/dns_spy.py

/etc/systemd/system/dns-spy.service

/etc/dns-spy/whitelist.txt

/var/log/soc_alerts.log

/var/lib/dns-spy/seen_domains.txt

/var/lib/dns-spy/seen_clients.txt

/var/log/dns-spy/

9. Pasos de implementación

9.1 Despliegue de Unbound

instalación del servicio

ajuste de escucha en red local

control de acceso para subred LAN

verificación de funcionamiento con consultas reales

9.2 Configuración de router

DHCP activo

DNS principal asignado a 192.168.1.150

recomendación de usar también 192.168.1.150 como secundario para evitar bypass por 8.8.8.8

renovación de leases en clientes

9.3 Verificación de uso real del DNS

Se comprobó qué clientes estaban utilizando efectivamente la Pi mediante:

sort /var/lib/dns-spy/seen_clients.txt

9.4 Despliegue de arpwatch

instalación del servicio

asociación a la interfaz local

validación de eventos

9.5 Sustitución de Maltrail

Se intentó inicialmente una aproximación con Maltrail, pero fue descartada por:

OOM

inestabilidad

sobrecarga para la Pi Zero 2 W

Se sustituyó por una arquitectura ligera basada en eventos DNS.

10. Validaciones realizadas

Validación de resolución DNS

Se comprobó que unbound recibía y resolvía peticiones

Validación de clientes observados

Se comprobó qué IPs estaban usando la Pi:

sort /var/lib/dns-spy/seen_clients.txt

Validación de logs y alertas

Se consultaron:

sudo journalctl -u unbound -f -o cat

tail -f /var/log/soc_alerts.log

Validación de salud del sistema

Se verificaron:

temperatura

RAM

swap

throttling

logs de kernel

estado Wi‑Fi

eventos de reboot

11. Incidencias encontradas

11.1 Hardware limitado para sensor pesado

El uso de Maltrail resultó excesivo para la memoria disponible de la Pi Zero 2 W.

11.2 Inestabilidad y reinicios

Se observaron reinicios reales del sistema, no simples cortes de red.

11.3 Cobertura parcial de monitorización

Solo se monitorizan de forma fiable los clientes que usan la Pi como DNS.

11.4 Bypass por configuración cliente

Algunos dispositivos pueden eludir la monitorización mediante:

DNS manual

DNS secundario externo

DoH

DoT

IPv6 DNS del router/ISP

11.5 Limitaciones del medio Wi‑Fi

Para servicio 24/7, la conectividad Wi‑Fi puede introducir:

mayor latencia

microcortes

pérdida de estabilidad frente a Ethernet

12. Troubleshooting documentado

Diagnóstico básico del sistema

date

uptime

free -m

vcgencmd measure_temp

vcgencmd get_throttled

Estado de servicios

sudo systemctl status unbound dns-spy arpwatch —no-pager

Estado Wi‑Fi

iw dev wlan0 get power_save

cat /proc/net/wireless

sudo journalctl -u wpa_supplicant -n 100 —no-pager

Errores de kernel/sistema

sudo dmesg | grep -iE ‘error|fail|mmc|ext4|reset|watchdog|voltage|under|panic|oom’

sudo journalctl -b -p warning —no-pager

Historial de arranque

uptime -s

who -b

journalctl —list-boots

Revisión de actividad DNS

sudo journalctl -u unbound -f -o cat

tail -n 50 /var/log/soc_alerts.log

sort /var/lib/dns-spy/seen_clients.txt

13. Limitaciones del proyecto

no es un IDS/IPS completo

no ve todo el tráfico cifrado

no detecta todo comportamiento malicioso

depende del uso real de la Pi como DNS

la Pi Zero 2 W impone límites claros de CPU/RAM/I/O

la conectividad Wi‑Fi no es la mejor opción para uso crítico continuado

14. Recomendaciones operativas

A corto plazo

mantener solo servicios ligeros

evitar sensores pesados

minimizar periféricos USB

revisar estabilidad del medio de red

considerar Ethernet USB para 24/7

A medio plazo

separar resolución DNS y análisis

exportar logs a una estación más potente

mejorar baseline y clasificación de eventos

introducir enriquecimiento externo

15. Futuras actualizaciones recomendadas

15.1 Integración con dashboard tipo SOC

Evolución natural:

exportar logs de alertas a un stack visual

crear paneles de:

dominios nuevos por día

top clientes

top NXDOMAIN

TLDs raros

dispositivos nuevos

tendencias temporales

15.2 Integración con SIEM ligero o conocido

Opciones razonables para documentar y portfolio:

Opción A: ELK / Elastic Stack

Filebeat o rsyslog enviando logs a Elasticsearch

Kibana para dashboards

buena visibilidad visual

muy potente para portfolio

Opción B: Graylog

ingestión sencilla

streams y alertas

fácil de presentar como mini-SOC

Opción C: Wazuh

ampliamente conocido en Blue Team

útil si luego añades agentes en endpoints

muy potente para portfolio defensivo

Opción D: Splunk Free / trial en lab

muy reconocible en mercado laboral

útil para demostrar parsing, dashboards y alertas

15.3 Integración con MISP / Threat Intel

A futuro, dns-spy podría enriquecer dominios observados contra:

MISP

AlienVault OTX

Abuse.ch

URLhaus

OpenPhish

Esto permitiría:

clasificar dominios por reputación

hacer hunting sobre observables

justificar detecciones

15.4 Integración con Zeek en hardware más potente

Si migras a una máquina superior:

usar Zeek para análisis de red avanzado

correlacionar dns.log, conn.log, ssl.log

elevar el laboratorio a nivel Blue Team serio

15.5 Integración con Suricata

Con hardware superior o estación dedicada:

IDS basado en firmas

EVE JSON

paneles en Kibana o Wazuh

16. Propuesta de investigación Blue Team

Este proyecto se puede convertir en una línea de investigación práctica muy válida.

Líneas de investigación sugeridas

16.1 Baseline DNS doméstico

qué dominios aparecen de forma habitual

qué servicios generan más ruido

cómo distinguir normalidad de anomalía

16.2 Estudio de telemetría de aplicaciones

Microsoft

Google

Spotify

updates

servicios cloud

16.3 Detección de rarezas DNS

dominios largos

TLD inusuales

NXDOMAIN bursts

dominios recién vistos

cambios bruscos por cliente

16.4 Evasión de visibilidad

impacto de DoH/DoT

bypass por IPv6

DNS manual

hardcoded resolvers

16.5 Threat hunting en red doméstica

Preguntas de hunting:

¿qué clientes consultan dominios nuevos con más frecuencia?

¿qué dominios son exclusivos de un solo host?

¿qué patrones parecen automáticos o periódicos?

¿qué resoluciones coinciden con software potencialmente no deseado?

16.6 Comparativa de sensores ligeros

Unbound + parser

Pi-hole + logs

Dnsmasq + parser

Zeek DNS logs en hardware mayor

17. Posibilidades de análisis para portfolio

Este proyecto tiene mucho valor si lo presentas bien.

Qué puedes mostrar

diagrama de arquitectura

decisiones técnicas y trade-offs

baseline de DNS real

ejemplos de alertas

análisis de clientes

troubleshooting real

evolución desde intento fallido con Maltrail hacia solución estable

plan de madurez del laboratorio

Qué da valor profesional

enfoque defensivo práctico

capacidad de depuración real

ajuste de arquitectura al hardware disponible

criterio para descartar herramientas no adecuadas

pensamiento SOC / detección / observabilidad

18. Cómo llevar los logs a un dashboard conocido de SOC

Aquí te dejo una sección documentable para el informe.

Opción recomendada para portfolio: Wazuh o Elastic

Variante 1: Raspberry Pi → syslog/rsyslog → servidor Elastic/Graylog

La Pi genera logs en:

journald

/var/log/soc_alerts.log

Flujo

dns-spy escribe alertas en /var/log/soc_alerts.log

rsyslog o filebeat las envía al servidor central

el servidor indexa y visualiza

Kibana / Graylog muestra paneles

Ejemplo conceptual de eventos a enviar

cliente nuevo detectado

dominio nuevo detectado

TLD raro

burst de NXDOMAIN

dominio longitud anómala

Ventajas

arquitectura clásica SOC

desacopla sensor y análisis

muy buena para portfolio

Variante 2: Raspberry Pi → Wazuh manager

Se puede configurar el fichero de alertas local como fuente de logs.

Beneficios

reglas

dashboards

correlación

marca reconocida en Blue Team

Variante 3: Raspberry Pi → Splunk lab

Enviar soc_alerts.log a Splunk para:

indexación

búsquedas SPL

dashboards

saved searches

Muy útil para enseñar:

parsing

normalización

KPI defensivos

19. KPIs y visualizaciones recomendadas para dashboard

Paneles útiles

top dominios por día

top clientes por volumen DNS

dominios nuevos por día

clientes nuevos por semana

TLDs raros detectados

ratio NXDOMAIN por cliente

dominios únicos por host

actividad DNS por hora

dominios sospechosos enriquecidos con threat intel

Casos de uso de dashboard

triage rápido

hunting

inventario dinámico

demostración visual para portfolio

informes mensuales

20. Propuesta de madurez por fases

Fase 1 --- Sensor básico

Unbound

dns-spy

arpwatch

alertas locales

Fase 2 --- Centralización

rsyslog/filebeat

dashboard en Elastic/Graylog/Wazuh

Fase 3 --- Enriquecimiento

threat intel feeds

clasificación por reputación

tagging de observables

Fase 4 --- Correlación

añadir Zeek/Suricata en hardware superior

correlacionar DNS con conexiones y TLS

Fase 5 --- Portfolio profesional

write-up técnico

diagramas

dashboards

hipótesis de hunting

conclusiones

roadmap

21. Conclusiones

El proyecto demuestra que es posible construir una capacidad inicial de monitorización defensiva en una red doméstica con hardware muy limitado, siempre que se adapten correctamente las expectativas y la arquitectura.

La Raspberry Pi Zero 2 W no es adecuada para sensores pesados o pipelines complejos, pero sí puede servir como:

resolutor DNS instrumentado

sensor básico de anomalías

punto de inventario ligero

laboratorio formativo de prácticas Blue Team

El valor técnico del proyecto no reside solo en la herramienta desplegada, sino en las decisiones de ingeniería tomadas:

priorizar estabilidad sobre complejidad

sustituir componentes demasiado pesados

identificar limitaciones de visibilidad

estructurar un roadmap de madurez

preparar integración futura con dashboards y tooling SOC real

22. Cierre orientado a portfolio

Este proyecto es especialmente útil como portfolio porque muestra:

diseño de arquitectura

visibilidad de red

análisis de logs

detección de anomalías

troubleshooting real

criterio técnico bajo restricciones

evolución hacia un mini-SOC doméstico

Si quieres, el siguiente paso útil es uno de estos dos:

te lo convierto en documento formal tipo memoria técnica/proyecto

te lo convierto en versión portfolio/currículum/LinkedIn/GitHub, mucho más orientada a venderlo profesionalmente

Si quieres, también te puedo preparar después una sección adicional con:

diagrama ASCII/mermaid de arquitectura

roadmap de mejoras

KPIs SOC

casos de uso de detección

hipótesis de threat hunting.

1) Objetivo de la arquitectura limpia

La propuesta limpia sustituye el intento con Maltrail por una solución ligera y estable para una Raspberry Pi Zero 2 W:

  • Unbound como DNS local y punto de observación.

  • dns-spy como detector de eventos DNS y generador de alertas.

  • arpwatch como detector de nuevos dispositivos en red.

  • logs persistentes para auditoría.

  • servicio systemd para operación 24/7.

Motivo del cambio

Maltrail resultó demasiado pesado/inestable para este hardware y además complicó la arquitectura al depender de componentes adicionales. La solución basada en DNS ofrece:

  • menor consumo

  • mayor estabilidad

  • mejor mantenibilidad

  • visibilidad útil para una red doméstica

2) Qué se limpia / se deja fuera

Se eliminó o dejó fuera de la arquitectura estable:

  • maltrail

  • captura continua pesada

  • modo monitor como función permanente

  • dependencias de server en Windows

  • feeds pesados de reputación

Se conserva:

  • unbound

  • arpwatch

  • script dns_spy.py

  • archivo de alertas /var/log/soc_alerts.log

3) Comandos de logs que te fui dando

Aquí van todos los comandos relevantes, clasificados por finalidad.

3.1 Logs del servicio DNS Spy

Ver el servicio en tiempo real

comando:: sudo journalctl -u dns-spy -f

Ver el estado resumido del servicio

comando:: sudo systemctl status dns-spy.service —no-pager

Ver logs del servicio en el boot actual

comando:: sudo journalctl -u dns-spy -b —no-pager

Ver últimas líneas del log de alertas persistente

tail -n 50 /var/log/soc_alerts.log

Seguir el log persistente en tiempo real

tail -f /var/log/soc_alerts.log

Ver solo alertas de nivel alto o advertencia

grep -E ‘ALERT|HIGH|WARN’ /var/log/soc_alerts.log

3.2 Logs de Unbound

Ver estado del servicio

comando:: sudo systemctl status unbound —no-pager

Seguir en tiempo real los logs de Unbound

comando:: sudo journalctl -u unbound -f -o cat

Ver logs del boot actual de Unbound

comando:: sudo journalctl -u unbound -b —no-pager

Ver las consultas DNS observadas

comando:: sudo journalctl -u unbound -o cat | grep ‘info:‘

Resumen de consultas por “campo 4” del log

comando:: sudo journalctl -u unbound -o cat | grep ‘info:’ | awk ‘{print $4}’ | sort | uniq -c

Nota: ese comando no agrupa por IP cliente de forma fiable en todos los formatos de log; agrupa el campo 4, que en tu caso terminó mostrando dominios. Es útil como resumen bruto, pero no como parser robusto de clientes.

3.3 Ver qué clientes ha aprendido dns-spy

sort /var/lib/dns-spy/seen_clients.txt

Ver cuántos dominios ha aprendido

wc -l /var/lib/dns-spy/seen_domains.txt

Ver primeros dominios almacenados

head -n 50 /var/lib/dns-spy/seen_domains.txt

3.4 Logs de Arpwatch

Estado del servicio

comando:: sudo systemctl status arpwatch —no-pager

Ver eventos en tiempo real

comando:: sudo journalctl -u arpwatch -f

Ver logs del boot actual

comando:: sudo journalctl -u arpwatch -b —no-pager

3.5 Logs Wi‑Fi / conectividad

Logs recientes de wpa_supplicant

comando:: sudo journalctl -u wpa_supplicant -n 100 —no-pager

Logs del boot actual relacionados con Wi‑Fi/red

comando:: sudo journalctl -b | grep -iE ‘wlan0|deauth|disconnect|disassoc|carrier|dhcpcd|wpa’

Estado del enlace Wi‑Fi actual

comando:: iw dev wlan0 link

Estado del ahorro de energía

comando:: iw dev wlan0 get power_save

Calidad general inalámbrica

comando:: cat /proc/net/wireless

3.6 Logs de kernel / hardware

Buscar eventos críticos

comando:: sudo dmesg | grep -iE ‘error|fail|mmc|ext4|reset|watchdog|voltage|under|panic|oom’

Ver advertencias del boot actual

comando:: sudo journalctl -b -p warning —no-pager

Buscar problemas de Wi‑Fi/firmware/kernel

comando:: sudo dmesg | grep -iE ‘wlan0|brcm|firmware|disconnect|deauth|timeout’

Buscar eventos de SD/MMC

dmesg | grep -i mmc

3.7 Estado de reinicios / boots

Hora de arranque del sistema

uptime -s

Último boot

who -b

Lista de boots guardados en journal

journalctl —list-boots

3.8 Salud general del sistema

Temperatura

vcgencmd measure_temp

Estado de throttling / undervoltage

vcgencmd get_throttled

Memoria

free -m

Carga y uptime

uptime

3.9 Estado de servicios principales

comando:: sudo systemctl status unbound dns-spy arpwatch —no-pager

3.10 Ficheros de configuración y artefactos importantes

Script principal

/home/sammi/dns_spy.py

Servicio systemd

/etc/systemd/system/dns-spy.service

Whitelist

/etc/dns-spy/whitelist.txt

Log de alertas

/var/log/soc_alerts.log

CSVs diarios

/var/log/dns-spy/

Estado persistente

/var/lib/dns-spy/seen_domains.txt

/var/lib/dns-spy/seen_clients.txt

4) Flujo recomendado para documentar una incidencia

Cuando notes que “la Pi se desconecta” o “parece caída”, documenta siempre así:

4.1 Registrar estado básico

date

uptime

free -m

vcgencmd measure_temp

vcgencmd get_throttled

4.2 Revisar servicios principales

comando:: sudo systemctl status unbound dns-spy arpwatch —no-pager

4.3 Revisar conectividad Wi‑Fi

comando:: iw dev wlan0 link

comando:: iw dev wlan0 get power_save

comando:: cat /proc/net/wireless

comando:: sudo journalctl -u wpa_supplicant -n 100 —no-pager

4.4 Revisar errores de sistema

comando:: sudo journalctl -b -p warning —no-pager

comando:: sudo dmesg | grep -iE ‘error|fail|mmc|ext4|reset|watchdog|voltage|under|panic|oom’

4.5 Revisar si hubo reboot real

uptime -s

who -b

journalctl —list-boots

4.6 Revisar actividad DNS

comando:: sudo journalctl -u unbound -f -o cat

tail -n 50 /var/log/soc_alerts.log

sort /var/lib/dns-spy/seen_clients.txt

5) Resumen narrativo para tu documentación

Te dejo un texto base que puedes reutilizar.

Descripción del cambio de arquitectura

Se descartó el uso de Maltrail por inestabilidad y consumo excesivo en Raspberry Pi Zero 2 W. Se optó por una arquitectura ligera basada en Unbound y un detector propio (dns-spy) para monitorización DNS doméstica 24/7.

Componentes desplegados

  • Unbound como resolutor DNS local.

  • dns-spy como monitor de consultas DNS y generador de alertas.

  • arpwatch como detector de nuevos dispositivos en red.

  • journald + log persistente /var/log/soc_alerts.log.

  • servicio dns-spy.service gestionado por systemd.

Funcionalidades obtenidas

  • detección de nuevos clientes

  • detección de dominios nuevos

  • detección de dominios largos

  • detección de TLDs raros

  • detección de ráfagas NXDOMAIN

  • persistencia de baseline y export CSV

Limitación importante

Solo se monitorizan de forma fiable los dispositivos que usan la Raspberry Pi como servidor DNS. Para ampliar cobertura es necesario:

  • configurar DHCP del router para usar la Pi como DNS primario y secundario

  • renovar leases en clientes

  • tener en cuenta bypass por DoH/DoT/IPv6/DNS manual

6) Comando corto “pack de diagnóstico”

Si quieres un bloque único para copiar en incidencias:

date

echo ”### BASIC”

uptime

free -m

vcgencmd measure_temp

vcgencmd get_throttled

echo ”### SERVICES”

comando:: sudo systemctl status unbound dns-spy arpwatch —no-pager

echo ”### WIFI”

comando:: iw dev wlan0 link

comando:: iw dev wlan0 get power_save

comando:: cat /proc/net/wireless

comando:: sudo journalctl -u wpa_supplicant -n 50 —no-pager

echo ”### WARNINGS”

comando:: sudo journalctl -b -p warning —no-pager

echo ”### KERNEL”

comando:: sudo dmesg | grep -iE ‘error|fail|mmc|ext4|reset|watchdog|voltage|under|panic|oom’

echo ”### BOOTS”

uptime -s

who -b

journalctl —list-boots

echo ”### DNS”

tail -n 50 /var/log/soc_alerts.log

sort /var/lib/dns-spy/seen_clients.txt

Si quieres, en el siguiente mensaje te lo convierto en una plantilla de informe técnico completa, en formato:

  • objetivo

  • arquitectura

  • pasos

  • validaciones

  • incidencias

  • troubleshooting

  • conclusiones.