Files
PTah 36ccfc9471 chore(docs): GitHub URLs in README/docs, remove .cursor from repo
Replace git.kalinamall.ru links with github.com/PTah in public docs.
Add Rewrite-GitHostUrls.ps1 and Push-Mirror.ps1 for kalinamall mirror pushes.
Add .cursor/ to .gitignore.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 11:37:20 +10:00

172 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План работ — Security Alert Center
**Актуальный порядок:** сначала подготовка агентов (параллельно с минимальным SAC ingest), затем полный SAC MVP, затем prod rollout `UseSAC=exclusive`.
---
## Фаза 0. Документация ✅
| # | Задача | Статус |
|---|--------|--------|
| 0.1–0.3 | ТЗ, архитектура, схема, deployment | ✅ |
| 0.5 | Репозиторий GitHub + зеркало kalinamall | ✅ |
| 0.6 | Multi-root workspace | ✅ |
---
## Фаза 1A. Агенты — контракт SAC (параллельно с 1B)
**Репозитории:** `ssh-monitor`, `RDP-login-monitor`
**Прод:** везде `UseSAC=off` по умолчанию.
| # | Задача | Статус |
|---|--------|--------|
| 1A.1 | Параметры `UseSAC`, `SAC_URL`, `SAC_API_KEY`, spool | ✅ ssh-monitor |
| 1A.2 | `build_sac_event()` + `send_sac_event()` по schema v1 | ✅ `sac-client.sh` |
| 1A.3 | `notify_or_sac()`: off / dual / exclusive / fallback | ✅ + маппинг событий |
| 1A.4 | `--check-sac` / `Test-SacConnection` | ✅ ssh-monitor `--check-sac` |
| 1A.5 | README агентов, first deploy | ✅ `first_deploy.sh`, `--deploy` |
**Выход:** на тестовом хосте `dual` шлёт JSON в SAC + Telegram.
---
## Фаза 1B. SAC — минимальный ingest ✅ (prod)
| # | Задача | Статус |
|---|--------|--------|
| 1B.1 | Scaffold backend FastAPI | ✅ |
| 1B.2 | PostgreSQL + Alembic (hosts, events, api_keys) | ✅ |
| 1B.3 | `POST /api/v1/events`, `GET /health` | ✅ prod `sac.kalinamall.ru` |
| 1B.4 | systemd + nginx + TLS | ✅ |
| 1B.5 | Валидация JSON Schema v1 | ✅ |
**Выход:** ingest с curl и UI на prod — достигнут.
---
## Фаза 1C. SAC — MVP UI и оповещения
| # | Задача | Статус |
|---|--------|--------|
| 1C.1 | Frontend Vue: Events, Hosts | ✅ prod |
| 1C.2 | Auth JWT, admin bootstrap | ✅ prod |
| 1C.3 | Problems (базовые правила) | ✅ API + UI (деплой ⏳) |
| 1C.4 | Telegram из SAC | ✅ backend (деплой + TELEGRAM_* в env) |
| 1C.5 | Dashboard (3 виджета), SSE | ✅ v0.2.0 |
**Выход:** тег `v0.2.0-mvp`.
---
## Фаза 2. Пилот и exclusive
| # | Задача |
|---|--------|
| 2.1 | E2E: 1 Linux + 1 Windows, `UseSAC=exclusive` | ✅ Linux [pilot-2.1-exclusive.md](pilot-2.1-exclusive.md) |
| 2.2 | Daily report / heartbeat через SAC | ✅ [pilot-2.2-heartbeat-reports.md](pilot-2.2-heartbeat-reports.md) |
| 2.3 | fallback на агентах | ✅ счётчик `SAC_FALLBACK_FAILURES` в sac-client |
**Выход:** `v0.2.0`.
---
## Фаза 3. Эксплуатация
См. [roadmap.md](roadmap.md).
---
## Ближайшие 2 дня (чеклист исполнения)
### День 1
- [x] `d1-1` Ingest: `event_id` UUID обязателен, UNIQUE индекс, коды duplicate, логи, docs/schema
- [x] `d1-2` MVP Problems: модель, корреляция `host+type+окно`, API `GET/ack/resolve`
- [x] `d1-3` Правила v1: `brute-force burst`, `privilege spike`, `host silence`
### День 2
- [x] `d2-1` UI Problems: список, фильтры, `Ack/Resolve`, карточка с таймлайном
- [x] `d2-2` Dashboard: top hosts/types, `open vs resolved 24h`, drill-down
- [x] `d2-3` Ops: retention, health checks, runbook backup/restore/deploy
- [x] `dod` DoD: нет дублей `event_id`, Problems e2e, 3 правила, UI MVP, docs, push в kalinamall
### Отображение хостов (`display_name`, как `SERVER_DISPLAY_NAME` у ssh)
Сейчас: **ssh**`SERVER_DISPLAY_NAME` только в Telegram; в SAC уходит `socket.gethostname()`. **RDP** — параметра нет, в SAC только `$env:COMPUTERNAME`. В SAC UI «Хосты» уже показывает `display_name || hostname`, если поле пришло в ingest.
- [x] `agent-display-rdp` **RDP-login-monitor:** `$ServerDisplayName` в `login_monitor.settings.ps1` / example; подпись в Telegram; в `Sac-Client.ps1``host.display_name` (и при необходимости согласовать `hostname`)
- [x] `agent-display-ssh` **ssh-monitor:** в `sac-client.sh` передавать `SERVER_DISPLAY_NAME` как `host.display_name` в JSON ingest
- [x] `sac-display-hosts` **SAC:** проверить ingest/обновление `Host.display_name`; колонка «Хосты» = человекочитаемое имя; поиск по `display_name`; `docs/agent-integration.md` + schema `host.display_name`
**Приёмка:** хост с `SERVER_DISPLAY_NAME="UNMS Kalina"` (или RDP `$ServerDisplayName`) в SAC → **Хосты** отображается как **UNMS Kalina**, а не только короткое имя ОС.
### Почасовой чеклист
#### День 1
- [x] `09:0010:00` миграция `event_id` + UNIQUE, валидация ingest
- [x] `10:0011:00` поведение duplicate (`201/409`) и логирование reject
- [x] `11:0012:00` обновить `event-schema-v1.json` и `agent-integration.md` (в т.ч. `host.display_name` для агентов)
- [x] `13:0014:30` модель Problems + миграция
- [x] `14:3016:00` корреляция при ingest (`fingerprint`, `count`, `last_seen`)
- [x] `16:0017:30` API `GET /problems`, `ack`, `resolve` + smoke
- [x] `18:0019:00` правила `brute/privilege/silence` + unit tests
#### День 2
- [x] `09:0011:00` UI Problems: таблица + фильтры (`status/severity/host`)
- [x] `11:0012:00` карточка проблемы + таймлайн событий
- [x] `13:0014:30` Dashboard: виджеты top hosts/types
- [x] `14:3016:00` Dashboard: `open/resolved 24h` + drill-down
- [x] `16:0017:00` retention job (`events 3090d`, `problems 180d+`)
- [x] `17:0018:00` health checks (DB/worker/heartbeat stale)
- [x] `18:0019:00` runbook + финальный push в kalinamall + freeze dev
### Неделя после freeze (только тестирование)
Чеклист: [testing-e2e-checklist.md](testing-e2e-checklist.md)
- [ ] `дни 12` функциональные E2E (`RDP + SSH + mixed load`)
- [ ] `дни 34` нагрузка, дубликаты, флаппинг heartbeat
- [ ] `день 5` регресс + known issues
- [ ] `дни 67` soak-test, только bugfix
---
## Gantt (упрощённо)
```mermaid
gantt
title SAC — актуальный план
dateFormat YYYY-MM-DD
section Документы
Фаза 0 :done, 2026-05-26, 1d
section SAC
1B ingest+deploy :done, 2026-05-26, 1d
1C UI базовый :done, 2026-05-26, 1d
1C notify+dash :active, 2026-05-27, 14d
section Агенты
1A UseSAC dual :2026-05-26, 10d
section Prod
Пилот exclusive :2026-06-16, 7d
```
---
## Следующий рабочий день (29.05.2026)
Оповещения SAC (**notif-01…32**) — ✅ см. [todo-2026-05-29.md](todo-2026-05-29.md). На prod: деплой, `notif-02` E2E, timer `sac-daily-report`.
Отложенная аналитика: **[analytics-backlog.md](analytics-backlog.md)**.
---
## См. также
- [install-ubuntu-24.04.md](install-ubuntu-24.04.md) — подготовка сервера
- [operations-prod-status.md](operations-prod-status.md) — статус prod и деплой
- [roadmap.md](roadmap.md)
- [TZ.md](TZ.md)