Engineering logbook · systems record Cuaderno de ingeniería · registro de sistemas

Zoel Arias Manchón

I build whole systems, with the security designed in rather than added afterwards. Construyo sistemas completos, con la seguridad diseñada dentro y no añadida después.

OpenedAbierto
June 2026Junio 2026
EntriesEntradas
13
Last workedÚltima mano
September 2026Septiembre 2026

Summary Resumen

This notebook records thirteen systems built between June and September 2026: firmware, telemetry pipelines, backend services, security tooling and a Linux distribution compiled from scratch. Each entry keeps the day it was opened, a real line of the program’s output, and the handful of decisions holding it up.

Este cuaderno recoge trece sistemas construidos entre junio y septiembre de 2026: firmware, canalizaciones de telemetría, servicios backend, herramientas de seguridad y una distribución Linux compilada desde cero. Cada entrada conserva el día en que se abrió, una línea real de la salida del programa y el puñado de decisiones que la sostienen.

It reads in order, like a notebook. The index below is the shortcut; nothing opens in another tab unless you ask for it.

Se lee en orden, como un cuaderno. El índice de abajo es el atajo; nada se abre en otra pestaña sin que se pida.

Index of entries Índice de entradas

01–13

  1. 01 Real-time energy Energía en tiempo real eastron-lorawan-energy-monitoring 02 JUN 02 JUN
  2. 02 Hardened access Acceso blindado aegis-zero-trust 16 JUN 16 JUN
  3. 03 Industrial radar Radar industrial pyscan 27 JUN 27 JUN
  4. 04 Space sentinel Centinela de espacios sentinel-node 12 JUL 12 JUL
  5. 05 Telemetry that trusts nothing Telemetría que no confía agrisentinel 13 JUL 13 JUL
  6. 06 A distro that hardens itself Distro que se blinda sola emberwall 16 JUL 16 JUL
  7. 07 The file watchman El vigilante de ficheros phosphor 20 JUL 20 JUL
  8. 08 Edit without overwriting blind Editar sin sobrescribir a ciegas maat 22 JUL 22 JUL
  9. 09 Live dashboards Paneles en vivo crypto-dashboard 02 AUG 02 AGO
  10. 10 A trap that refuses to become a weapon Una trampa que se niega a ser un arma honeytrap 02 SEP 02 SEP
  11. 11 Fleet identity, not copyable tokens Identidad de flota, no tokens copiables keystone-control-plane 02 SEP 02 SEP
  12. 12 Isolation enforced by the engine El aislamiento lo impone el motor ferrogate 02 SEP 02 SEP
  13. 13 The sensor has no clock El sensor no tiene reloj psychron 08 SEP 08 SEP

Evidence annex Anexo de pruebas

FIG. 1 · FIG. 2 · TABLE 1TABLA 1

FIG. 1 entry 13 · psychron entrada 13 · psychron ESP32 · DHT22 · SSD1306 · MQTT mTLS A hand over the sensor and the whole chain moves. Real hardware on a breadboard: the node signs its telemetry with a client certificate and publishes over mutual TLS — humidity climbs on the dashboard as it climbs on the display. Una mano sobre el sensor y la cadena entera se mueve. Hardware real sobre protoboard: el nodo firma su telemetría con un certificado de cliente y publica sobre TLS mutuo — la humedad sube en el panel a la vez que sube en la pantalla.
The maat editor refusing a save because the file on disk no longer matches the buffer
FIG. 2 entry 08 · maat entrada 08 · maat Rust · ratatui · SHA-256 The editor being driven through its four modes. The save it refuses is the point: the file on disk no longer matches the fingerprint taken when it was opened. El editor recorriendo sus cuatro modos. Lo interesante es el guardado que rechaza: el fichero en disco ya no coincide con la huella tomada al abrirlo.
TABLE 1TABLA 1 entry 10 · honeytrap entrada 10 · honeytrap MQTT · CoAP Verbatim classifier output over eight scripted attacks. Severe rows carry the SEVERE mark as well as the colour, so the severity survives a greyscale print and a colour-blind reader. Salida literal del clasificador sobre ocho ataques guionizados. Las filas graves llevan la marca GRAVE además del color, así que la severidad sobrevive a una impresión en gris y a un lector daltónico.
Scenario Escenario Verdict Veredicto Note Nota
credential_bruteforce BRUTE_FORCE 5 distinct credential pairs, one session 5 pares de credenciales distintos, una sesión
wildcard_harvest WILDCARD_HARVEST subscription to the full wildcard suscripción al comodín completo
coap_amplification AMPLIFICATION_ATTEMPT SEVEREGRAVE 5 replies suppressed · 0 bytes out 5 respuestas suprimidas · 0 bytes de salida
coap_open_proxy OPEN_PROXY_ABUSE SEVEREGRAVE Proxy-Uri refused · 0 bytes out Proxy-Uri rechazado · 0 bytes de salida

