Настройки безопасности, SSL-сертификаты и сервисы панели 3X-UI

Безопасность веб-панели

Для предотвращения несанкционированного доступа и взлома панели 3X-UI выполните базовые меры защиты сразу после установки:

  1. Смена стандартного логина и пароля:
    • Перейдите в Настройки панели (Panel Settings) → вкладка Аутентификация (Authentication).
    • Задайте уникальный сложный логин и надежный пароль.
  2. Секретный базовый путь (Web Base Path):
    • В поле Web Base Path укажите нестандартный префикс URL, например /my_secret_admin/.
    • При обращении к корню сервера http://IP:PORT/ панель вернет ошибку 404/403, маскируя свое присутствие от интернет-сканеров.
  3. Двухфакторная аутентификация (2FA):
    • Включите 2FA в настройках панели и отсканируйте QR-код в Google Authenticator или любом TOTP-приложении.
    • Если вы потеряете доступ к 2FA, его всегда можно сбросить из консоли сервера командой x-ui (пункт 7).
  4. Смена порта панели:
    • Не используйте стандартный порт 2053 на открытом сервере. Задайте случайный порт в диапазоне 10000–60000.

Получение и настройка SSL-сертификатов

Для защищенного доступа к веб-панели и подпискам по HTTPS (https://ваш-домен:порт/) рекомендуется выпустить бесплатный SSL-сертификат Let's Encrypt.

Способ 1: Встроенный ACME в меню `x-ui` (рекомендуется)

  1. Убедитесь, что ваш домен направлен на IP-адрес сервера (A-запись в DNS) и порт 80 свободен.
  2. Подключитесь к серверу по SSH и запустите x-ui.
  3. Выберите пункт 20 (SSL Certificate Management):
    • Get SSL (Domain) — введите ваше доменное имя, скрипт автоматически выпустит сертификат через ACME.
    • Set Cert paths for the panel — скрипт автоматически применит пути к выпущенному сертификату (fullchain.cer и privkey.key) в настройки веб-панели и перезапустит ее.
    • Force Renew — принудительное продление сертификата.
    • Get SSL for IP Address — выпуск короткоживущего 6-дневного автопродлеваемого сертификата для прямого IP-адреса.

Способ 2: Через Cloudflare DNS API (пункт `21`)

Идеально подходит, если домен подключен к Cloudflare, а также для выпуска Wildcard-сертификатов (*.domain.com):

  1. В консоли x-ui выберите пункт 21 (Cloudflare SSL Certificate).
  2. Выберите тип авторизации: API Token (t) или Global API Key (g).
  3. Для получения API Token:
    • Откройте Cloudflare API Tokens.
    • Нажмите Create Token → выберите шаблон Edit zone DNS.
    • Укажите зону вашего домена и скопируйте полученный токен.
  4. Вставьте токен и домен в консоли. Сертификат будет выпущен и автоматически прописан.

Способ 3: Через Certbot Standalone

apt-get install certbot -y
certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com

Сертификаты сохранятся в /etc/letsencrypt/live/yourdomain.com/. Укажите пути к fullchain.pem и privkey.pem в настройках панели.


Настройка реверс-прокси (Reverse Proxy: Nginx / Caddy)

Реверс-прокси позволяет спрятать саму панель и подписки за стандартными портами 80 и 443 веб-сервера.

Пример конфигурации Nginx:

<h1 id="доступ-к-веб-панели-3x-ui">Доступ к веб-панели 3X-UI <a href="#доступ-к-веб-панели-3x-ui" class="header-anchor" aria-hidden="true">#</a></h1>
location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Range $http_range;
    proxy_set_header If-Range $http_if_range;

    proxy_redirect off;
    proxy_pass http://127.0.0.1:2053;
}

<h1 id="доступ-к-серверу-подписок--порт-2096-по-умолчанию">Доступ к серверу подписок (порт 2096 по умолчанию) <a href="#доступ-к-серверу-подписок--порт-2096-по-умолчанию" class="header-anchor" aria-hidden="true">#</a></h1>
location /sub {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_redirect off;
    proxy_pass http://127.0.0.1:2096;
}

Ограничение подключений с нескольких IP (Fail2ban IP Limit)

Встроенная интеграция 3X-UI с Fail2ban позволяет ограничить число одновременных IP-адресов на одного клиента (защита от раздачи одного ключа многим пользователям):

  1. В терминале запустите x-ui и выберите пункт 22 (IP Limit Management).
  2. Выберите Install Fail2ban and configure IP Limit — скрипт установит fail2ban и создаст специальный jail для 3X-UI.
  3. В веб-панели перейдите в Xray Configs (Настройки Xray) → вкладка Log и укажите путь для журнала доступа:
    • Access log: ./access.log
    • Нажмите Save и перезапустите Xray.
  4. В свойствах любого клиента в поле IP Limit задайте максимальное число IP (например, 2). При превышении лимита нарушитель будет временно заблокирован через iptables.

Настройка Telegram-бота панели

3X-UI включает мощного Telegram-бота для удаленного контроля и получения бэкапов:

  1. Откройте в Telegram бота @BotFather и создайте нового бота командой /newbot. Скопируйте полученный токен (Bot Token).
  2. Узнайте свой числовой Telegram ID через бота @useridinfobot.
  3. В панели 3X-UI откройте Настройки панели (Panel Settings) → Telegram Bot:
    • Telegram Bot Token: вставьте токен от BotFather.
    • Admin Chat ID(s): ваш числовой ID (если администраторов несколько — через запятую).
    • Notification Time (Расписание): задайте время отправки отчетов по cron (например, @daily раз в сутки или @every 8h каждые 8 часов).
    • Login Notification: включите оповещения о каждом входе в панель.
    • CPU Load Threshold (%): процент нагрузки на процессор для тревожного оповещения (например, 85).
    • Database Backup: включите автоматическую отправку архива базы данных x-ui.db в Telegram вместе с регулярным отчетом.
    • Сохраните настройки и нажмите кнопку перезапуска.