|
85 | 85 | это **один проход и одна перезагрузка** конфига Xray вместо операции на каждого |
86 | 86 | - **Дашборд**: CPU / RAM / swap / диск / сеть / VPN-трафик в реальном времени, аптайм |
87 | 87 |
|
| 88 | +#### 📋 Журнал действий (аудит) |
| 89 | + |
| 90 | +- Пишется **всё, что происходило с пользователем**, и кто это сделал: создание, |
| 91 | + переименование, включение/отключение, смена лимитов и тарифа, сброс трафика, |
| 92 | + ротация ссылки, привязка/отвязка Telegram, удаление |
| 93 | +- **Оплаты**: заказ создан / оплачен / отменён — с номером заказа, тарифом, суммой и способом |
| 94 | +- **Самообслуживание**: саморегистрация в боте, отмена подписки, оплата со страницы подписки |
| 95 | +- **Системные события**: истёк срок, исчерпан трафик, превышен лимит устройств, |
| 96 | + автосброс квоты, перевод на бесплатный тариф после истечения |
| 97 | +- У каждой записи есть **автор**: админ (по логину), API-ключ (по названию), |
| 98 | + Telegram-бот (по @username), сам пользователь или система (крон, вебхук провайдера) |
| 99 | +- Смотреть можно **по одному пользователю** — кнопка «Журнал действий» в его карточке — |
| 100 | + или **сквозняком** на вкладке «Журнал», с фильтрами по типу события и по автору |
| 101 | +- Журнал **переживает удаление пользователя**: запись «удалён» и вся его история |
| 102 | + остаются (имя сохраняется в самой записи) |
| 103 | +- Групповые операции пишут запись **каждому** затронутому пользователю с пометкой «массово» |
| 104 | +- Хранение — **90 дней**, старые записи чистятся автоматически |
| 105 | + |
88 | 106 | #### 📲 Подписки |
89 | 107 |
|
90 | 108 | - `/<путь>/<токен>` — base64-список + страница с QR и deep-links |
@@ -319,6 +337,7 @@ internal/ |
319 | 337 | model/ доменные типы (User, Settings, RoutingConfig, …) |
320 | 338 | store/ SQLite + миграции |
321 | 339 | auth/ argon2id, секреты/токены, сессии |
| 340 | + actor/ кто выполняет действие (едет в context) — для журнала аудита |
322 | 341 | datasec/ шифрование секретов в БД (AES-GCM, ключ secrets.key) |
323 | 342 | netguard/ SSRF-safe HTTP (валидация исходящих URL) |
324 | 343 | tlsmgr/ tlsutil/ ACME (Let's Encrypt / ZeroSSL) + self-signed |
@@ -386,6 +405,20 @@ go build -o rospanel ./cmd/rospanel |
386 | 405 | `ROSPANEL_ADMIN_ADDR` (loopback-адрес панели, по умолчанию `127.0.0.1:8080`), |
387 | 406 | `XRAY_BIN`, `ROSPANEL_HOST`, `ROSPANEL_ACME_EMAIL`. |
388 | 407 |
|
| 408 | +Защита от флуда (нафтабл-лимиты на публичных TCP-портах, см. «Эксплуатация») тоже |
| 409 | +настраивается через окружение — пригодится, если за одним IP сидит целый офис или |
| 410 | +CGNAT-оператор и клиенты упираются в дефолты: |
| 411 | + |
| 412 | +| Переменная | Что делает | |
| 413 | +| --- | --- | |
| 414 | +| `ROSPANEL_CONNLIMIT=off` | Полностью выключает лимиты (правила nftables сносятся) | |
| 415 | +| `ROSPANEL_CONNLIMIT_MAX` | Максимум одновременных TCP-соединений с одного IP | |
| 416 | +| `ROSPANEL_CONNLIMIT_RATE` | Максимум новых соединений с одного IP в секунду | |
| 417 | + |
| 418 | +Текущее состояние защиты видно в **Дашборд → Управление → Диагностика**: если |
| 419 | +nftables не установлен или панель работает не от root, правила молча не применятся — |
| 420 | +диагностика об этом скажет. |
| 421 | + |
389 | 422 | PR и issue приветствуются. Коммиты — в стиле [Conventional Commits](https://www.conventionalcommits.org/): |
390 | 423 | на их основе release-please собирает релиз и публикует бинарь + Docker-образ в GHCR. |
391 | 424 |
|
|
0 commit comments