The verdict belongs to the session, not the packet — and the two CoAP rows returned nothing at all: answering them would have turned the honeypot into a reflector aimed at a third party.

El veredicto pertenece a la sesión, no al paquete — y las dos filas CoAP no devolvieron nada: responderlas habría convertido el honeypot en un reflector apuntando a un tercero.

The log El registro

June 2026 Junio 2026

3 entries 3 entradas

01 eastron-lorawan-energy-monitoring

Real-time energy Energía en tiempo real

Electrical monitoring over LoRaWAN: the meter transmits, the telemetry stack processes and consumption lands on Grafana dashboards with time-series history. It is the most direct reference for turning a physical installation into an energy-observability service.

Monitorización eléctrica sobre LoRaWAN: el contador emite, la pila de telemetría procesa y el consumo aparece en paneles Grafana con histórico de series temporales. Es la referencia más directa para convertir una instalación física en un servicio de observabilidad energética.

Program output Salida del programa telemetry — sdm230 · live uplink telemetría — sdm230 · uplink en vivo

  • LoRaWAN uplinks Uplinks LoRaWAN
  • Time-series history Series temporales
  • Grafana dashboards Paneles Grafana
02 aegis-zero-trust

Hardened access Acceso blindado

A zero-trust identity platform with a live operations console: passkeys, token rotation, a risk engine and hash-chained audit — plus a ten-scenario attack range for watching the defenses respond.

Plataforma de identidad zero-trust con consola de operaciones en vivo: passkeys, rotación de tokens, motor de riesgo y auditoría encadenada — más un laboratorio con diez ataques para observar cómo responden las defensas.

Program output Salida del programa aegis — soc console · sse:connected aegis — consola soc · sse:conectado

  • WebAuthn passkeys Passkeys WebAuthn
  • Hash-chained audit Cadena de auditoría
  • 10 attack scenarios 10 escenarios de ataque
03 pyscan

Industrial radar Radar industrial

A modular network and industrial-protocol scanner that identifies Modbus, IEC-104 and S7comm, discovers hosts, detects services and can capture live traffic. Its hexagonal architecture lets new scan strategies drop in without contaminating the core.

Escáner modular de redes y protocolos industriales que identifica Modbus, IEC-104 y S7comm, descubre hosts, detecta servicios y puede capturar tráfico en vivo. La arquitectura hexagonal permite añadir nuevas estrategias de escaneo sin contaminar el núcleo.

Program output Salida del programa $ sudo pyscan scan 10.0.8.0/24 --top-ports 100 $ sudo pyscan scan 10.0.8.0/24 --top-ports 100

  • 3 OT protocols 3 protocolos OT
  • 74 tests · CI 74 tests · CI
  • Live pcap capture Captura pcap en vivo

July 2026 Julio 2026

5 entries 5 entradas

04 sentinel-node

Space sentinel Centinela de espacios

A multi-sensor sentinel node with ML at the edge: air quality, mmWave presence, acoustic events with TinyML and vision with ESP32-CAM. Models run on-device and publish only the verdict — raw audio and images never enter the telemetry. A coherent simulated space drives every channel and fitness functions guard the architecture.

Nodo centinela multisensor con ML en el borde: calidad de aire, presencia mmWave, eventos acústicos con TinyML y visión con ESP32-CAM. Los modelos corren en el dispositivo y solo publican el veredicto — ni audio ni imágenes crudas entran en la telemetría. Un espacio simulado coherente alimenta todos los canales y las funciones de fitness vigilan la arquitectura.

Program output Salida del programa sentinel — room-1 · presence:yes · ml:on-device sentinel — sala-1 · presencia:sí · ml:on-device

  • On-device ML ML on-device
  • Privacy by design Privacidad por diseño
  • 4 sensor channels 4 canales de sensor
  • 45 tests + fitness 45 tests + fitness
05 agrisentinel

Telemetry that trusts nothing Telemetría que no confía

