VLESS + Reality + 3X-UI на Ubuntu

 

1. Обновление системы

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git nano htop net-tools

2. Установка Python

sudo apt install -y python3 python3-pip

Примечание: модуль pyasynchat встроен в Python 3.11+ и дополнительная установка не требуется.

3. Установка полезных утилит

sudo apt install -y parted qemu-guest-agent haveged mc nmap apt-transport-https ca-certificates software-properties-common openssl

4. Установка Docker

Добавляем GPG ключ и репозиторий

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установка Docker

sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
sudo systemctl enable --now docker

Проверка Docker

docker version
docker run hello-world

5. Установка 3X-UI через Docker

mkdir -p ~/panel/{db,cert} && cd ~/panel

Создаем docker-compose файл

nano compose.yml
services:
  3xui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3xui_app
    volumes:
      - ./db/:/etc/x-ui/
      - ./cert/:/root/cert/
    environment:
      XRAY_VMESS_AEAD_FORCED: "false"
    network_mode: host
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true

Запуск панели

docker compose -f compose.yml up -d
docker compose -f compose.yml ps
docker compose -f compose.yml config

Доступ к панели управления:

  • URL: http://<ваш_IP>:2053
  • Логин: admin
  • Пароль: admin

6. Настройка Firewall (IPTables)

sudo apt install -y iptables iptables-persistent

# Разрешаем уже установленные соединения
sudo iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешаем loopback
sudo iptables -I INPUT 2 -i lo -j ACCEPT

# Разрешаем VLESS/Reality (порт 443) и панель (2053)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2053 -j ACCEPT

# Разрешаем SSH с вашего IP
sudo iptables -A INPUT -s <ваш_IP> -p tcp --dport 22 -j ACCEPT

# Блокируем все остальное
sudo iptables -P INPUT DROP

# Сохраняем правила
sudo netfilter-persistent save

7. Создание сертификата для панели (self-signed)

sudo openssl req -x509 -newkey rsa:4096 -nodes -sha256 \
-keyout ~/panel/cert/private_xray_web.key \
-out ~/panel/cert/public_xray_web.cer \
-days 3650 -subj "/CN=<ваш_IP>" \
-addext "subjectAltName=IP:<ваш_IP>"

sudo chmod 644 ~/panel/cert/public_xray_web.cer
sudo chmod 600 ~/panel/cert/private_xray_web.key

В панели управления указываем пути к сертификатам:

  • Публичный: /root/cert/public_xray_web.cer
  • Приватный: /root/cert/private_xray_web.key
docker compose -f compose.yml restart

8. Настройка VLESS + Reality в 3X-UI

Отключаем подписку, перезапускаем панель (перезапуск требуется после для применения любого изменения).

Создаем входящее подключение. Заполняем поля “Примечание” – любое удобное наименование подключения, “Протокол” – vless, “Адрес” – внешний ip адрес сервера, “Порт” – 443.

Вкладка “Протокол” без изменений. Вкладка “Поток” выбираем “Транспорт” “XHTTP”, включаем “Sockopt” и “NCP Fast Open”  

Вкладка “Безопасность”: выбираем “Reality” в меню “Безопасность”, в поле “Цель” вносим общеизвестный высоко доступный сайт, жмём “Сканировать”, получаем подтверждение и автозаполненные поля, обновляем “Short IDs”, получаем новые сертификаты.

На вкладке “Сниффинг” включаем все протоколы и сохраняем подключение.

Добавляем клиента (пользователя). В закладке “Основное” поле “Email” вводим любое удобное для нас наименование клиента, привязываем входящее подключение.

На вкладке “Учетные данные” обновляем UUID, проставляем “Flow”, сохраняем.

Настраиваем Cloudflare WARP, создаём аккаунт.

Кликаем “Добавить исходящий” ничего не меняя, можно установить автоматическое обновление IP адреса, не все рекомендуют это делать.

Настраиваем маршрутизацию. “Базовые соединения” -> “Правила IP v4” выбираем все, сохраняем.

В вкладке “Маршрутизация” в конце списка появится правило, редактируем его выставляя поля “Теги входящих” и “Тег исходящего”.

Сохраняем и добавляем еще одно правило с следующими параметрами в полях “Теги входящих” и “Тег исходящего”.

9. Проверки после установки

docker ps
docker logs 3xui_app
sudo systemctl status docker
docker compose -f compose.yml restart

10. Рекомендации

  • Для продакшена используйте домен + Let’s Encrypt вместо self-signed сертификатов.
  • Если сервер публичный — настройте fail2ban для SSH и панели.
  • Для Reality рекомендуется использовать последнюю версию 3X-UI и Xray.
  • Все изменения в compose.yml требуют перезапуска контейнера: docker compose -f compose.yml up -d

Leave a Reply