Безопасность
RBAC, сеть и рекомендации
Принципы
- Минимальная поверхность атаки — наружу: Dashboard, Dynamic API, панели платформ
- Нет прямого доступа к MongoDB — только через API с JWT
- Изолированная сеть
wash-internalдля БД и очередей - RBAC — группы Dynamic API + разделы Admin в Dashboard
Роли CRM (init-seed)
| Группа | Permissions | Dashboard |
|---|---|---|
| Administrator | view, create, update, delete, manage_users, manage_api, view_logs | Полный доступ + Система (admin) |
| Operator | view, create, update | CRM без admin-разделов |
| Viewer | view | Только просмотр |
| Service | view (+ API для automation) | Внутренние сервисы |
Admin-разделы Dashboard (пользователи, группы, бэкапы, Telegram, логи…) требуют manage_users или view_logs в JWT.
Управление: Dashboard → Пользователи / Группы и права или Dynamic API Panel → Users / Groups.
Секреты (обязательно сменить)
JWT_SECRET,JWT_REFRESH_SECRET,CSRF_SECRETADMIN_PASSWORD,SERVICE_PASSWORD,MQTT_PASSWORDPYORCH_JWT_SECRET,PYORCH_SECRET_MASTER_KEY,PYORCH_INTERNAL_API_KEY(если PyOrch)
.env в .gitignore.
CORS
CORS_ORIGIN=http://localhost,http://localhost:3001,http://localhost:8080,https://crm.example.com
pyorch-bridge и Telegram-боты
- Доступен только через Dashboard nginx
/api/telegram-bots/ - Проверяет CRM JWT + права admin
- Хранит учётные данные PyOrchestrator в env (
PYORCH_DASHBOARD_*) - Авторизация в боте — по
telegramUserIdпользователя CRM (GET /api/users/telegram/{id}/auth); права из групп RBAC - Посторонние Telegram ID получают только сообщение «Частный бот» без данных CRM
- Шаблон бота v2.7: lock по токену, дедупликация, остановка legacy-скриптов PyOrchestrator
См. Telegram-боты.
Управление постом (post-device API)
- Путь
/api/crm/post-device/проксируется наmessage-processor:3022(не публикуется наружу отдельным портом) - Требуется валидный JWT пользователя (проверка через
/api/profile) - Отправка команд и цен доступна ролям с правами create / update (Operator, Administrator)
- Любая публикация в MQTT
set/commandвыполняется без дополнительного подтверждения на уровне брокера — ограничьте сеть и учётные записи CRM
MQTT
Порт 1883 открыт на всех интерфейсах хоста — посты в локальной сети подключаются к <IP-сервера>:1883 с логином/паролем из карточки поста. В passwd Mosquitto допускаются только system (CRM) и учётные записи постов; анонимный доступ запрещён.
Пароль system меняется в Настройки → MQTT (CRM). При первом развёртывании задайте MQTT_PASSWORD в .env. Не назначайте постам логины system, superadmin или wash.
Изоляция постов: при синхронизации MQTT генерируется ACL — каждый пост только в топиках washpro/{serial}/#. Подмена serial в JSON не влияет на чужую статистику.
Аудит
Dashboard → Логи (Admin) и Dynamic API Panel → Audit Logs.
Dynamic API Platform
Rate limiting, login lockout, Helmet, network access rules — см. upstream security и dynamic-api/docs/.
PyOrchestrator
JWT, RBAC (Administrator/Developer/Operator/Viewer), encrypted script secrets — см. PyOrchestrator security.
Резервное копирование
Файлы в DATA_DIR/backups (bind mount). Тестируйте ./scripts/restore.sh на стенде.