A rural IoT lab that treats the sensor network itself as an attack surface. Every node signs telemetry with HMAC, sequence and nonce; the gateway validates each frame and runs range, replay, stale and rate checks before publishing. Clean data and security alerts travel over separate MQTT streams into two Grafana dashboards: agronomy and SOC.

Laboratorio IoT rural que trata la propia red de sensores como superficie de ataque. Cada nodo firma su telemetría con HMAC, secuencia y nonce; el gateway valida cada frame y ejecuta detección de rango, replay, caducidad y frecuencia antes de publicar. Los datos limpios y las alertas viajan por canales MQTT separados hacia dos dashboards Grafana: agronomía y SOC.

Program output Salida del programa agrisentinel — signed frame · replay rejected agrisentinel — frame firmado · replay rechazado

  • HMAC + anti-replay HMAC + anti-replay
  • 4 anomaly detectors 4 detectores de anomalía
  • Agronomy + SOC Agronomía + SOC
  • 33 tests · CI 33 tests · CI
06 emberwall

A distro that hardens itself Distro que se blinda sola

A whole Linux distribution built from scratch with Buildroot: its own toolchain, a hardened kernel and a few-MB immutable userland — no package manager, PIE/RELRO/SSP, KASLR, lockdown+yama LSMs and an nftables default-deny firewall. It ships sentinel, a native Rust tool fusing my pyscan scanner and the AegisVault crypto core into a single static binary: TCP/UDP scanning with OT/ICS recognition plus an argon2id + XChaCha20 vault. Designed to run as the secure MQTT edge gateway.

Una distribución Linux entera compilada desde cero con Buildroot: su propio toolchain, kernel endurecido y un userland inmutable de pocos MB — sin gestor de paquetes, con PIE/RELRO/SSP, KASLR, LSMs lockdown+yama y firewall nftables default-deny. Lleva sentinel, una herramienta nativa en Rust que fusiona mi escáner pyscan y el núcleo cripto de AegisVault en un único binario estático: escaneo TCP/UDP con reconocimiento OT/ICS más un vault argon2id + XChaCha20. Diseñada para correr como pasarela MQTT segura en el borde.

Program output Salida del programa emberwall — boot · sentinel armed · mqtt tls emberwall — boot · sentinel armado · mqtt tls

  • Buildroot from scratch Buildroot desde cero
  • Hardened kernel + userland Kernel + userland endurecidos
  • sentinel: Rust scan + vault sentinel: scan + vault en Rust
  • x86-64 and ARM64 x86-64 y ARM64
07 phosphor

The file watchman El vigilante de ficheros

A desktop file-integrity monitor in Rust with an amber-CRT egui interface. It anchors an HMAC-signed SHA-256 baseline and watches a folder in real time; modifications, additions and deletions surface instantly, with native notifications and JSON/CEF export for SIEM.

Monitor de integridad de ficheros de escritorio en Rust con interfaz egui ámbar-CRT. Ancla un baseline SHA-256 firmado con HMAC y vigila una carpeta en tiempo real; cualquier modificación, alta o borrado aparece al instante, con notificación nativa y exportación JSON/CEF para SIEM.

Program output Salida del programa phosphor — guarding · sha-256 · hmac:on phosphor — vigilando · sha-256 · hmac:on

  • Live filesystem watch Watch en vivo
  • HMAC-signed baseline Baseline firmado HMAC
  • Native egui GUI GUI nativa egui
  • JSON/CEF export Export JSON/CEF
08 maat

Edit without overwriting blind Editar sin sobrescribir a ciegas

A retro modal terminal editor written in Rust. Maat fingerprints the file on open, checks the disk before every save, blocks conflicting overwrites, writes atomically and emits JSON/CEF events. It also includes incremental search, undo/redo, line registers and non-interactive verification for scripts and appliances.

Editor modal retro para terminal escrito en Rust. Maat toma una huella SHA-256 al abrir el archivo, comprueba el disco antes de guardar, bloquea sobrescrituras conflictivas, escribe de forma atómica y emite eventos JSON/CEF. Incluye búsqueda incremental, undo/redo, registros de línea y verificación no interactiva para scripts y appliances.

Program output Salida del programa maat — buffer ≠ disk · write blocked maat — buffer ≠ disco · guardado bloqueado

  • 4 modal modes 4 modos modales
  • SHA-256 + :check SHA-256 + :check
  • Atomic saves Guardado atómico
  • JSON/CEF audit Auditoría JSON/CEF

