From e7decbc5db1037b94e5b5fc1ccd16fd781456677 Mon Sep 17 00:00:00 2001 From: houseassassin <3976100+houseassassin@users.noreply.github.com> Date: Wed, 22 Apr 2026 12:46:07 +0300 Subject: [PATCH] feat: Release v2.1.0 - MTProxy, Reverse Proxy Selection, Selfsteal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✨ New Features: - 📱 MTProxy support for Telegram with full management interface - 🔄 Reverse Proxy selection (Nginx/Caddy) - 🎭 Selfsteal traffic masking (3 template types) - 📱 QR code generation for MTProxy connections - 🎮 Interactive MTProxy manager (mtproxy-manager.sh) 🔧 Improvements: - Enhanced menu system with better component selection - Improved SSL certificate management - Better error handling and logging - Multi-language support (EN/RU) 📖 Documentation: - Comprehensive README-v2.md with detailed guides - MTProxy management instructions - Reverse proxy comparison (Nginx vs Caddy) - Selfsteal setup documentation Co-Authored-By: Claude Sonnet 4 --- README-v2.md | 418 ++++++++++++++++++++++++++++++ install-advanced-v2.sh | 561 +++++++++++++++++++++++++++++++++++++++++ mtproxy-manager.sh | 272 ++++++++++++++++++++ 3 files changed, 1251 insertions(+) create mode 100644 README-v2.md create mode 100755 install-advanced-v2.sh create mode 100755 mtproxy-manager.sh diff --git a/README-v2.md b/README-v2.md new file mode 100644 index 0000000..af43cad --- /dev/null +++ b/README-v2.md @@ -0,0 +1,418 @@ +# 🚀 Proxy-Core + +
+ +``` +╔═══════════════════════════════════════════════════════════════════╗ +║ ██████╗ ██████╗ ██████╗ ██╗ ██╗██╗ ██╗ ██████╗ ██████╗ ║ +║ ██╔══██╗██╔══██╗██╔═══██╗╚██╗██╔╝╚██╗ ██╔╝ ██╔════╝██╔═══██╗║ +║ ██████╔╝██████╔╝██║ ██║ ╚███╔╝ ╚████╔╝█████╗██║ ██║ ██║║ +║ ██╔═══╝ ██╔══██╗██║ ██║ ██╔██╗ ╚██╔╝ ╚════╝██║ ██║ ██║║ +║ ██║ ██║ ██║╚██████╔╝██╔╝ ██╗ ██║ ╚██████╗╚██████╔╝║ +║ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ║ +║ ║ +║ Advanced VPN & Proxy Panel Auto-Installer ║ +╚═══════════════════════════════════════════════════════════════════╝ +``` + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Version](https://img.shields.io/badge/version-2.1.0-blue.svg)](https://github.com/houseassassin/proxy-core) +[![Bash](https://img.shields.io/badge/bash-5.0+-green.svg)](https://www.gnu.org/software/bash/) +[![Docker](https://img.shields.io/badge/docker-20.10+-blue.svg)](https://www.docker.com/) + +**Универсальный установщик и менеджер VPN/Proxy панелей с поддержкой множества протоколов** + +[Установка](#-быстрая-установка) • [Возможности](#-возможности) • [Документация](#-документация) • [Поддержка](#-поддержка) + +
+ +--- + +## 📋 О проекте + +**Proxy-Core** — это мощный инструмент для автоматической установки и управления VPN/Proxy панелями. Объединяет лучшие практики из популярных проектов и предоставляет единый интерфейс для работы с различными протоколами. + +### 🎯 Поддерживаемые панели + +| Панель | Протоколы | Особенности | +|--------|-----------|-------------| +| **WireGuard** | WireGuard | Быстрый, современный, безопасный VPN | +| **3x-ui** | VLESS, VMess, Trojan, Shadowsocks, XTLS | Веб-панель Xray с множеством протоколов | +| **Remnawave** | Multi-protocol | Современная панель с Docker и reverse proxy | +| **Hysteria2** | Hysteria2 | Высокоскоростной прокси с маскировкой трафика | +| **MTProxy** | MTProxy | Официальный прокси для Telegram | + +### 🔄 Reverse Proxy + +| Сервер | Особенности | Рекомендуется для | +|--------|-------------|-------------------| +| **Nginx** | Высокая производительность, стабильность | Production, высокие нагрузки | +| **Caddy** | Автоматический HTTPS, простая конфигурация | Быстрый старт, малые проекты | + +### 💻 Поддерживаемые ОС + +
+ +| OS | Версии | Статус | +|:--:|:------:|:------:| +| 🐧 **Ubuntu** | 18.04, 20.04, 22.04, 24.04 | ✅ Полная поддержка | +| 🐧 **Debian** | 10, 11, 12 | ✅ Полная поддержка | +| 🎩 **CentOS** | 7, 8, 9 | ✅ Полная поддержка | +| 🎩 **RHEL** | 7, 8, 9 | ✅ Полная поддержка | +| 🎩 **Fedora** | 35+ | ✅ Полная поддержка | + +
+ +--- + +## ⚡ Быстрая установка + +### Метод 1: Одна команда (рекомендуется) + +```bash +bash <(curl -Ls https://raw.githubusercontent.com/houseassassin/proxy-core/main/install-advanced-v2.sh) +``` + +### Метод 2: Скачать и запустить + +```bash +wget https://raw.githubusercontent.com/houseassassin/proxy-core/main/install-advanced-v2.sh +chmod +x install-advanced-v2.sh +sudo ./install-advanced-v2.sh +``` + +### Метод 3: Клонировать репозиторий + +```bash +git clone https://github.com/houseassassin/proxy-core.git +cd proxy-core +chmod +x *.sh +sudo ./install-advanced-v2.sh +``` + +--- + +## 🌟 Возможности + +
+ +### 🔧 Автоматизация + +
+ +- ✅ **Автоопределение ОС** — автоматическое определение дистрибутива и версии +- ✅ **Установка зависимостей** — Docker, Docker Compose, certbot и все необходимое +- ✅ **Генерация паролей** — автоматическая генерация безопасных паролей и ключей +- ✅ **Настройка firewall** — автоматическая конфигурация UFW/firewalld +- ✅ **BBR оптимизация** — включение BBR для улучшения производительности TCP +- ✅ **Swap управление** — автоматическое создание swap при нехватке RAM + +
+ +### 🔐 SSL/TLS сертификаты + +
+ +- 🔒 **Let's Encrypt** — HTTP-01 challenge для обычных доменов +- 🔒 **Cloudflare DNS** — DNS-01 challenge с поддержкой wildcard сертификатов +- 🔒 **Gcore DNS** — альтернативный DNS провайдер +- 🔒 **Самоподписанные** — для тестирования и локальных сетей +- 🔒 **Автообновление** — автоматическое обновление сертификатов через cron + +
+ +### 🎮 Управление + +
+ +- 📊 **Мониторинг** — статус сервисов, использование ресурсов, логи +- 🔄 **Обновления** — простое обновление всех компонентов +- 💾 **Резервное копирование** — ручное и автоматическое создание бэкапов +- 🔄 **Восстановление** — быстрое восстановление из резервных копий +- 👥 **Управление клиентами** — добавление, удаление, просмотр клиентов WireGuard +- 📱 **QR-коды** — генерация QR-кодов для мобильных устройств + +
+ +### 🎨 Дополнительные функции + +
+ +- 🎭 **Selfsteal** — маскировка под обычный сайт +- 🔄 **Выбор Reverse Proxy** — Nginx или Caddy на выбор +- 📱 **MTProxy** — официальный прокси для Telegram с QR-кодами +- 🌍 **Многоязычность** — English + Русский +- 🎨 **Цветной вывод** — красивый и понятный интерфейс +- ⚡ **Spinner анимация** — визуализация длительных операций + +--- + +## 📖 Документация + +### 🚀 Быстрый старт + +#### 1. Установка WireGuard + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 1 (Install Panel) → 1 (WireGuard) +``` + +#### 2. Установка 3x-ui + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 1 (Install Panel) → 2 (3x-ui) +``` + +#### 3. Установка Remnawave с выбором Reverse Proxy + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 1 (Install Panel) → 3 (Remnawave) +# Затем выберите: 1 (Nginx) или 2 (Caddy) +``` + +#### 4. Установка Hysteria2 + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 1 (Install Panel) → 4 (Hysteria2) +``` + +#### 5. Установка MTProxy для Telegram + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 1 (Install Panel) → 5 (MTProxy) +``` + +**Результат:** +- Прокси для Telegram +- Ссылка для подключения: `tg://proxy?server=...` +- QR-код для быстрого подключения +- Конфигурация: `/opt/MTProxy/` + +**Управление:** +```bash +sudo ./mtproxy-manager.sh +``` + +--- + +### 🎭 Selfsteal - Маскировка трафика + +Selfsteal позволяет замаскировать ваш прокси-сервер под обычный веб-сайт. + +#### Установка Selfsteal + +```bash +sudo ./install-advanced-v2.sh +# Выберите: 6 (Selfsteal) +``` + +#### Типы Selfsteal: + +**1. Случайный сайт** +- Автоматически выбирается популярный сайт +- Wikipedia, GitHub, StackOverflow, Reddit, Medium + +**2. Пользовательский URL** +- Укажите любой URL +- Скрипт скачает и настроит страницу + +**3. Локальный HTML файл** +- Используйте свой HTML файл +- Полный контроль над содержимым + +#### Как это работает: + +1. При обращении к серверу по HTTP показывается обычный сайт +2. Прокси работает на других портах/протоколах +3. Для внешнего наблюдателя сервер выглядит как обычный веб-сайт + +--- + +### 🔄 Reverse Proxy - Nginx vs Caddy + +#### Когда использовать Nginx: + +✅ **Production окружение** +- Высокие нагрузки (1000+ одновременных подключений) +- Требуется максимальная производительность +- Нужна гибкая конфигурация +- Есть опыт работы с Nginx + +#### Когда использовать Caddy: + +✅ **Быстрый старт** +- Автоматический HTTPS из коробки +- Простая конфигурация +- Малые и средние проекты +- Нет опыта с веб-серверами + +#### Сравнение: + +| Функция | Nginx | Caddy | +|---------|-------|-------| +| Производительность | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | +| Простота настройки | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | +| Автоматический HTTPS | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | +| Гибкость | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | +| Документация | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | + +--- + +### 📱 MTProxy Management + +#### Показать ссылку подключения + +```bash +sudo ./mtproxy-manager.sh +# Выберите: 1 (Показать ссылку подключения) +``` + +Получите: +- Ссылку для Telegram: `tg://proxy?server=...` +- QR-код для быстрого подключения +- Параметры для ручной настройки + +#### Сгенерировать новый секрет + +```bash +sudo ./mtproxy-manager.sh +# Выберите: 2 (Сгенерировать новый секрет) +``` + +⚠️ **Внимание:** Все текущие подключения будут разорваны! + +#### Изменить порт + +```bash +sudo ./mtproxy-manager.sh +# Выберите: 3 (Изменить порт) +``` + +#### Обновить конфигурацию Telegram + +```bash +sudo ./mtproxy-manager.sh +# Выберите: 4 (Обновить конфигурацию) +``` + +Обновляет: +- `proxy-secret` - секреты Telegram +- `proxy-multi.conf` - конфигурация серверов + +#### Показать статистику + +```bash +sudo ./mtproxy-manager.sh +# Выберите: 5 (Показать статистику) +``` + +Показывает: +- Статус сервиса +- Использование CPU и RAM +- Количество активных подключений + +--- + +## 🔒 Безопасность + +### ✅ Рекомендации после установки + +1. **Смените пароли по умолчанию** +2. **Настройте firewall** +3. **Включите автообновления** +4. **Установите fail2ban** +5. **Настройте регулярные бэкапы** +6. **Используйте Selfsteal для маскировки** +7. **Мониторинг логов** + +Подробнее в [SECURITY.md](docs/SECURITY.md). + +--- + +## 📊 Структура проекта + +``` +proxy-core/ +├── 📄 install-advanced-v2.sh # Основной установщик v2.1 +├── 📄 install-advanced.sh # Установщик v2.0 +├── 🎮 manage.sh # Менеджер панелей +├── 🔧 wg-manager.sh # WireGuard менеджер +├── 📱 mtproxy-manager.sh # MTProxy менеджер +├── 🔄 update.sh # Обновление +├── 🎨 banner.sh # ASCII баннер +├── 📖 README.md # Документация +├── 📖 CONTRIBUTING.md # Руководство для участников +├── 📖 PUBLISH.md # Инструкция по публикации +└── 📜 LICENSE # MIT License +``` + +--- + +## 🤝 Благодарности + +Проект основан на лучших практиках из: + +- [3dp-manager](https://github.com/denpiligrim/3dp-manager) - Docker management, Hysteria2 +- [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy) - SSL, multi-language +- [remnawave-scripts](https://github.com/DigneZzZ/remnawave-scripts) - Backup system +- [RemnaSetup](https://github.com/Capybara-z/RemnaSetup) - Beautiful UI, selfsteal + +Огромное спасибо авторам! 🙏 + +--- + +## 📝 Лицензия + +MIT License - свободное использование и модификация + +--- + +## 💬 Поддержка + +- **GitHub Issues:** [github.com/houseassassin/proxy-core/issues](https://github.com/houseassassin/proxy-core/issues) +- **Telegram:** [@houseassassin](https://t.me/houseassassin) + +--- + +## 🔄 Changelog + +### Version 2.1.0 (2026-04-22) + +✨ **Новое:** +- 📱 Поддержка MTProxy для Telegram +- 🔄 Выбор Reverse Proxy (Nginx/Caddy) +- 🎭 Selfsteal - маскировка под обычный сайт +- 📱 QR-коды для MTProxy +- 🎮 Менеджер MTProxy + +🔧 **Улучшения:** +- Интерактивный выбор компонентов +- Улучшенная система меню +- Больше опций конфигурации + +### Version 2.0.0 (2026-04-22) + +✨ **Новое:** +- Поддержка Hysteria2 +- Улучшенное управление SSL (3 метода) +- Автоматическая настройка BBR +- Многоязычный интерфейс (EN/RU) +- Spinner анимация +- Система логирования + +--- + +
+ +### 💖 Сделано с любовью by [houseassassin](https://github.com/houseassassin) + +**Если проект помог вам, поставьте ⭐ звезду!** + +[⬆ Наверх](#-proxy-core) + +
diff --git a/install-advanced-v2.sh b/install-advanced-v2.sh new file mode 100755 index 0000000..b5d7da3 --- /dev/null +++ b/install-advanced-v2.sh @@ -0,0 +1,561 @@ +#!/bin/bash + +# Proxy-Core - Advanced VPN & Proxy Panel Auto-Installer +# Version: 2.1.0 +# Author: houseassassin +# GitHub: https://github.com/houseassassin/proxy-core +# +# Supports: WireGuard, 3x-ui, Remnawave, Hysteria2, MTProxy +# Reverse Proxy: Nginx, Caddy +# Features: Selfsteal templates + +set -euo pipefail + +SCRIPT_VERSION="2.1.0" +PROJECT_DIR="/opt/proxy-core" +LANG_FILE="${PROJECT_DIR}/.selected_language" + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +MAGENTA='\033[0;35m' +CYAN='\033[0;36m' +GRAY='\033[0;90m' +NC='\033[0m' + +# Logging +LOGFILE="${PROJECT_DIR}/installer.log" + +log() { echo -e "${GREEN}[INFO]${NC} $1" | tee -a "$LOGFILE"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $1" | tee -a "$LOGFILE"; } +error() { echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOGFILE"; exit 1; } +success() { echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOGFILE"; } + +# Spinner animation +spinner() { + local pid=$1 + local text=$2 + local spinstr='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' + + while kill -0 "$pid" 2>/dev/null; do + for (( i=0; i<${#spinstr}; i++ )); do + printf "\r${GREEN}[%s]${NC} %s" "${spinstr:$i:1}" "$text" + sleep 0.1 + done + done + printf "\r\033[K" +} + +# Language support +declare -A LANG_EN=( + [MENU_TITLE]="VPN Panel Installer" + [MENU_INSTALL]="Install Panel" + [MENU_MANAGE]="Manage Services" + [MENU_BACKUP]="Backup & Restore" + [MENU_UPDATE]="Update Components" + [MENU_UNINSTALL]="Uninstall" + [MENU_EXIT]="Exit" + [SELECT_PANEL]="Select panel to install" + [WIREGUARD]="WireGuard VPN" + [3XUI]="3x-ui Panel" + [REMNAWAVE]="Remnawave Panel" + [HYSTERIA2]="Hysteria2 Proxy" + [MTPROXY]="MTProxy (Telegram)" + [SELECT_REVERSE_PROXY]="Select Reverse Proxy" + [NGINX]="Nginx" + [CADDY]="Caddy" + [SELFSTEAL]="Install Selfsteal Template" + [ALL]="Install All" +) + +declare -A LANG_RU=( + [MENU_TITLE]="Установщик VPN панелей" + [MENU_INSTALL]="Установить панель" + [MENU_MANAGE]="Управление сервисами" + [MENU_BACKUP]="Резервное копирование" + [MENU_UPDATE]="Обновить компоненты" + [MENU_UNINSTALL]="Удалить" + [MENU_EXIT]="Выход" + [SELECT_PANEL]="Выберите панель для установки" + [WIREGUARD]="WireGuard VPN" + [3XUI]="Панель 3x-ui" + [REMNAWAVE]="Панель Remnawave" + [HYSTERIA2]="Прокси Hysteria2" + [MTPROXY]="MTProxy (Telegram)" + [SELECT_REVERSE_PROXY]="Выберите Reverse Proxy" + [NGINX]="Nginx" + [CADDY]="Caddy" + [SELFSTEAL]="Установить Selfsteal шаблон" + [ALL]="Установить всё" +) + +MENU_LANG="en" + +load_language() { + if [ -f "$LANG_FILE" ]; then + MENU_LANG=$(cat "$LANG_FILE" 2>/dev/null | tr -d '[:space:]') + fi +} + +save_language() { + mkdir -p "$(dirname "$LANG_FILE")" + echo "$1" > "$LANG_FILE" + MENU_LANG="$1" +} + +L() { + local key="$1" + local var_name="LANG_${MENU_LANG^^}_${key}" + echo "${!var_name:-$key}" +} + +# System checks +check_root() { + if [[ $EUID -ne 0 ]]; then + error "Этот скрипт должен быть запущен с правами root" + fi +} + +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID + VER=$VERSION_ID + else + error "Не удалось определить операционную систему" + fi + log "Обнаружена ОС: $OS $VER" +} + +check_memory() { + local mem_mb=$(free -m | grep Mem: | awk '{print $2}') + if [ $mem_mb -lt 2000 ]; then + local swap_mb=$(free -m | grep Swap: | awk '{print $2}') + if [ $swap_mb -eq 0 ]; then + warn "Мало RAM ($mem_mb MB), создаём swap 2GB..." + fallocate -l 2G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=2048 + chmod 600 /swapfile + mkswap /swapfile + swapon /swapfile + echo '/swapfile none swap sw 0 0' >> /etc/fstab + success "Swap создан" + fi + fi +} + +# Network utilities +get_server_ip() { + curl -s -4 ifconfig.me || curl -s -4 api.ipify.org || curl -s -4 ipinfo.io/ip +} + +get_random_port() { + local MIN=${1:-3000} + local MAX=${2:-6999} + + while :; do + PORT=$(shuf -i "$MIN-$MAX" -n 1) + if ! ss -ltun | awk '{print $4}' | grep -q ":$PORT\$"; then + echo "$PORT" + return + fi + done +} + +# Docker management +install_docker() { + if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then + log "Docker уже установлен" + return 0 + fi + + log "Установка Docker..." + curl -fsSL https://get.docker.com -o /tmp/get-docker.sh + sh /tmp/get-docker.sh + rm /tmp/get-docker.sh + + systemctl enable docker + systemctl start docker + + success "Docker установлен" +} + +# System packages +install_packages() { + log "Установка системных пакетов..." + + case $OS in + ubuntu|debian) + apt-get update -y + apt-get install -y curl wget git sudo ufw certbot \ + ca-certificates jq openssl tar net-tools \ + qrencode python3-certbot-dns-cloudflare \ + unattended-upgrades locales dnsutils coreutils \ + grep gawk python3-pip cron nginx + ;; + centos|rhel|fedora) + yum update -y + yum install -y curl wget git sudo firewalld certbot \ + ca-certificates jq openssl tar net-tools qrencode nginx + ;; + esac + + # BBR + if ! grep -q "net.core.default_qdisc = fq" /etc/sysctl.conf; then + echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf + fi + if ! grep -q "net.ipv4.tcp_congestion_control = bbr" /etc/sysctl.conf; then + echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf + fi + sysctl -p >/dev/null + + # UFW + if command -v ufw >/dev/null 2>&1; then + ufw allow 22/tcp comment 'SSH' >/dev/null 2>&1 + ufw allow 443/tcp comment 'HTTPS' >/dev/null 2>&1 + ufw --force enable >/dev/null 2>&1 + fi + + success "Системные пакеты установлены" +} + +# MTProxy installation +install_mtproxy() { + log "Установка MTProxy для Telegram..." + + # Установка зависимостей + case $OS in + ubuntu|debian) + apt-get install -y git build-essential libssl-dev zlib1g-dev + ;; + centos|rhel|fedora) + yum install -y git gcc make openssl-devel zlib-devel + ;; + esac + + # Клонирование репозитория + cd /opt + if [ -d "MTProxy" ]; then + rm -rf MTProxy + fi + git clone https://github.com/TelegramMessenger/MTProxy.git + cd MTProxy + + # Компиляция + make + + # Получение секрета + curl -s https://core.telegram.org/getProxySecret -o proxy-secret + curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf + + # Генерация секрета для клиентов + SECRET=$(head -c 16 /dev/urandom | xxd -ps) + + # Выбор порта + read -p "Введите порт для MTProxy (по умолчанию 8443): " MTPROXY_PORT + MTPROXY_PORT=${MTPROXY_PORT:-8443} + + # Создание systemd сервиса + cat > /etc/systemd/system/mtproxy.service </dev/null || firewall-cmd --permanent --add-port=$MTPROXY_PORT/tcp 2>/dev/null + + SERVER_IP=$(get_server_ip) + + success "MTProxy установлен!" + echo "" + log "Ссылка для подключения:" + echo -e "${CYAN}tg://proxy?server=${SERVER_IP}&port=${MTPROXY_PORT}&secret=${SECRET}${NC}" + echo "" + log "Или используйте в Telegram:" + echo -e "${YELLOW}Server: ${SERVER_IP}${NC}" + echo -e "${YELLOW}Port: ${MTPROXY_PORT}${NC}" + echo -e "${YELLOW}Secret: ${SECRET}${NC}" +} + +# Reverse Proxy selection +select_reverse_proxy() { + echo "" + echo -e "${GREEN}$(L SELECT_REVERSE_PROXY)${NC}" + echo "" + echo -e "${YELLOW}1.${NC} $(L NGINX)" + echo -e "${YELLOW}2.${NC} $(L CADDY)" + echo "" + read -p "Выберите / Select [1-2]: " PROXY_CHOICE + + case $PROXY_CHOICE in + 1) + REVERSE_PROXY="nginx" + install_nginx + ;; + 2) + REVERSE_PROXY="caddy" + install_caddy + ;; + *) + warn "Неверный выбор, используется Nginx" + REVERSE_PROXY="nginx" + install_nginx + ;; + esac +} + +# Nginx installation +install_nginx() { + if command -v nginx >/dev/null 2>&1; then + log "Nginx уже установлен" + return 0 + fi + + log "Установка Nginx..." + + case $OS in + ubuntu|debian) + apt-get install -y nginx + ;; + centos|rhel|fedora) + yum install -y nginx + ;; + esac + + systemctl enable nginx + systemctl start nginx + + success "Nginx установлен" +} + +# Caddy installation +install_caddy() { + if command -v caddy >/dev/null 2>&1; then + log "Caddy уже установлен" + return 0 + fi + + log "Установка Caddy..." + + case $OS in + ubuntu|debian) + apt-get install -y debian-keyring debian-archive-keyring apt-transport-https + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list + apt-get update + apt-get install -y caddy + ;; + centos|rhel|fedora) + yum install -y yum-plugin-copr + yum copr enable @caddy/caddy -y + yum install -y caddy + ;; + esac + + systemctl enable caddy + systemctl start caddy + + success "Caddy установлен" +} + +# Selfsteal template installation +install_selfsteal() { + log "Установка Selfsteal шаблона..." + + if [ ! -d "/opt/remnawave" ] && [ ! -d "/opt/remnanode" ]; then + error "Remnawave или Remnanode должны быть установлены для selfsteal" + fi + + # Определяем директорию + if [ -d "/opt/remnawave" ]; then + INSTALL_DIR="/opt/remnawave" + else + INSTALL_DIR="/opt/remnanode" + fi + + echo "" + echo -e "${GREEN}Выберите тип selfsteal шаблона:${NC}" + echo "" + echo -e "${YELLOW}1.${NC} Случайный сайт" + echo -e "${YELLOW}2.${NC} Пользовательский URL" + echo -e "${YELLOW}3.${NC} Локальный HTML файл" + echo "" + read -p "Выберите [1-3]: " SELFSTEAL_TYPE + + case $SELFSTEAL_TYPE in + 1) + # Список популярных сайтов + SITES=( + "https://www.wikipedia.org" + "https://www.github.com" + "https://www.stackoverflow.com" + "https://www.reddit.com" + "https://www.medium.com" + ) + RANDOM_SITE=${SITES[$RANDOM % ${#SITES[@]}]} + log "Используется случайный сайт: $RANDOM_SITE" + + # Скачиваем страницу + curl -sL "$RANDOM_SITE" > "$INSTALL_DIR/selfsteal.html" + ;; + 2) + read -p "Введите URL сайта: " CUSTOM_URL + log "Скачивание $CUSTOM_URL..." + curl -sL "$CUSTOM_URL" > "$INSTALL_DIR/selfsteal.html" + ;; + 3) + read -p "Введите путь к HTML файлу: " HTML_PATH + if [ -f "$HTML_PATH" ]; then + cp "$HTML_PATH" "$INSTALL_DIR/selfsteal.html" + else + error "Файл не найден: $HTML_PATH" + fi + ;; + *) + warn "Неверный выбор" + return 1 + ;; + esac + + # Настройка Nginx для selfsteal + if [ "$REVERSE_PROXY" = "nginx" ]; then + cat > /etc/nginx/sites-available/selfsteal < /dev/null; then + log "QR-код для быстрого подключения:" + qrencode -t ansiutf8 "tg://proxy?server=${SERVER_IP}&port=${MTPROXY_PORT}&secret=${SECRET}" + fi +} + +regenerate_secret() { + check_installed + + warn "Это изменит секрет и все текущие подключения будут разорваны!" + read -p "Продолжить? (y/N): " confirm + + if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then + log "Отменено" + return 0 + fi + + NEW_SECRET=$(head -c 16 /dev/urandom | xxd -ps) + + # Обновляем конфигурацию + sed -i "s/SECRET=.*/SECRET=$NEW_SECRET/" "$MTPROXY_DIR/.config" + + # Перезапускаем сервис + systemctl restart mtproxy + + success "Новый секрет сгенерирован: $NEW_SECRET" + get_connection_link +} + +change_port() { + check_installed + + read -p "Введите новый порт: " NEW_PORT + + if [ -z "$NEW_PORT" ]; then + error "Порт не может быть пустым" + return 1 + fi + + # Проверяем, что порт свободен + if ss -ltun | grep -q ":$NEW_PORT "; then + error "Порт $NEW_PORT уже используется" + return 1 + fi + + # Обновляем конфигурацию + sed -i "s/MTPROXY_PORT=.*/MTPROXY_PORT=$NEW_PORT/" "$MTPROXY_DIR/.config" + + # Обновляем systemd сервис + source "$MTPROXY_DIR/.config" + + cat > /etc/systemd/system/mtproxy.service </dev/null + ufw allow $NEW_PORT/tcp 2>/dev/null + + success "Порт изменен на $NEW_PORT" + get_connection_link +} + +update_config() { + check_installed + + log "Обновление конфигурации Telegram..." + + cd "$MTPROXY_DIR" + curl -s https://core.telegram.org/getProxySecret -o proxy-secret + curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf + + systemctl restart mtproxy + + success "Конфигурация обновлена" +} + +show_stats() { + check_installed + + echo "" + log "Статистика MTProxy:" + echo "" + + # Статус сервиса + if systemctl is-active --quiet mtproxy; then + echo -e "${GREEN}Статус: Работает${NC}" + else + echo -e "${RED}Статус: Остановлен${NC}" + fi + + # Использование ресурсов + echo "" + log "Использование ресурсов:" + ps aux | grep mtproto-proxy | grep -v grep | awk '{printf "CPU: %s%% | RAM: %s MB\n", $3, $6/1024}' + + # Количество подключений + echo "" + log "Активные подключения:" + ss -tn | grep -c ":$(source $MTPROXY_DIR/.config && echo $MTPROXY_PORT) " || echo "0" + + echo "" +} + +show_logs() { + check_installed + + echo "" + log "Последние 50 строк логов:" + echo "" + journalctl -u mtproxy -n 50 --no-pager + echo "" + read -p "Нажмите Enter для продолжения..." +} + +uninstall_mtproxy() { + check_installed + + warn "Это полностью удалит MTProxy!" + read -p "Продолжить? (y/N): " confirm + + if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then + log "Отменено" + return 0 + fi + + # Остановка и удаление сервиса + systemctl stop mtproxy + systemctl disable mtproxy + rm -f /etc/systemd/system/mtproxy.service + systemctl daemon-reload + + # Удаление файлов + rm -rf "$MTPROXY_DIR" + + # Удаление правила firewall + source "$MTPROXY_DIR/.config" 2>/dev/null + ufw delete allow $MTPROXY_PORT/tcp 2>/dev/null + + success "MTProxy удален" + exit 0 +} + +main_menu() { + while true; do + clear + echo -e "${BLUE}╔════════════════════════════════════════╗${NC}" + echo -e "${BLUE}║ MTProxy Management ║${NC}" + echo -e "${BLUE}╚════════════════════════════════════════╝${NC}" + echo "" + echo -e "${YELLOW}1.${NC} Показать ссылку подключения" + echo -e "${YELLOW}2.${NC} Сгенерировать новый секрет" + echo -e "${YELLOW}3.${NC} Изменить порт" + echo -e "${YELLOW}4.${NC} Обновить конфигурацию Telegram" + echo -e "${YELLOW}5.${NC} Показать статистику" + echo -e "${YELLOW}6.${NC} Показать логи" + echo -e "${YELLOW}7.${NC} Перезапустить сервис" + echo -e "${YELLOW}8.${NC} Удалить MTProxy" + echo -e "${YELLOW}0.${NC} Выход" + echo "" + read -p "Выберите опцию: " choice + + case $choice in + 1) + get_connection_link + read -p "Нажмите Enter..." + ;; + 2) + regenerate_secret + read -p "Нажмите Enter..." + ;; + 3) + change_port + read -p "Нажмите Enter..." + ;; + 4) + update_config + read -p "Нажмите Enter..." + ;; + 5) + show_stats + read -p "Нажмите Enter..." + ;; + 6) + show_logs + ;; + 7) + systemctl restart mtproxy + success "MTProxy перезапущен" + sleep 2 + ;; + 8) + uninstall_mtproxy + ;; + 0) + log "Выход" + exit 0 + ;; + *) + warn "Неверный выбор" + sleep 1 + ;; + esac + done +} + +# Check root +if [[ $EUID -ne 0 ]]; then + error "Этот скрипт должен быть запущен с правами root" + exit 1 +fi + +main_menu