🧯 Реагирование на инцидент (Incident Response)

Короткий план на случай отказа/компрометации/утечки. Приоритет - защита денег и данных клиентов и быстрое восстановление. Все инциденты фиксируются в capital-support. Матрица отказов - в Архитектура Capital v1.0.md §9.

Порядок действий (всегда)

  1. 🛑 Изоляция - остановить распространение (снять трафик/сервис, отозвать доступ, заблокировать источник).
  2. 🔎 Оценка - что затронуто (деньги? данные клиентов? доступ?), радиус, когда началось.
  3. 🩹 Восстановление - вернуть рабочее состояние (rollback / restore / DR - см. runbooks/rollback.md).
  4. 📝 Пост-мортем - root cause, что предотвратит повтор, запись в capital-support.
  5. 📣 Уведомления - клиентам/партнёрам/регулятору, если задело их (по политике).

Матрица отказов (кратко)

Отказ Клиент видит Действия Время
capital-prod умер страница тех-работ (CF) DR: новый сервер + restore + перевод tunnel ≤ 2-4 ч
Данные повреждены тех-работы PITR на момент до сбоя ≤ 2-4 ч, потеря ≤ 5 мин
Cloudflare упал недоступность status-page вне CF; ждём CF по CF
Rail-партнёр (Papaya) упал «платёж в обработке» очередь/ретраи, алерт авто
NS Cards упал «операция ожидает» reconcile-джоба авто
SumSub упал заявка сохранена ретраи вебхуков авто
Resend упал письмо позже email-очередь авто
ops-сервер умер ничего (prod живёт) пересоздать по ранбуку ≤ 1 день

🔐 Если секрет/токен утёк

По правилу группы secrets-never-through-chat: 1. Оценить радиус - что токен реально может (часто отзыв не срочен). 2. Отозвать/удалить у провайдера (не «прислать новый в чат»). 3. Новый секрет доставить на сервер мимо чата (оператор read -s server-side). 4. Claude ссылается только на ИМЯ переменной, значение не печатает/не логирует.

🚨 Урок: забытый сервис в интернете (messenger-подобные инциденты)

15.09.2026 при hardening-аудите team-nextcloud найден забытый lumera-stage (6 контейнеров, 2 мес в интернете на 18000/18001/18080 в обход ufw - Docker публикует порты минуя ufw). Погашен docker compose stop (данные целы), ufw-правила 18xxx-Anywhere удалены.

Выводы (в чеклист аудита): - Docker публикует порты в обход ufw - проверять реально открытое: ss -tlnp + docker ps --format '{{.Ports}}', а не только ufw status. - Полная инвентаризация серверов - через API каждого провайдера, не по ~/.ssh/config (неполный список = слепые зоны = незахарденённый прод). - Любой app-порт наружу - только через 127.0.0.1 + Cloudflare tunnel, никогда 0.0.0.0.

Мониторинг = раннее обнаружение

Что где

Нужно Куда
Откатить релиз/данные runbooks/rollback.md
Восстановить БД runbooks/backup-restore.md, deploy/pgbackrest/README.md
Захарденить/проверить сервер runbooks/hardening-server.md
Записать инцидент репозиторий capital-support