August 2026 Agosto 2026

1 entry 1 entrada

09 crypto-dashboard

Live dashboards Paneles en vivo

A real-time market terminal: Rust backend, live prices over WebSockets, PostgreSQL persistence, hardened authentication and Prometheus/Grafana observability. It demonstrates the same event and telemetry engineering sensor fleets demand, applied to a different domain.

Terminal de mercado en tiempo real: backend Rust, precios en vivo por WebSockets, persistencia PostgreSQL, autenticación endurecida y observabilidad con Prometheus y Grafana. Demuestra la misma ingeniería de eventos y telemetría que exigen las flotas de sensores, aplicada a un dominio distinto.

Program output Salida del programa crypto-watch — btc/eur · ws:streaming crypto-watch — btc/eur · ws:streaming

  • WebSocket streaming Streaming WebSocket
  • Argon2id + JWT Argon2id + JWT
  • Prometheus · Grafana Prometheus · Grafana

September 2026 Septiembre 2026

4 entries 4 entradas

10 honeytrap

A trap that refuses to become a weapon Una trampa que se niega a ser un arma

A low-interaction MQTT/CoAP honeypot that emulates believable IoT devices to capture and classify what they attract: default credentials, wildcard harvesting, CoAP enumeration and deliberately malformed packets. The verdict belongs to the session rather than the packet — three isolated CONNECTs are not brute force until you see them together. And over UDP the source address is unverified, so answering would turn the decoy into a DDoS reflector aimed at a third party: an amplification ceiling, a per-source token bucket and a refused Proxy-Uri decide whether a reply goes out. The capture is never lost — the attempt is the signal.

Honeypot MQTT/CoAP de baja interacción que emula dispositivos IoT creíbles para capturar y clasificar lo que atraen: credenciales por defecto, suscripciones comodín, enumeración CoAP y paquetes rotos a propósito. El veredicto vive en la sesión, no en el paquete — tres CONNECT aislados no son fuerza bruta hasta que se ven juntos. Y sobre UDP la dirección de origen no está verificada, así que responder convertiría el señuelo en un reflector de DDoS contra un tercero: un techo de amplificación, un cubo de fichas por origen y el rechazo de Proxy-Uri deciden si la respuesta sale. La captura nunca se pierde: el intento es la señal.

Program output Salida del programa honeytrap — reply suppressed · factor 4.5 honeytrap — respuesta suprimida · factor 4.5

  • Verdicts at session level Veredictos a nivel de sesión
  • Refuses to be a reflector Se niega a ser reflector
  • Committed pcap evidence Evidencia pcap commiteada
  • Write path segmented Ruta de escritura segmentada
11 keystone-control-plane

Fleet identity, not copyable tokens Identidad de flota, no tokens copiables

A cryptographic identity and OTA control plane for IoT fleets. Keystone collects no telemetry: it issues and revokes X.509 certificates from its own CA, gates enrolment behind single-use tokens, demands proof of possession to rotate, signs firmware with Ed25519 and rolls out in cohorts with a way back. Hexagonal, with the layers as separate Maven modules so the compiler enforces the dependency direction.

Plano de control de identidad criptográfica y OTA para flotas IoT. Keystone no recoge telemetría: emite y revoca certificados X.509 desde su propia CA, limita el enrolamiento a tokens de un solo uso, exige prueba de posesión para rotar, firma el firmware con Ed25519 y despliega por cohortes con vuelta atrás. Hexagonal con las capas como módulos Maven, así que la dirección de dependencias la impone el compilador.

Program output Salida del programa keystone — cohort 25% · rollback armed keystone — cohorte 25% · rollback armado

  • Own root + issuing CA CA raíz + emisora propias
  • Proof-of-possession rotation Rotación con prueba de posesión
  • Ed25519-signed firmware Firmware firmado Ed25519
  • Hash-chained audit log Auditoría encadenada
12 ferrogate

Isolation enforced by the engine El aislamiento lo impone el motor

Multi-tenant industrial telemetry where the boundary between customers is enforced by PostgreSQL with FORCE ROW LEVEL SECURITY rather than by remembering to write a WHERE clause: a query that forgets to set the tenant returns zero rows, never somebody else’s. Gateways speak Modbus, sign every envelope at the edge and publish over MQTT on mTLS — the broker is not in the trust base.

