Настройки панели
Почти всё в панели настраивается из интерфейса, без правки файлов и перезапуска: Настройки. Изменение применяется сразу.
Значение берётся по цепочке база данных → .env → значение по умолчанию. Пока настройку не трогали в интерфейсе, работает то, что задано в .env или зашито в код; после первого изменения она живёт в базе, и .env на неё больше не влияет.
В списке настройки помечены: В БД — значение переопределено и хранится в базе, .env — взято из окружения, По умолч. — из кода. Отдельные значения только для чтения: они управляются со своих страниц, а здесь показаны для полноты.
Эта страница собрана из кода
Названия, описания и значения по умолчанию берутся прямо из каталога настроек панели, поэтому не расходятся с тем, что вы видите в интерфейсе. Обновляется командой python scripts/gen_settings_docs.py.
⚙️ Общие
Базовые вещи: язык, логи, доступ к панели Remnawave, ключи внешних сервисов. Часть значений здесь — секреты, они правятся на своих страницах, а в списке настроек показываются только для справки.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🌐 Язык бота | bot_language | ru | Язык интерфейса бота (DEFAULT_LOCALE) |
| 📝 Уровень логирования | log_level | INFO | Уровень детализации логов (требует перезапуск) (LOG_LEVEL) |
| 📦 Макс. размер лог-файла (MB) | log_max_size_mb | 10 | Максимальный размер одного лог-файла перед ротацией |
| 🗂️ Кол-во бэкапов логов | log_backup_count | 5 | Количество сжатых бэкап-файлов при ротации |
| 🌍 Источник MaxMind GeoIP | maxmind_source | auto | auto — зеркала GitHub (P3TERX, GitSquared), затем MaxMind; github — только зеркала (без ключа); maxmind — только официальный (нужен ключ). Своё зеркало — переменная MAXMIND_MIRROR_URL (MAXMIND_SOURCE) |
| 🏷️ Название панели | panel_name | пусто | Отображаемое название проекта в боковом меню (рядом с логотипом) |
| 🕒 Часовой пояс | display_timezone | Europe/Moscow | Зона IANA. В ней показывается всё время: веб-панель, бот, уведомления, выгрузки, время отчётов и бэкапа. В базе и в API время — в UTC |
| 🔗 Публичный URL панели | web_panel_public_url | пусто | https-адрес веб-панели. Используется кнопкой «Открыть панель» в боте (Telegram Mini App). Пусто — берётся из APP_PUBLIC_URL (APP_PUBLIC_URL) |
| Срок access-токена (минут) | web_session_access_minutes | 30 | Время жизни access-токена веб-админки. Применяется к новым логинам и refresh. Рекомендация: 30-120 мин (WEB_JWT_EXPIRE_MINUTES) |
| Срок сессии (часов) | web_session_refresh_hours | 6 | Общее время жизни сессии (refresh-токен). Пока валиден — юзер не выходит. После истечения нужен повторный вход с 2FA. Рекомендация: 12-24ч (WEB_JWT_REFRESH_HOURS) |
| DNS: Cloudflare (зашифр.) | dns_creds_cloudflare | пусто | Управляется на странице «DNS», не здесь (только чтение) |
| DNS: Timeweb Cloud (зашифр.) | dns_creds_timeweb | пусто | Управляется на странице «DNS», не здесь (только чтение) |
| DNS: reg.ru (зашифр.) | dns_creds_regru | пусто | Управляется на странице «DNS», не здесь (только чтение) |
| DNS: Selectel (зашифр.) | dns_creds_selectel | пусто | Управляется на странице «DNS», не здесь (только чтение) |
| DNS: Aeza (зашифр.) | dns_creds_aeza | пусто | Управляется на странице «DNS», не здесь (только чтение) |
| BS-Check: токен bschekbot (зашифр.) | bscheck_token | пусто | Токен bsk_live_… (bsbord) для проверки нод через операторов. Правится на странице нод (только чтение) |
| Репутация: ipinfo.io токен (зашифр.) | reputation_ipinfo_token | пусто | Управляется на странице BS-Check (только чтение) |
| Репутация: IPQualityScore токен (зашифр.) | reputation_ipqs_token | пусто | Управляется на странице BS-Check (только чтение) |
| Репутация: AbuseIPDB токен (зашифр.) | reputation_abuseipdb_token | пусто | Управляется на странице BS-Check (только чтение) |
| OAuth: Google client_id | oauth_google_client_id | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: Google secret (зашифр.) | oauth_google_client_secret | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: GitHub client_id | oauth_github_client_id | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: GitHub secret (зашифр.) | oauth_github_client_secret | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: OIDC client_id | oauth_oidc_client_id | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: OIDC secret (зашифр.) | oauth_oidc_client_secret | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: OIDC issuer URL | oauth_oidc_issuer | пусто | Управляется в настройках OAuth (только чтение) |
| OAuth: OIDC имя кнопки | oauth_oidc_name | пусто | Управляется в настройках OAuth (только чтение) |
🔔 Уведомления
Куда и о чём писать в Telegram. Топики раскладывают события по темам форума, типы уведомлений включают и выключают отдельные события.
Основное
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 💬 ID чата уведомлений | notifications_chat_id | пусто | Telegram ID чата/группы для уведомлений (NOTIFICATIONS_CHAT_ID) |
| ✨ Rich-оформление уведомлений | notifications_rich_enabled | true | Отправлять Telegram-уведомления rich-карточками (Bot API 10.1+): таблицы, сворачиваемые секции, цитаты, кнопки прямо в карточке, поля копируются касанием. При отказе Telegram бот сам откатится на обычный HTML |
🔔 Типы Telegram-уведомлений
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 👤 Пользователи | notifications_users_enabled | true | Отправлять Telegram-уведомления о пользователях |
| 🖥️ Ноды | notifications_nodes_enabled | true | Отправлять Telegram-уведомления о нодах |
| 🔧 Сервис | notifications_service_enabled | true | Отправлять сервисные Telegram-уведомления |
| 🔑 HWID | notifications_hwid_enabled | true | Отправлять Telegram-уведомления о HWID-устройствах |
| 💼 CRM | notifications_crm_enabled | true | Отправлять Telegram-уведомления CRM и биллинга инфраструктуры |
| ❗ Ошибки | notifications_errors_enabled | true | Отправлять Telegram-уведомления об ошибках |
| 🛡️ Нарушения | notifications_violations_enabled | true | Отправлять Telegram-уведомления о нарушениях |
| 💰 Финансы | notifications_finance_enabled | true | Отправлять финансовые Telegram-уведомления и напоминания |
💬 Топики уведомлений
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 💬 Топик: Общий (fallback) | notifications_topic_id | пусто | ID топика по умолчанию, используется если специфический топик не задан (NOTIFICATIONS_TOPIC_ID) |
| 👤 Топик: Пользователи | notifications_topic_users | пусто | ID топика для уведомлений о пользователях (NOTIFICATIONS_TOPIC_USERS) |
| 🖥️ Топик: Ноды | notifications_topic_nodes | пусто | ID топика для уведомлений о нодах (NOTIFICATIONS_TOPIC_NODES) |
| 🔧 Топик: Сервис | notifications_topic_service | пусто | ID топика для сервисных уведомлений (NOTIFICATIONS_TOPIC_SERVICE) |
| 🔑 Топик: HWID | notifications_topic_hwid | пусто | ID топика для HWID уведомлений (NOTIFICATIONS_TOPIC_HWID) |
| 💼 Топик: CRM | notifications_topic_crm | пусто | ID топика для CRM и биллинга инфраструктуры (NOTIFICATIONS_TOPIC_CRM) |
| 🛡️ Топик: Нарушения | notifications_topic_violations | пусто | ID топика для уведомлений о нарушениях (NOTIFICATIONS_TOPIC_VIOLATIONS) |
| ❗ Топик: Ошибки | notifications_topic_errors | пусто | ID топика для уведомлений об ошибках (NOTIFICATIONS_TOPIC_ERRORS) |
| 💰 Топик: Финансы | notifications_topic_finance | пусто | ID топика для финансовых уведомлений и напоминаний (NOTIFICATIONS_TOPIC_FINANCE) |
| 💾 Топик: Бэкапы | notifications_topic_backups | пусто | ID топика для файлов резервных копий; пусто — уходят в сервисный топик (NOTIFICATIONS_TOPIC_BACKUPS) |
🛡️ Обнаружение нарушений
Самый большой раздел: анализаторы, пороги срабатывания, автоматические действия и сроки хранения. Что означают анализаторы и как разбирать инциденты — в разделе Анти-абуз.
Основное
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🛡️ Детектирование нарушений | violations_enabled | true | Глобальное включение/выключение детектирования нарушений |
| 📐 Минимальный скор уведомления | violations_min_score | 50.0 | Минимальный скор нарушения для отправки уведомления (по умолчанию 50) |
| ⏱️ Временной анализатор | violations_analyzer_temporal | true | Анализ одновременных подключений и паттернов переключения |
| 🌍 Гео-анализатор | violations_analyzer_geo | true | Определение невозможных перемещений и подозрительной географии |
| 🏢 ASN-анализатор | violations_analyzer_asn | true | Классификация провайдеров (VPN, датацентр, мобильный оператор) |
| 👤 Профильный анализатор | violations_analyzer_profile | true | Анализ отклонений от обычного поведения пользователя |
| 📱 Анализатор устройств | violations_analyzer_device | true | Определение уникальных fingerprint устройств (ОС, клиент) |
| 🔑 HWID кросс-аккаунт анализатор | violations_analyzer_hwid | true | Обнаружение одного HWID на нескольких аккаунтах (триальный абьюз) |
| 🔤 User-Agent анализатор | violations_analyzer_user_agent | true | Детекция двойных туннелей (vless:// в UA), ботов (curl, Go-http-client) и неизвестных клиентов |
📐 Пороги детекции
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🌐 Общий предел одновременных IP | violations_max_simultaneous_ips | 0 | Общий для всех юзеров предел одновременных источников вместо их лимита устройств; к нему прибавляются буферы на смену сети и CGNAT. 0 = у каждого свой лимит устройств из панели |
| 📏 Макс. расстояние между городами (км) | violations_geo_max_city_distance_km | 50 | Расстояние между городами ниже которого не считается подозрительным |
| 👥 Макс. аккаунтов на один HWID | violations_hwid_max_accounts | 2 | Сколько разных аккаунтов могут делить один HWID БЕЗ срабатывания — нарушение фиксируется начиная со следующего аккаунта (значение 2 → сработает на третьем). Подписки одного человека считаются одним аккаунтом: группировка по telegram_id, а при регистрации без Telegram — по email |
| Макс. подписок одного аккаунта на HWID | violations_hwid_max_per_account | 10 | Сколько панельных UUID (подписок) одного telegram_id допустимо на одном HWID. Защита от абуза мультитарифа. 0 = без ограничений |
| 📱 Буфер CGNAT для мобильных (IP) | violations_mobile_cgnat_buffer | 3 | Сколько дополнительных одновременных IP допускается для мобильных подключений сверх лимита устройств (CGNAT даёт 3-5 IP с одного устройства) |
| 🎁 Макс. активных триалов на один HWID | violations_hwid_max_active_trials | 1 | Сколько разных аккаунтов с ДЕЙСТВУЮЩЕЙ пробной подпиской могут делить одно устройство без срабатывания. Ловит накрутку триалов новыми аккаунтами и не задевает ни апгрейд «пробная истекла → куплена платная», ни двух платящих людей на общем устройстве. Триальность определяется настройками тегов и internal squad ниже. 0 = отключено |
| ♻️ Макс. пробных подписок одного аккаунта на HWID | violations_hwid_max_trial_subs | 1 | Сколько раз один человек может взять пробную подписку с одного устройства — считая истёкшие и отключённые. Закрывает обход, где триал берут второй раз новой подпиской и привязывают к ней свой же telegram_id: по остальным проверкам это один аккаунт с одним живым триалом. Не задевает ни апгрейд «пробная → платная», ни двух разных людей с общим планшетом. 0 = отключено |
| Кулдаун проверок (мин) | violation_check_cooldown_minutes | 15 | Минимальный интервал между повторными проверками одного пользователя детектором (троттлинг нагрузки). НЕ путать с кулдауном уведомлений |
| Хранение нарушений (дни) | violation_retention_days | 90 | Сколько дней хранить записи нарушений до автоочистки |
| Хранение подключений (дни) | connections_retention_days | 30 | Сколько дней хранить историю подключений пользователей до автоочистки |
| Интервал HWID-скана (мин) | violations_hwid_scan_interval_minutes | 30 | Как часто проверять оффлайн-юзеров с общими HWID на кросс-аккаунт (детектор по батчам ловит только онлайн-юзеров) |
| Хранение метрик нод (дни) | metrics_retention_days | 30 | Сколько дней хранить снимки метрик нод до автоочистки. Раньше срок был зашит в коде, а сама очистка шла только при отчёте от ноды: на простое таблица росла без ограничения |
| Хранение торрент-событий (дни) | torrent_retention_days | 90 | Сколько дней хранить зафиксированные торрент-события до автоочистки |
| 📅 Макс. возраст SRH записей (дней) | violation_ua_max_age_days | 0 | Игнорировать запросы подписки старше указанного количества дней. 0 = анализировать все записи |
| Детект торрентов через nDPI | ndpi_detection_enabled | false | Xray опознаёт BitTorrent только по открытому рукопожатию, а шифрованный поток, DHT и uTP проходят мимо. nDPI видит и их. Требует демона nDPId на ноде: включение уходит агентам командой, .env править не нужно |
| 🔗 Мин. скор при ссылке в UA | violation_ua_link_floor | 70 | Минимальный score нарушения при обнаружении подписочной ссылки (vless://) в User-Agent. 70 = warn, 80 = soft_block |
| 🤖 Мин. скор при bot-UA | violation_ua_bot_floor | 55 | Минимальный score нарушения при curl/Go-http-client/python-requests в User-Agent |
| 🗑️ Хранение SRH (дней) | srh_retention_days | 90 | Удалять синхронизированные записи Subscription Request History старше указанного количества дней. 0 = хранить всё |
🔤 Паттерны User-Agent
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| ✅ Дополнительный whitelist UA (regex) | violation_ua_whitelist_extra | [] | JSON массив regex для новых VPN-клиентов. Пример: ["^NewClash/", "^MyClient/"] |
| 🚫 Дополнительный blacklist UA (regex) | violation_ua_blacklist_extra | [] | JSON массив regex для подозрительных UA. Пример: ["^SuspiciousBot/"] |
🚫 Жёсткая блокировка
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🚫 Жёсткая блокировка: макс. IP | violations_hard_block_ips | 50 | Количество уникальных IP для автоматической жёсткой блокировки |
| 🚫 Жёсткая блокировка: макс. одновременных | violations_hard_block_simultaneous | 20 | Количество одновременных подключений для жёсткой блокировки |
| 🚫 Жёсткая блокировка: макс. устройств | violations_hard_block_devices | 80 | Количество уникальных fingerprint устройств для жёсткой блокировки |
| 🚫 Жёсткая блокировка: макс. совпадений HWID | violations_hard_block_hwid_matches | 10 | Количество совпадающих HWID (одна модель) для жёсткой блокировки |
| 🚫 Жёсткая блокировка: аккаунтов на одном HWID | violations_hard_block_hwid_accounts | 5 | Сколько разных аккаунтов на одном устройстве (HWID) считается массовым триальным абьюзом и даёт жёсткую блокировку. Подписки одного telegram_id считаются одним аккаунтом. 0 = отключено |
| 🚫 Жёсткая блокировка: источников сверх лимита устройств | violations_hard_block_simultaneous_excess | 0 | Жёсткая блокировка, когда одновременных источников больше лимита устройств юзера больше чем на это число: при 5 и лимите 1 — с 7 источников, при лимите 3 — с 9. Источники должны выйти и за порог с буферами на смену сети и CGNAT. Безлимитных (лимит 0) не касается. 0 = отключено |
🆓 Определение триальных пользователей
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🏷️ Теги триальных пользователей | violations_trial_tags | trial | Теги через запятую, при наличии которых пользователь считается триальным (например: trial,test,free) |
| 👥 Internal squad триальных | violations_trial_squad_uuids | [] | Выберите internal squad, пользователи которых считаются триальными |
🧲 Торрент-блокировщик
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🧲 Обнаружение торрентов | torrent_detection_enabled | true | Включение/выключение обнаружения торрент-трафика через Xray routing |
| ⚡ Авто-действие при торренте | torrent_auto_action | notify | Действие при обнаружении торрент-трафика: notify (только уведомление), block_user (блокировка) |
| 🔕 Кулдаун торрент-уведомлений (мин) | torrent_notification_cooldown_minutes | 30 | Минимальный интервал между уведомлениями о торрентах по одному пользователю |
| Порог событий для нарушения | torrent_min_events | 5 | Сколько торрент-событий должно набраться у пользователя за полчаса, чтобы завести нарушение. Настоящий обмен даёт сотни событий за минуты — одиночные срабатывания это шум nDPI. 1 — заводить нарушение по первому же событию |
| Порог разных адресов (рой) | torrent_min_peers | 3 | Со сколькими РАЗНЫМИ адресами должен идти обмен за полчаса. Торрент — это рой из десятков пиров; события по одному и тому же адресу набивает обычное долгое соединение, и на этом ловились антивирус и игровые лаунчеры. 1 — не проверять рой |
| Событий на адрес (глубина обмена) | torrent_min_events_per_peer | 1.5 | Сколько событий в среднем должно приходиться на один адрес за полчаса. Торрент-клиент подолгу качает с одних и тех же пиров, и событий на адрес у него в разы больше одного; игровой лаунчер и опрос DHT касаются каждого адреса по разу. 1 — не проверять |
| Кого не считать торрентом (по владельцу адреса) | torrent_asn_whitelist | kaspersky,gaijin,blizzard,valve,wargaming,microsoft,epic games,riot games,steam | Через запятую: части названий организаций, чьи адреса не считаем нарушением. Игровые лаунчеры раздают обновления настоящим BitTorrent (War Thunder и прочие), и вердикт по ним верный — отличается только адресат. Пусто — берётся список по умолчанию |
general
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| Окно истории нарушений (дней) | violation_recap_days | 30 | За какой период считать нарушения пользователя для бейджа рецидива и истории в карточке. Аннулированные показываются отдельным числом — видно и сколько раз человек попадался, и сколько из этого оказалось ошибкой детектора |
📈 Расход трафика
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 📈 Монитор расхода трафика | traffic_rate_enabled | false | Отслеживание аномально высокого потребления трафика за период |
| 📊 Порог (GB за период) | traffic_rate_threshold_gb | 10.0 | Уведомление если пользователь потребил больше указанного объёма за период |
| ⏱️ Окно проверки (мин) | traffic_rate_window_minutes | 60 | Период времени для подсчёта трафика (по умолчанию 60 = 1 час) |
| 🔁 Интервал проверки (мин) | traffic_rate_check_interval_minutes | 5 | Как часто проверять потребление трафика |
| 🔕 Кулдаун уведомлений (мин) | traffic_rate_cooldown_minutes | 60 | Минимальный интервал между повторными уведомлениями по одному пользователю |
| ⚡ Авто-действие при превышении | traffic_rate_auto_action | notify | Действие при чрезмерном потреблении трафика: только уведомление или автоблокировка |
| 🚫 Порог автоблокировки (GB) | traffic_rate_auto_block_gb | 50.0 | Автоблокировка если трафик за период превышает это значение. Работает только при авто-действии = block_user |
throttle
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| Ограничение скорости | throttle_enabled | true | Разрешить «мягкую блокировку» — резать скорость нарушителю вместо полного отключения. Требует агента 1.7.0+ на нодах; с агентом 1.9.0 режет шейпер ноды, в обе стороны |
| Скорость по умолчанию (кбит/с) | throttle_default_kbit | 1024 | На сколько резать, если скорость не указана явно. 0 или пусто — без лимита: кнопка в боте и автодействия ничего не урезают. 1024 — сайты и мессенджеры работают, видео и торренты нет: человек замечает, что интернет странный, и идёт разбираться, а не молча теряет доступ |
| Срок ограничения по умолчанию (ч) | throttle_default_hours | 0 | Через сколько часов ограничение снимается само, если срок не указан явно. 0 — держать бессрочно, до ручного снятия |
| Резервный сквад для нарушителей | throttle_squad_uuid | пусто | UUID внутреннего сквада, куда уводить наказанного вдобавок к урезанию скорости. Прежние сквады запоминаются и возвращаются при снятии. Пусто — сквады не трогать, только резать скорость |
| Урезать скорость автоматически | violation_auto_soft_throttle | false | Резать скорость сразу, когда детектор рекомендует разобраться вручную (скор 65-80). Мера обратимая и не выкидывает человека из сети, но по умолчанию выключена: решение о наказании остаётся за администратором |
🔍 Конвейер проверки нарушений
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🔕 Кулдаун уведомлений (мин) | violation_notification_cooldown_minutes | 30 | Минимальный интервал между повторными уведомлениями по одному пользователю. Защита от спама. |
| Окно дедупликации записей (часы) | violation_dedup_window_hours | 24 | Пока у пользователя есть неразрешённое нарушение свежее этого окна, повторные детекты не создают новую запись (кроме случаев с более высоким скором). 0 — дедупликация отключена. |
| Автоблокировка при hard_block | violation_auto_hard_block | true | Автоматически отключать пользователя через Panel API, когда детектор рекомендует жёсткую блокировку. Если выключено — только уведомление и запись нарушения. |
🔒 Безопасность
Защита самой панели и детект атак на ноды: методы входа, ограничение перебора, чёрный список пользователей.
🔑 Методы авторизации
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| ✈️ Авторизация через Telegram | auth_telegram_enabled | true | Разрешить вход через Telegram Login Widget |
| 🔒 Авторизация по паролю | auth_password_enabled | true | Разрешить вход по логину и паролю |
| 🔐 Обязательная 2FA (TOTP) | auth_totp_required | false | Требовать настройку TOTP для всех аккаунтов |
| 🔑 Passkey: домен (RP ID) | webauthn_rp_id | пусто | Домен, к которому привязываются passkeys, например panel.example.com. Пусто — домен, по которому открыта панель. После смены passkeys, добавленные под прежним доменом, перестанут работать |
| 🔑 Passkey: адрес панели (origin) | webauthn_origin | пусто | Адрес со схемой, например https://panel.example.com. Пусто — собирается из заголовков запроса (Host и X-Forwarded-Proto). Задайте, если прокси перед панелью не передаёт X-Forwarded-Proto |
| ✈️ Автовход в Telegram Mini App | auth_telegram_webapp_enabled | true | Входить автоматически, когда панель открыта внутри Telegram (мини-приложение). Требует включённой авторизации через Telegram |
🛡️ Защита от перебора
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🚫 Макс. попыток до блокировки | auth_max_attempts | 5 | Количество неудачных попыток входа до блокировки IP-адреса |
| ⏳ Длительность блокировки (мин) | auth_lockout_minutes | 15 | На сколько минут блокируется IP после превышения лимита попыток |
| 📋 Fail2ban логирование | auth_fail2ban_logging | true | Записывать неудачные попытки входа в auth_failures.log |
| 🔔 Уведомление при блокировке IP | auth_notify_on_block | true | Отправлять уведомление в Telegram при блокировке IP-адреса |
| ⚠️ Уведомление при неудачном входе | auth_notify_on_failure | true | Отправлять уведомление в Telegram при каждой неудачной попытке входа |
🚫 Чёрный список пользователей
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🚫 Чёрный список пользователей | user_blacklist_enabled | false | Включить проверку Telegram ID пользователей по чёрному списку. При совпадении — автоматическая блокировка. |
| 🔗 URL списков (по одному на строку) | user_blacklist_urls | пусто | Ссылки на внешние blacklist-файлы. Формат: Telegram ID в начале каждой строки. |
| 🔄 Интервал синхронизации (часы) | user_blacklist_sync_hours | 6 | Как часто обновлять чёрные списки с внешних URL. |
| ⚡ Автоблокировка | user_blacklist_auto_block | false | Автоматически блокировать пользователей из чёрного списка через Panel API. Если выключено — только уведомление. |
| 🛡️ Сторож чёрного списка HWID | hwid_blacklist_guard_enabled | true | Периодически проверять, не ожила ли подписка у тех, кого видели на устройстве из чёрного списка, и гасить её снова. Блокировка по списку разовая, а поднять подписку может что угодно уже после неё — например привязка telegram_id к заведённой через email. Записи с действием «оповещение» сторож не трогает, только сообщает |
| 🛡️ Интервал сторожа HWID (мин) | hwid_blacklist_guard_interval_minutes | 5 | Как часто сторож обходит чёрный список HWID. Меньше интервал — короче окно, в которое воскресшая подписка успевает поработать |
| 🌐 Сторож адресов: повторные пробные | violations_ip_trial_guard_enabled | true | Замечать адреса, с которых пробную подписку брали несколько раз разными аккаунтами. HWID называет сам клиент и подделывается заголовком, а адрес выдаёт провайдер — сменить его труднее. Служебные и операторские диапазоны не учитываются |
| 🌐 Пробных подписок с одного адреса | violations_ip_trial_accounts | 2 | Сколько разных пробных подписок с одного адреса допустимо без сигнала. Считаются только пробные: за адресом домашнего провайдера живёт целая квартира |
| 📱 То же для мобильных адресов | violations_ip_trial_accounts_mobile | 4 | Отдельный порог для адресов мобильных операторов. Там CGNAT: за одним адресом сидит район, и несколько разных людей с пробными — обычное дело |
| 🌐 Окно поиска по адресам (дней) | violations_ip_trial_window_days | 30 | За какой период считать подключения. Слишком широкое окно собирает динамические адреса, которые успели смениться у нескольких абонентов |
| 🌐 Не повторять сигнал по адресу (часов) | violations_ip_trial_repeat_hours | 24 | Сколько молчать про адрес после уведомления о нём |
| 🌐 Интервал сторожа адресов (мин) | violations_ip_trial_interval_minutes | 60 | Как часто пересматривать адреса. Проверка тяжелее HWID-сторожа: она группирует историю подключений за всё окно |
node_attacks
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| Детект атак на ноды | attack_detect_enabled | true | Следить за сетевыми метриками нод и предупреждать, когда нода под атакой. Работает только с агентом 1.3.0+. |
| Порог по пакетам (× от обычного) | attack_pps_ratio | 4 | Во сколько раз входящий поток пакетов должен превысить обычный для этой ноды. Ниже 3 будут ложные срабатывания на вечерних пиках. |
| Порог по трафику (× от обычного) | attack_bps_ratio | 4 | То же самое, но для объёма входящего трафика — ловит атаки крупными пакетами. |
| Минимум пакетов/с для тревоги | attack_min_pps | 5000 | Ниже этого значения всплеск игнорируется: на пустой ночной ноде рост «в десять раз» получается из шума. |
| Минимум байт/с для тревоги | attack_min_bps | 12500000 | То же для объёма. По умолчанию 12 500 000 — это 100 Мбит/с. |
| Замеров для базлайна | attack_min_samples | 20 | Сколько замеров нужно накопить, прежде чем верить «обычному» уровню ноды. Пока меньше — детектор молчит. |
| Мелкий пакет, байт | attack_small_packet_bytes | 300 | Средний размер пакета ниже этого считается признаком флуда: полезный трафик состоит из пакетов покрупнее. |
📧 Почтовый сервер
Встроенный почтовый сервер: TLS, приём входящих, спам-оценка, сроки хранения. Как поднять — в разделе Почтовый сервер.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 📧 Почтовый сервер включён | mailserver_enabled | false | Включить встроенный почтовый сервер (отправка/приём писем) (MAIL_SERVER_ENABLED) |
| 🖥️ Хост SMTP-сервера | mailserver_hostname | 0.0.0.0 | IP-адрес для входящего SMTP-сервера (0.0.0.0 = все интерфейсы) (MAIL_SERVER_HOSTNAME) |
| 📥 Порт входящего SMTP | mailserver_inbound_port | 2525 | Порт для приёма входящих писем (по умолчанию 2525, в продакшене 25) (MAIL_INBOUND_PORT) |
| 🚦 Лимит отправки в час | mailserver_max_send_per_hour | 100 | Глобальный лимит писем с одного домена в час. Применяется к доменам без собственного лимита (у домена стоит 0). 0 = без лимита |
| ⏱️ Интервал опроса очереди | mailserver_queue_poll_interval | 10 | Как часто проверять очередь писем на отправку (секунды) |
| 🔁 Макс. попыток отправки | mailserver_max_retries | 5 | Максимальное количество попыток отправки одного письма |
| 📤 SMTP Submission включён | mailserver_submission_enabled | false | Включить SMTP Submission сервер (порт 587) для отправки писем через логин/пароль (MAIL_SUBMISSION_ENABLED) |
| 🔌 Порт SMTP Submission | mailserver_submission_port | 587 | Порт для SMTP Submission сервера (стандарт — 587) (MAIL_SUBMISSION_PORT) |
| Путь к TLS-сертификату | mailserver_tls_cert_path | пусто | Сертификат для STARTTLS на почтовых портах. Пусто — будет выписан самоподписанный (для приёма почты этого достаточно, но почтовые клиенты на порту 587 будут ругаться) (MAIL_TLS_CERT_PATH) |
| Путь к TLS-ключу | mailserver_tls_key_path | пусто | Приватный ключ к сертификату выше (MAIL_TLS_KEY_PATH) |
| Имя почтового сервера | mailserver_tls_hostname | пусто | Чем сервер представляется в SMTP и на что выписан сертификат. Должно совпадать с PTR-записью IP. Пусто — mail.<первый домен> |
| Требовать TLS на порту 587 | mailserver_submission_require_tls | true | Не принимать логин и пароль по незашифрованному соединению. Клиенты из внутренних сетей (10.x, 192.168.x, 100.64.x — Netbird и подобные) исключение: там трафик и так в туннеле. Работает только при наличии сертификата |
| Порог спама | mailserver_spam_threshold | 5 | Оценка, начиная с которой письмо помечается подозрительным. 5 баллов = домен объявил политику DMARC, а письмо её не прошло |
| Отклонять подозрительные письма | mailserver_reject_spam | false | Отказывать на приёме письмам, набравшим порог. Выключено — письмо принимается, но помечается в списке |
| Хранить входящие, дней | mailserver_inbox_retention_days | 0 | Через сколько дней удалять полученные письма. 0 = хранить вечно |
| Хранить историю отправки, дней | mailserver_queue_retention_days | 90 | Через сколько дней удалять отправленные и отклонённые письма из очереди. Ожидающие отправки не трогаются. 0 = хранить вечно |
| Уведомлять о новых письмах | mailserver_notify_new_mail | false | Присылать уведомление при получении письма (кроме служебных: отказов доставки, отписок и DMARC-отчётов) |
| 📮 Доставка исходящих | mailserver_delivery_mode | direct | direct — напрямую на MX получателя (нужен исходящий порт 25); brevo — через HTTP API Brevo, исходящие SMTP-порты не нужны (MAIL_DELIVERY_MODE) |
| 🔑 Brevo: API-ключ | mailserver_brevo_api_key | пусто | Ключ v3 из Brevo → SMTP & API → API Keys. Домен отправителя должен быть подтверждён в Brevo (BREVO_API_KEY) |
💾 Резервные копии
Расписание, сроки хранения и «мёртвая рука» — алерт о том, что бэкапов давно не было. Подробнее в разделе Бэкапы.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| Авто-бэкап по расписанию | backup_auto_enabled | false | Автоматически создавать бэкап БД по расписанию |
| Время бэкапа | backup_auto_time | 03:00 | Время ежедневного авто-бэкапа (ЧЧ:ММ по часовому поясу панели) |
| Отправлять в Telegram | backup_auto_telegram | false | Отправлять созданный бэкап в Telegram (chat_id из настроек уведомлений) |
| Хранить бэкапов (шт) | backup_auto_keep_count | 10 | Сколько последних авто-бэкапов хранить |
| Хранить бэкапов (дней) | backup_auto_keep_days | 30 | Максимальный возраст авто-бэкапов в днях |
| Интервал бэкапа (часов) | backup_auto_interval_hours | 0 | 0 — раз в день в указанное время; N>0 — начиная с этого времени каждые N часов |
| Бэкапить конфиг | backup_auto_config | false | Дополнительно к БД бэкапить настройки (config-бэкап) |
| Алерт: нет бэкапа N часов | backup_deadman_hours | 0 | Прислать алерт, если успешного бэкапа не было дольше N часов (0 = выкл) |
| S3: адрес хранилища | backup_s3_endpoint | — | Например https://s3.timeweb.cloud или https://s3.storage.selcloud.ru |
| S3: бакет | backup_s3_bucket | — | Имя бакета, куда складывать файлы бэкапов |
| S3: регион | backup_s3_region | us-east-1 | Регион для подписи запроса: us-east-1, ru-1, ru-central1 и т.п. |
| S3: папка | backup_s3_prefix | — | Префикс ключа внутри бакета, пусто — класть в корень |
| S3: path-style адреса | backup_s3_path_style | true | Адрес вида endpoint/bucket/key — нужен MinIO и большинству российских провайдеров |
| S3: выгружать автоматически | backup_s3_auto_upload | false | Отправлять в хранилище каждый бэкап, созданный по расписанию |
| S3: хранить файлов | backup_s3_keep_count | 0 | Сколько последних файлов оставлять в бакете при автовыгрузке (0 = не чистить) |
| S3: ключи доступа | backup_s3_creds | — | Access Key и Secret Key, зашифрованы; правятся только на вкладке «Хранилище» |
| Поддержка: кэш вложений | support_media_cache_enabled | true | Хранить скачанные вложения на диске, чтобы не ходить за ними к боту каждый раз |
| Поддержка: срок хранения вложений | support_media_cache_days | 14 | Через сколько дней без обращений файл удаляется; старый тикет скачает его заново |
| Поддержка: потолок кэша вложений (МБ) | support_media_cache_max_mb | 2048 | При превышении удаляются самые давно не открывавшиеся файлы (0 — без лимита) |
| Поддержка: контроль срока ответа | support_sla_enabled | true | Очередь «просрочены», подсветка времени ожидания и алерты о просрочке |
| Поддержка: срок первого ответа | support_sla_minutes | 30 | Через сколько минут ожидания обращение считается просроченным |
| Поддержка: алерты | support_alerts_enabled | true | Уведомлять о новых обращениях и о просрочке первого ответа |
| Поддержка: алерт о новом обращении | support_alert_new_ticket | true | Слать уведомление, как только клиент создал обращение |
📊 Отчёты
Периодические сводки: что присылать, когда и кому.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 📊 Отчёты включены | reports_enabled | true | Глобальное включение/выключение автоматических отчётов |
| 📅 Ежедневные отчёты | reports_daily_enabled | true | Включить ежедневные отчёты по нарушениям |
| 🕐 Время дневного отчёта | reports_daily_time | 09:00 | Время отправки ежедневного отчёта (ЧЧ:ММ по часовому поясу панели) |
| 📆 Еженедельные отчёты | reports_weekly_enabled | true | Включить еженедельные отчёты по нарушениям |
| 📅 День недельного отчёта | reports_weekly_day | 0 | День недели для еженедельного отчёта (0=Пн, 6=Вс) |
| 🕐 Время недельного отчёта | reports_weekly_time | 10:00 | Время отправки еженедельного отчёта (ЧЧ:ММ по часовому поясу панели) |
| 🗓️ Ежемесячные отчёты | reports_monthly_enabled | true | Включить ежемесячные отчёты по нарушениям |
| 📅 День месячного отчёта | reports_monthly_day | 1 | День месяца для ежемесячного отчёта (1-28) |
| 🕐 Время месячного отчёта | reports_monthly_time | 10:00 | Время отправки ежемесячного отчёта (ЧЧ:ММ по часовому поясу панели) |
| 📐 Минимальный скор | reports_min_score | 30.0 | Минимальный скор нарушения для включения в отчёт |
| 🏆 Топ нарушителей | reports_top_violators_count | 10 | Количество пользователей в топе нарушителей |
| 📭 Отправлять пустые | reports_send_empty | false | Отправлять отчёт если нет нарушений за период |
| 💬 Топик отчётов | reports_topic_id | пусто | ID топика для отправки отчётов (0 = основной чат) (NOTIFICATIONS_TOPIC_REPORTS) |
💰 Финансы
Учёт расходов на инфраструктуру и доходов: валюта отчётов, курсы, напоминания о списаниях, синхронизация с API хостеров.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| Базовая валюта отчётов | finance_base_currency | RUB | Валюта, в которую конвертируются агрегаты (RUB, USD, EUR...) |
| Автообновление курсов валют | finance_rates_auto_update | true | Раз в сутки обновлять курсы (ЦБ РФ, fallback open.er-api.com). Курсы с ручной правкой не трогаются |
| Напоминания о списаниях | finance_reminders_enabled | true | Слать уведомления о предстоящих и просроченных платежах в Telegram/панель |
| За сколько дней напоминать | finance_reminder_days | 7,3,1 | Список дней до списания через запятую (например: 7,3,1). Просрочка напоминается всегда |
| Час отправки напоминаний | finance_reminder_hour | 10 | С какого часа (0–23) слать напоминания за день. Час и сам «день» считаются в часовом поясе панели, а не по UTC |
| Автосинк API хостеров | finance_autosync_enabled | true | Периодически снимать баланс и услуги с подключённых API хостеров |
| Интервал автосинка (часы) | finance_autosync_interval_hours | 6 | Как часто опрашивать API хостеров (баланс, услуги, даты списаний) |
| Подтягивать даты списаний | finance_autosync_update_due_dates | true | Обновлять next_due_at записей по данным хостера (матч по имени услуги в рамках провайдера) |
| Записывать пополнения Bedolaga | finance_bedolaga_deposits_enabled | true | Ежедневно заносить пополнения баланса из Bedolaga в доходы (P&L-график, доход за месяц). ⚠️ Не совмещать с ручным импортом выручки подписок — двойной учёт |
⚡ Производительность
Пулы соединений, кэш и интервалы фоновых задач. Трогать стоит, когда упёрлись в потолок, а не заранее.
🗄️ База данных
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🗄️ DB Pool: минимум соединений | db_pool_min_size | 5 | Минимальное количество соединений в пуле PostgreSQL. Требуется перезапуск. (DB_POOL_MIN_SIZE) |
| 🗄️ DB Pool: максимум соединений | db_pool_max_size | 50 | Максимальное количество соединений в пуле PostgreSQL. Увеличьте при высокой нагрузке. Требуется перезапуск. (DB_POOL_MAX_SIZE) |
| ⏱️ DB: таймаут запросов (сек) | db_statement_timeout | 60 | Максимальное время выполнения SQL-запроса в секундах. 0 = без ограничений. Требуется перезапуск. |
| 💤 DB: время жизни простаивающего соединения (сек) | db_idle_connection_lifetime | 300 | Через сколько секунд закрывать неиспользуемое соединение в пуле. Требуется перезапуск. |
⏱️ Интервалы
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🔔 Интервал проверки алертов (сек) | alert_check_interval | 60 | Как часто проверять правила алертов. Меньше = быстрее реакция, но выше нагрузка на БД. |
| 🔄 Автообновление конфига (сек) | config_auto_reload_interval | 30 | Как часто перезагружать конфигурацию из БД. Влияет на скорость применения настроек. |
🚦 Лимиты запросов
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🚦 API: лимит запросов/мин (общий) | api_rate_limit_per_minute | 120 | Максимальное количество API-запросов в минуту на один IP. 0 = без ограничений. |
| 📡 Collector: лимит запросов | collector_rate_limit | 1/second | Rate limit для эндпоинта сбора метрик от нод-агентов (формат: '1/second'). |
💾 Кэш
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 💾 Кэш: максимум записей | cache_max_entries | 5000 | Максимальное количество записей в in-memory кэше. При превышении используется LRU-вытеснение. |
| ⏱️ Кэш: TTL по умолчанию (сек) | cache_default_ttl | 300 | Время жизни записей в кэше по умолчанию. Меньше = актуальнее данные, но больше запросов к БД. |
🔍 Конвейер проверки нарушений
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| ⏱️ Очередь нарушений: интервал обработки (сек) | violation_drain_interval | 3.0 | Как часто worker забирает порцию пользователей из очереди. Меньше = быстрее реакция, но выше нагрузка. |
| 📦 Очередь нарушений: размер порции | violation_chunk_size | 200 | Сколько пользователей обрабатывать за один цикл. Больше = быстрее разгребается очередь, но пиковая нагрузка выше. |
| 🔀 Макс. фоновых задач | violation_max_background_tasks | 20 | Максимальное количество одновременных фоновых задач (торренты и пр.). При превышении новые задачи отбрасываются. |
🔄 Синхронизация
Синхронизация с панелью Remnawave.
| Настройка | Ключ | По умолчанию | Что делает |
|---|---|---|---|
| 🔄 Интервал синхронизации | sync_interval_seconds | 300 | Интервал синхронизации данных с API (секунды, требует перезапуск) (SYNC_INTERVAL_SECONDS) |
Настройки агента
Переменные агента задаются на самой ноде и в этот список не попадают — см. Node Agent.