MBS Panel
made by savsis

Вход

Логин и пароль администратора

Дашборд
Общая статистика по сервису

Последние подписки

ПользовательСерверТарифИстекаетСтатус
Подписки
Все выданные подписки
ПользовательСерверТарифВыданаИстекаетСтатус
Гифт-коды
Ссылки, которые сразу выдают подписку — работают даже для тех, кто ни разу не открывал бота
СерверСрокСозданСтатусСсылка
Ноды
Локации, из которых бот выдаёт подписки
ЛокацияАдресТипСтатусLive

Добавить ноду

Гайд по установке
Вручную

Заполни данные новой локации — панель сгенерирует ключи и команду, включит TCP+Reality, gRPC+Reality и XHTTP+Reality разом. Выполни команду на чистом Ubuntu-сервере (по SSH) — Xray установится и настроится сам, ничего дополнительно передавать не нужно.

Трафик
Суммарно по всем нодам, live через Xray Stats API

По подпискам

ПользовательСерверВходящийИсходящийВсего
Платежи
ЮKassa / Platega — история и статус, с проверкой на стороне провайдера при пропущенном вебхуке
ПользовательСерверТарифПровайдерСуммаСозданСтатус
Документация
Как устроена панель и как её обслуживать — без похода на GitHub

Архитектура

Панель — три процесса: bot.py (телеграм-бот, aiogram) и api.py (FastAPI — админка + выдача подписок) читают одну SQLite-базу; Xray — отдельный процесс, который реально гоняет трафик. Панель никогда не проксирует VPN-трафик сама, только управляет конфигом Xray и читает его статистику через встроенный Stats API.

На 443 порту одновременно живёт и настоящий HTTPS (для сайта/подписки), и замаскированный под HTTPS VLESS+Reality — их разводит nginx stream модуль по SNI входящего TLS-соединения, до расшифровки.

Ноды

Локальная нода (обычно de1) — Xray на том же сервере, что и панель, управляется напрямую правкой config.json. Управляемые ноды — отдельные серверы, панель ходит на них по SSH management-ключу (генерится сам при первом добавлении ноды, публичная часть раздаётся install-скриптом ноды — панель никогда не просит пароль от нового сервера).

Добавление ноды: Ноды → Добавить ноду → один bash <(curl ...)> на чистый сервер. Редактирование существующей: кнопка «Редактировать» у ноды — для de1 доступно только название (реальные параметры подключения там берутся из .env, не из базы).

Пароль и безопасность

Пароль админ-панели меняется командой mbs pass на сервере (без аргумента — сгенерит случайный). Панель физически откажется стартовать, если в .env стоит "change-me"/"admin"/что-то короче 8 символов — так что пропустить это не выйдет по-тихому.

Сессия логина живёт в httpOnly-куке, на /admin/api/login висит rate-limit (5 попыток в минуту с одного IP). SSH-доступ на сервер — сам по себе, панель на него не влияет; отдельно стоит подумать про отключение root-логина по паролю в пользу ключей, если этого ещё не сделано.

fail2ban

install.sh ставит и включает fail2ban автоматически (дефолтный jail — защита SSH от перебора паролей). Проверить, что работает:

fail2ban-client status

Посмотреть забаненные IP по конкретному джейлу: fail2ban-client status sshd. Разбанить: fail2ban-client set sshd unbanip АЙПИ.

Настройки
Смена телеграм-бота без переустановки панели

Telegram-бот

Сейчас: — (токен: —)

Панель сама проверит токен у Telegram (запрос getMe) перед применением и подставит настоящий юзернейм бота — придумывать не нужно. После смены перезапустится только бот; если уведомления от api (например об оплате) продолжат идти со старого бота, выполни на сервере mbs restart.

Админы

Отдельные логины для входа в панель — на случай если админов несколько.

ЛогинСоздан

Двухфакторная аутентификация

Код из Google Authenticator/Authy/1Password при входе, в дополнение к паролю. Настраивается для твоего текущего логина.

Бэкап и восстановление

Бэкап — это база (юзеры, подписки, ноды, платежи) и .env одним файлом. Держи копии где-то отдельно от сервера.

⚠ Заменяет текущую базу целиком. Перед заменой панель сама делает копию текущей базы на сервере (файл .before-restore-...), но проверь, что заливаешь именно тот файл, что нужно.