Панели управления: 3x-ui, Marzban, Marzneshin, Hiddify

Когда у тебя 1 пользователь — можно вручную править config.json Xray. Когда 10 — нужна панель. Когда 1000 — нужна панель с биллингом, телеграм-ботом и нодами. Разберём все четыре главные панели 2024-2026: что выбирать под объём, как ставить, какие фичи.

Что узнаешь
Вспомни из прошлых уроков

Панель не заменяет протоколы — она ими управляет. Внутри она собирает те же конфиги Xray с VLESS+Reality (урок 6, 7), генерирует UUID и ключи, которые ты руками делал в мини-лабах. А раздел безопасности прямо продолжает модель противника (урок 5): панель — это ещё и лакомая цель для сканеров, а не только DPI.

1. Сводное сравнение

ПанельБазаПоддержка протоколовЛучшее применениеСложность
3x-ui Xray-core, Go + SQLite VLESS, VMess, Trojan, SS, Reality, WS, gRPC, XHTTP, … 1-100 пользователей, личный/малый бизнес Простая
Marzban Xray-core, Python (FastAPI) Всё что Xray + ноды для горизонтального масштаба 100-10000 пользователей, провайдеры услуг Средняя
Marzneshin Xray + sing-box + Hysteria, Python Всё Xray + Hysteria 2, TUIC, WireGuard через sing-box Продвинутые сценарии, multi-protocol Средняя
Hiddify Xray + sing-box, Docker Всё перечисленное + WG, OpenVPN, SSH-tunnel «всё в коробке», новички, малые сети Простая

2. 3x-ui — установка и настройка от A до Z

3x-ui (MHSanaei) — продолжение проекта x-ui (sprov-net) после его архива. Самая популярная панель в 2024-2026. Лёгкая, быстрая, на Go + SQLite, web-интерфейс + Telegram-бот.

2.1. Установка одной командой

# на свежей Ubuntu 22.04/24.04 или Debian 12, root
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
  

Скрипт спросит логин/пароль, порт панели, путь (для безопасности по умолчанию рандомный URL). Через 2 минуты панель доступна по http://VPS_IP:54321/randompath/.

Сразу после установки
  1. Смени дефолт: x-ui в SSH → меню → 6 (Reset username/password) — поставь свой логин/пароль
  2. Защити веб-панель TLS'ом: меню → 16 (SSL Certificate Management) — Let's Encrypt на твой домен или Cloudflare proxied
  3. Поставь только нужные порты в файрвол: ufw allow 54321,443,80/tcp
  4. Включи Telegram-бот (см. ниже) — для управления без панели

2.2. Создание первого Inbound

В веб-панели «Inbounds» → «+ New Inbound». Самая популярная связка для РФ — VLESS+Reality+Vision:

Кликни «Create» — Inbound создан. Под ним появляется ссылка для каждого user'а (vless://uuid@ip:443?...) и QR-код. Передай клиенту — он подключается.

2.3. Лимиты на пользователя

При создании клиента указываешь:

Это позволяет монетизировать (продать абонементы) или контролировать домашних пользователей.

Каждому пользователю можно дать один URL вместо QR-кода на каждый сервер. Клиент (sing-box, NekoBox, Hiddify) запоминает URL и автоматически забирает оттуда все доступные конфиги + обновляется при изменении.

В 3x-ui: меню → Settings → Subscription. Включаешь, указываешь домен/порт. Получаешь URL вида:

https://your-server.com:2096/sub/UUID
  

Этот URL и есть «единая подписка». В клиенте — Add Profile from URL.

2.5. Telegram-бот

В 3x-ui встроена интеграция с Telegram-ботом — можно управлять без веб-панели:

3. Marzban — для масштаба

Marzban (Dialogue Group, Иран) — продвинутая панель, изначально для VPN-сервисов с тысячами пользователей. Главное отличие — multi-node архитектура: одна «main»-панель управляет N серверов-нод. Пользователь подключается к ближайшей ноде.

Marzban: main + ноды
Marzban Main база пользователей панель + API не принимает VPN-клиентов Node DE Frankfurt Xray на 443 Node NL Amsterdam Xray на 443 Node SG Singapore Xray на 443 Node US New York Xray на 443 gRPC sync (users, configs)
Один main управляет — N нод обслуживают трафик. Sub-link автоматически даёт все ноды

Пользователь получает один sub-link, в нём — конфиги всех нод. Клиент сам выбирает ближайшую или самую быструю. Если одна нода забанена — клиент переключается на другую за секунды.

Установка main:

sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
  

Дальше — добавить ноды через веб-интерфейс. Каждая нода устанавливается на отдельный VPS отдельным скриптом, который связывается с main через gRPC.

4. Marzneshin — обновлённый Marzban

