
Панель мониторинга безопасности среды выполнения для одного хоста на eBPF — Go-агент + SvelteKit. Живое дерево процессов, карта сети и оповещения на основе правил для обычных Linux-хостов.
Видимость уровня ядра, как у Falco, но с живым интерфейсом, которого нативные инструменты ядра не имеют.
Быстрый старт · Спецификация · Представления · Дорожная карта
Kestrel отслеживает события ядра (запуск процессов, доступ к файлам, сетевые подключения) с помощью eBPF-агента и передаёт их в SvelteKit-приложение, которое отображает живой поток активности, дерево процессов, обзор хоста и механизм алертов на основе правил. Полный документ по продукту и архитектуре см. в SPEC.md, операционное руководство — в AGENTS.md.
Экосистема eBPF по форме — это бэкенд/CLI/Kubernetes-оператор. Falco — стандарт, вышедший из CNCF, — как известно, не имеет собственного UI. Разрыв между «ядро отдаёт богатые данные» и «человек может их реально прочитать» — это та самая full-stack ниша, в которой живёт проект. Сознательно однохостовой (не Kubernetes) и только для наблюдения (без активного вмешательства) в v1.
flowchart TB
subgraph host["Linux host · VM in dev, VPS in prod · kernel ≥ 5.8"]
direction TB
probes["eBPF probes (C)<br/>execve · openat · connect"]
agent["Go agent — cilium/ebpf<br/>decode · enrich · batch"]
ingest["/api/ingest<br/>Zod-validated at the boundary"]
rules["rule engine"]
hub["live hub"]
db[("Postgres<br/>events · rules · alerts")]
dash["SvelteKit dashboard<br/>live feed · tree · overview"]
probes -- "ring buffer" --> agent
agent -- "HTTP POST · JSON (Zod contract)" --> ingest
ingest --> db
ingest --> rules
ingest --> hub
hub -- "SSE" --> dash
end
Ключевое ограничение развёртывания: агенту нужно настоящее ядро, поэтому он не может работать на Cloudflare Workers (изоляты V8, нет ядра). В v1 агент + приложение + Postgres размещаются на одном хосте. См. SPEC.md §2.
Фаза 3 — в процессе. Обязательные пункты Фазы 2 (живой поток, дерево процессов, обзор хоста) завершены и проверены вживую в VM: eBPF-агент (execve + exit, cilium/ebpf) трассирует реальное ядро и передаёт события в приложение, при старте наполняя дерево снимком /proc. Пока что в Фазе 3: агент обзавёлся пробами открытия файлов (openat) и исходящих подключений (security_socket_connect) (проверено компиляцией; нагрузочный тест в VM — предстоит), и сетевая карта (8.3) готова — D3-граф связей процесс↔адресат с силовой раскладкой. Дальше: монитор чувствительных файлов (8.4) и механизм правил + алерты (8.5). Работа с пробами выполняется в dev VM, но никогда на хосте.
Глубина нескольких представлений лучше, чем широта без глубины, — шесть чётких представлений, созданных в порядке приоритета (сначала обязательные).
execve → ring buffer → cilium/ebpf → /api/ingest (в VM)exit + снимок /proc · дерево процессов · обзор хостаnixosTest · GitHub Actions CIcd app
pnpm install
pnpm dev # http://localhost:5173
Приложение работает на хосте; агент работает в dev VM и отправляет события в него. Чтобы увидеть наполненный поток без агента, включите синтетический генератор: KESTREL_SYNTHETIC=1 pnpm dev.
pnpm check # svelte-check (types)
pnpm test # vitest — schema + ingest unit tests
pnpm build # production build (adapter-node)
База для разработки/тестов — PGlite (Postgres, скомпилированный в WASM): без нативной сборки, без отдельного сервера, тот же диалект SQL, что и у продакшен-Postgres. Она сохраняется в app/kestrel-pgdata/ (gitignored); тесты используют эфемерную БД в памяти.
# stream events (leave running in one terminal)
curl -N http://localhost:5173/api/stream
# post an event (in another) — appears live in the stream and the browser
curl -X POST http://localhost:5173/api/ingest -H 'content-type: application/json' \
-d '[{"host":"demo","type":"exec","pid":42,"comm":"bash","cmdline":"bash -i"}]'
Три уровня, привязанных к тому, где живёт каждый класс багов (полные подробности в SPEC.md §6–§7):
fast-check прогоняет Zod-контракт событий через враждебные/искажённые события и проверяет инварианты механизма правил: никаких ложных совпадений, детерминированные вердикты, искажённый ввод отклоняется на границе.На сегодня: Vitest-юниты (схема, ingest, обзор, дерево процессов, сетевой граф) + парсер procscan агента и хелперы decode событий. Запустите pnpm test в /app, go test ./... в /agent.
SPEC.md §8.11).SPEC.md §8.10).cilium/ebpf против libbpfgo — чистый Go, CGO_ENABLED=0, workflow bpf2go.SPEC.md §10).SPEC.md §6).| Путь | Что |
|---|
/app | SvelteKit-приложение — схема событий, ingest, SSE-хаб, представления дашборда. Собрано и работает. |
/agent | Пользовательский Go-агент + eBPF C-пробы (execve/exit/openat/connect) + снимок /proc. Собрано; работает только в VM. |
/infra | Nix dev VM (собрана) + nixosTest, подготовка Terraform/libvirt (Фаза 4). |
SPEC.md | Авторитетная спецификация продукта и архитектуры. |
| Представление | На какой вопрос отвечает | Статус |
|---|
| Живой поток активности (8.1) | Что происходит прямо сейчас? | ✅ готово |
| Дерево процессов (8.2) | Что породило что? | ✅ готово |
| Обзор хоста (8.6) | Статус на одном экране? | ✅ готово |
| Сетевая карта (8.3) | С чем общается этот хост? | ✅ готово |
| Монитор чувствительных файлов (8.4) | Что-нибудь трогало важные файлы? | ◻️ запланировано |
| Алерты и правила (8.5) | Сообщи мне, когда что-то выглядит подозрительно. | ◻️ запланировано |