Telemetría industrial multi-tenant donde la frontera entre clientes la impone PostgreSQL con FORCE ROW LEVEL SECURITY, no acordarse de escribir un WHERE: una consulta que olvida fijar el tenant devuelve cero filas, nunca las de otro. Los gateways hablan Modbus, firman cada envoltorio en el borde y publican por MQTT sobre mTLS; el broker queda fuera de la base de confianza.

Program output Salida del programa ferrogate — cross-tenant query · 0 rows ferrogate — consulta entre tenants · 0 filas

  • RLS FORCE per transaction RLS FORCE por transacción
  • Signed at the edge Firmado en el borde
  • 4 bounded contexts 4 contextos acotados
  • Import contracts in CI Contratos de imports en CI
13 psychron

The sensor has no clock El sensor no tiene reloj

An end-to-end environmental station. The node does not know the time — only how long it has been running, and after a power cut it counts from zero again. So the wire contract carries uptime, always valid, alongside a wall clock that may legitimately be null: ingestion anchors each boot once and reconstructs the rest. A replayed backlog keeps its shape instead of collapsing onto its arrival instant. Everything else follows from protecting that record: mutual TLS end to end with no plaintext listener to fall back to, (device, boot, seq) as the identity of a reading, and gaps found from the data rather than interpolated away.

Estación ambiental de extremo a extremo. El nodo no sabe qué hora es: solo cuánto lleva encendido, y tras un corte vuelve a contar desde cero. Por eso el contrato de datos lleva el uptime, siempre válido, junto a un reloj de pared que puede ser nulo — la ingesta ancla cada arranque una vez y reconstruye el resto. Un backlog reinyectado conserva su forma en lugar de aplastarse contra el instante de llegada. Todo lo demás sale de proteger ese registro: mTLS de extremo a extremo sin escucha en claro a la que caer, identidad de lectura por (dispositivo, arranque, secuencia) y huecos deducidos de los datos, nunca interpolados.

Program output Salida del programa psychron — backlog replayed · shape intact psychron — backlog reinyectado · forma intacta

  • Boot-anchored timestamps Sellado por ancla de arranque
  • mTLS, no plaintext port mTLS, sin puerto en claro
  • Digest-verified OTA OTA verificada por hash
  • Gaps drawn as gaps Huecos dibujados como huecos

Commissions Encargos

freelance por encargo

  1. 01

    Energy monitoring Monitorización energética

    Your electrical consumption on a real-time dashboard: from the meter to Grafana, with alerts when something spikes. Know what each line draws, when, and what it costs.

    Tu consumo eléctrico en un panel en tiempo real: del contador a Grafana, con alertas cuando algo se dispara. Sabrás qué gasta cada línea, cuándo y cuánto cuesta.

    • Meter → LoRaWAN/MQTT → dashboard Contador → LoRaWAN/MQTT → panel
    • Consumption alerts and thresholds Alertas de consumo y umbrales
    • History and comparisons Histórico y comparativas
  2. 02

    Site & field sensing Sensorización de nave y campo

    Temperature, humidity, irrigation, air quality — self-powered sensors where cables can’t reach, with reliable data on your phone. Built for agriculture, warehouses and greenhouses.

    Temperatura, humedad, riego, calidad del aire — sensores autónomos donde no llega el cable, con datos fiables en tu móvil. Pensado para agro, naves e invernaderos.

    • Custom ESP32/LoRa nodes Nodos ESP32/LoRa a medida
    • Solar-powered where needed Autonomía solar donde haga falta
    • Dashboard + threshold alerts Panel + avisos por umbral
  3. 03

    Deployment security Seguridad del despliegue

    I review and harden existing IoT deployments: authentication, encryption, updates, and what’s exposed to the network that shouldn’t be. The part almost nobody offers small businesses.

    Reviso y endurezco instalaciones IoT existentes: autenticación, cifrado, actualizaciones y qué está expuesto a la red que no debería. La parte que casi nadie ofrece a pymes.

    • Network & OT protocol audit Auditoría de red y protocolos OT
    • Encryption & credentials done right Cifrado y credenciales bien hechos
    • A clear report, no fluff Informe claro, sin humo

Every installation can include a monthly maintenance plan — monitoring, updates and support — so it keeps working after I leave.

Toda instalación puede incluir plan de mantenimiento mensual — monitorización, actualizaciones y soporte — para que siga funcionando cuando yo ya no esté.

Loose leaves Hojas sueltas

8