Marzneshin — переписанный Marzban, добавляет нативную поддержку Hysteria 2, TUIC, WireGuard, OpenVPN через интеграцию с sing-box (не только Xray). Это multi-protocol панель.

Если у тебя сценарий «часть пользователей сидит на Reality, часть на Hysteria 2, часть на WG» — Marzneshin позволяет это в одной панели с общим биллингом и подсчётом трафика.

5. Hiddify — «всё в Docker'е»

Hiddify — Docker-Compose дистрибутив, который ставит за 10 минут целый VPN-стек: Xray + sing-box + Hysteria + WG + nginx + панель + Telegram-бот. Идея — «всё в одной коробке для начинающих». Идеален для тех, кто не любит править конфиги.

Установка:

bash <(curl -L https://raw.githubusercontent.com/hiddify/hiddify-manager/main/common/download_install.sh)
  

После установки доступна по https://your-domain/admin/RANDOM_PATH/. В меню — все возможные комбинации протоколов, можно включать/выключать чек-боксами.

6. Безопасность панелей

Что часто ломают
  1. Дефолтный логин/пароль. После установки обязательно сменить.
  2. Панель на стандартном порту. Не оставляй 80/443/8080 на админку. Используй random порт + random path.
  3. Открытая SQLite-БД. Файл /etc/x-ui/x-ui.db должен быть chmod 600.
  4. Доступ через интернет без HTTPS. Подними Let's Encrypt на свой админ-домен.
  5. Reuse UUID между пользователями. Каждому свой UUID, по нему ведётся audit.
Best practices
  1. Cloudflare proxy перед админкой (только нужные cf-IP в файрвол)
  2. 2FA через Telegram-бот: при логине в админку шлёт код в Telegram
  3. fail2ban на SSH + админ-порт (см. урок 11)
  4. Бэкап БД ежедневно (rsync + S3/B2). При сносе сервера — восстановишь за минуту.
  5. Не давай sub-link напрямую — раздавай через своего бота, который проверяет права

Отдельно про обновления: панели — активно развивающийся open-source, и в них регулярно находят уязвимости. Устаревшая версия 3x-ui или Marzban на публичном порту — частая причина взлома «на ровном месте». Держи привычку обновлять панель и её зависимости так же, как обновляешь сам Xray-core; подпишись на релизы в GitHub соответствующего проекта, чтобы не пропустить security-патч. И помни: чем меньше поверхность (закрытый порт, доступ по IP, отдельный непривилегированный пользователь), тем меньше шанс, что новая уязвимость вообще будет достижима извне.

Аналогия

Панель — ресепшн отеля, а не сами номера

Протоколы из прошлых уроков — это номера (комнаты, где живёт трафик). Панель — стойка ресепшена: она заселяет гостей (создаёт пользователей и UUID), выдаёт ключи-карты (sub-link, по которому клиент сам скачивает и обновляет конфиги), считает, кто сколько прожил и потратил (лимиты трафика и сроки), и умеет управлять сетью отелей разом (Marzban с нодами). Отсюда две мысли. Первая: масштаб выбирает панель — одному гостю карту выпишешь от руки (config.json), тысяче — только ресепшн с биллингом. Вторая, важнее: ресепшн хранит журнал ВСЕХ гостей и запасные ключи от всех номеров — взломав его, злоумышленник получает весь отель. Поэтому панель прячут (нестандартный порт и путь, reverse-proxy, доступ по IP, 2FA) жёстче, чем сами номера.

7. Мини-лаба: попробуй прямо сейчас

Ставить панель нужен VPS, но её ЛОГИКУ — sub-link и структуру — можно понять локально. Разбери типичную ссылку-подписку и прикинь безопасность:

# 1. Как выглядит VLESS-конфиг внутри sub-link (это base64-строки таких URI):
echo 'vless://@server:443?type=tcp&security=reality&sni=www.microsoft.com&pbk=&sid=#my-vpn'
# узнаёшь всё из уроков 6–7: UUID, security=reality, sni-донор, публичный ключ, ShortID

# 2. Sub-link — это просто HTTP-эндпоинт с base64-списком таких URI. Раскодируй пример:
echo 'dmxlc3M6Ly9leGFtcGxlCg==' | base64 -d

# 3. Прикинь «поверхность атаки» панели: какой порт/путь ты бы НЕ оставил открытым
# стандартные 3x-ui по умолчанию: порт 2053, путь /panel — их обязательно менять

# 4. Проверь права на «базу пользователей» (на реальном сервере это /etc/x-ui/x-ui.db)
# должно быть 600 (только root). Смоделируй на своём файле:
touch demo.db && chmod 600 demo.db && ls -l demo.db
Ожидаемый результат

В пункте 1 ты увидишь, что sub-link — это просто упаковка знакомых параметров Reality из урока 7: панель ничего «магического» не делает, она их генерирует и раздаёт. Пункт 2 покажет, что подписка — обычный base64 (поменял ключи в панели — по этой ссылке у всех клиентов обновилось само). Пункты 3–4 — про то, почему панель это точка риска: открытый стандартный порт/путь и БД без прав 600 сдают злоумышленнику разом всех пользователей и ключи. Отсюда правило: админку прячут строже, чем сам VPN.

8. Задачи самопроверки — реши, потом раскрой ответ

Задача 1. У тебя 1 личный сервер и трое друзей. Стоит ли ставить Marzban с нодами? А если завтра будет 800 платящих пользователей на 5 серверах?

Для 1 сервера и троих — избыточно: хватит 3x-ui (одна панель, один узел, sub-links, лимиты). Marzban оправдан при масштабе: центральная панель + распределённые ноды, единый учёт пользователей поверх многих серверов, биллинг и телеграм-бот. Правило урока: 1 юзер — руками config.json, десятки — 3x-ui, сотни-тысячи на нескольких серверах — Marzban/Marzneshin с нодами.

Задача 2. Ты сменил домен и ключи Reality на сервере. Как сделать, чтобы у 200 пользователей конфиги обновились без рассылки каждому вручную?

Через subscription link: у каждого пользователя в клиенте прописан sub-URL, по которому приложение периодически тянет актуальный список конфигов. Поменял сервер/ключи в панели — обновил содержимое подписки, и клиенты сами подтянут новое при следующем обновлении. Именно ради этого панели и раздают sub-link, а не голые конфиги.

Задача 3. Панель поставили, всё работает, но через неделю доступ к ней получил посторонний. Назови три вероятные причины из этого урока.

(1) Не сменили дефолтные логин/пароль — боты-сканеры подбирают их за минуты. (2) Админка на стандартном порту/пути (2053, /panel) — легко находится массовым сканом. (3) Доступ к панели открыт в интернет без ограничения по IP/reverse-proxy и без 2FA. Плюс возможные: БД x-ui.db с правами не 600, отсутствие HTTPS. Взлом панели = раскрытие всех пользователей и ключей, поэтому меры обязательны сразу.

Задача 4. Почему панель — более опасная точка, чем отдельный протокол-инстанс, и как это меняет приоритеты защиты?

Панель централизует ВСЁ: список пользователей, их UUID/ключи, конфиги, статистику, часто — управление несколькими нодами. Компрометация одного протокола раскрывает один канал; компрометация панели — всю сеть сразу. Поэтому приоритет: спрятать админку (нестандартные порт+путь, reverse-proxy/Cloudflare, allow-list по IP), 2FA, свежие обновления, fail2ban, права на БД, регулярный бэкап. Удобство централизации оплачивается более строгой защитой центра.

Задача 5. Друг раздаёт sub-link напрямую всем желающим в открытом чате. Какие два риска и как правильно?

Риски: (1) утечка/переполнение — ссылку расшарят дальше, чужие сядут на твой трафик и «спалят» сервер поведением; (2) нет отзыва и учёта — не понять, кто есть кто, и отключить одного нельзя. Правильно: выдавать доступ через своего телеграм-бота, который проверяет права и выдаёт персональную подписку, каждому — свой UUID (для аудита и точечного отзыва), лимиты трафика/срока на пользователя. Тогда «протёкшего» отключаешь одной кнопкой.

9. Словарик урока

панель · panelвеб-интерфейс управления пользователями и конфигами Xray/протоколов
3x-uiпопулярная панель для одного сервера и небольших/средних объёмов
Marzban / Marzneshinмасштабная панель: центр + распределённые ноды, единый учёт
Hiddify«всё в Docker'е» — панель и стек в одной коробке
нода · nodeотдельный сервер-выход под управлением центральной панели
подписка · subscription linkURL, по которому клиент сам тянет и обновляет набор конфигов
UUIDуникальный идентификатор пользователя; основа аудита и точечного отзыва
лимиты · traffic-limit / expireограничение трафика и срока действия на пользователя
reverse-proxy перед админкойNginx/Cloudflare, прячущий и защищающий панель
2FAвторой фактор (код в Telegram) при входе в панель
Панель — это уровень управления над протоколами: она создаёт пользователей, генерит те же UUID/ключи Reality из уроков 6–7 и раздаёт их через sub-link (поменял в панели — обновилось у всех). Масштаб диктует выбор: config.json → 3x-ui → Marzban с нодами. Но централизация всего в одной точке делает панель главной целью атаки: дефолтные креды, стандартный порт/путь и открытый доступ — типовые дыры. Прячь админку жёстче, чем сам VPN, и делай бэкап БД.

10. Дальше

Панель — это вершина айсберга. Под ней важнее сама серверная инфраструктура: какой VPS взять, какая локация, как настроить ядро для максимума скорости, как защитить от активного зондирования. Это урок 11.