#!/bin/bash # MTProxy Manager # Author: houseassassin set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' log() { echo -e "${GREEN}[INFO]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; } success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } MTPROXY_DIR="/opt/MTProxy" get_server_ip() { curl -s -4 ifconfig.me || curl -s -4 api.ipify.org || curl -s -4 ipinfo.io/ip } validate_port() { local port=$1 if ! [[ "$port" =~ ^[0-9]+$ ]] || [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then return 1 fi return 0 } check_installed() { if [ ! -d "$MTPROXY_DIR" ]; then error "MTProxy не установлен" exit 1 fi } get_connection_link() { if [ ! -f "$MTPROXY_DIR/.config" ]; then error "Конфигурация не найдена" return 1 fi source "$MTPROXY_DIR/.config" SERVER_IP=$(get_server_ip) 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}" echo "" # QR код if command -v qrencode &> /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 source "$MTPROXY_DIR/.config" NEW_SECRET=$(head -c 16 /dev/urandom | xxd -ps) # Обновляем конфигурацию sed -i "s/SECRET=.*/SECRET=$NEW_SECRET/" "$MTPROXY_DIR/.config" cat > /etc/systemd/system/mtproxy.service < /etc/systemd/system/mtproxy.service </dev/null 2>&1; then ufw delete allow $old_port/tcp 2>/dev/null || true ufw allow $NEW_PORT/tcp 2>/dev/null || true elif command -v firewall-cmd >/dev/null 2>&1; then firewall-cmd --permanent --remove-port="${old_port}/tcp" >/dev/null 2>&1 || true firewall-cmd --permanent --add-port="${NEW_PORT}/tcp" >/dev/null 2>&1 || true firewall-cmd --reload >/dev/null 2>&1 || true fi 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 ":$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 source "$MTPROXY_DIR/.config" 2>/dev/null || true local mtproxy_port="${MTPROXY_PORT:-}" # Остановка и удаление сервиса systemctl stop mtproxy systemctl disable mtproxy rm -f /etc/systemd/system/mtproxy.service systemctl daemon-reload # Удаление файлов rm -rf "$MTPROXY_DIR" # Удаление правила firewall if [ -n "$mtproxy_port" ] && command -v ufw >/dev/null 2>&1; then ufw delete allow $mtproxy_port/tcp 2>/dev/null || true elif [ -n "$mtproxy_port" ] && command -v firewall-cmd >/dev/null 2>&1; then firewall-cmd --permanent --remove-port="${mtproxy_port}/tcp" >/dev/null 2>&1 || true firewall-cmd --reload >/dev/null 2>&1 || true fi 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 source "$MTPROXY_DIR/.config"