diff --git a/install.sh b/install.sh index cec726e..b346f57 100755 --- a/install.sh +++ b/install.sh @@ -228,8 +228,8 @@ install_stealth_mode() { ensure_deps install_telemt_full || return - # Конфиг telemt: слушает 443, маскировка на локальный nginx - generate_telemt_toml "$raw_secret" "443" "stealth" "127.0.0.1" "$nginx_internal_port" + # Конфиг telemt: слушает 443, маскировка на локальный nginx через dns_override + generate_telemt_toml "$raw_secret" "443" "stealth" "$user_domain" "$nginx_internal_port" # Настройка сайта (nginx на внутреннем порту + certbot + шаблон) setup_stealth_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return diff --git a/lib/telemt.sh b/lib/telemt.sh index 23c4f8e..938759f 100644 --- a/lib/telemt.sh +++ b/lib/telemt.sh @@ -174,9 +174,8 @@ LimitNOFILE=65535 # Безопасность NoNewPrivileges=true -ProtectSystem=strict +ProtectSystem=full ProtectHome=true -ReadWritePaths=/etc/telemt /var/log PrivateTmp=true [Install] diff --git a/lib/telemt_config.sh b/lib/telemt_config.sh index 81f803b..16ba023 100644 --- a/lib/telemt_config.sh +++ b/lib/telemt_config.sh @@ -25,52 +25,49 @@ QUICK_DOMAINS=( "zoom.us" ) -# ── Генерация TOML конфига ─────────────────────────────────────────────────── +# ── Генерация TOML конфига (telemt v3 формат) ─────────────────────────────── generate_telemt_toml() { local secret="$1" local port="${2:-443}" local mask_mode="${3:-quick}" # quick | stealth - local mask_host="${4:-google.com}" + local mask_domain="${4:-google.com}" local mask_port="${5:-443}" local output="${6:-$TELEMT_CONFIG}" mkdir -p "$(dirname "$output")" - # telemt всегда слушает на 0.0.0.0 (внешний трафик) - # В stealth-режиме: telemt на 0.0.0.0:443, nginx на 127.0.0.1:8443 (внутренний) - # В quick-режиме: telemt на 0.0.0.0:443, без nginx - local bind_addr="0.0.0.0" + # DNS override для stealth: домен резолвится в 127.0.0.1 + # чтобы mask-трафик шёл на локальный nginx, а не в интернет + local dns_line="" + if [ "$mask_mode" = "stealth" ]; then + dns_line="dns_overrides = [\"${mask_domain}:${mask_port}:127.0.0.1\"]" + fi cat > "$output" << EOTOML -# GoTelegram v${GOTELEGRAM_VERSION} — telemt configuration +# GoTelegram v${GOTELEGRAM_VERSION} — telemt v3 configuration # Сгенерировано: $(date -Iseconds) # Режим: ${mask_mode} -# ── Основные настройки ─────────────────────────────────────────────────────── -[stats] - statsd_address = "" +[server] +port = ${port} +listen_addr_ipv4 = "0.0.0.0" -# ── Секреты ────────────────────────────────────────────────────────────────── -[[users]] - name = "main" - secret = "${secret}" +[censorship] +tls_domain = "${mask_domain}" +mask = true +mask_port = ${mask_port} +tls_emulation = $([ "$mask_mode" = "stealth" ] && echo "false" || echo "true") -# ── Привязка ───────────────────────────────────────────────────────────────── -[listen] - # quick: 0.0.0.0 (клиенты напрямую) | stealth: 127.0.0.1 (только через nginx) - bind_to = "${bind_addr}:${port}" - -# ── TLS маскировка ─────────────────────────────────────────────────────────── -[security] - # Маскировочный хост — куда перенаправлять неопознанные подключения - # quick: внешний сайт | stealth: локальный nginx - host = "${mask_host}:${mask_port}" +[access.users] +main = "${secret}" +[network] +${dns_line} EOTOML chmod 600 "$output" log_success "Конфиг telemt записан: $output" - log_dim "Режим: $mask_mode, маскировка: $mask_host:$mask_port" + log_dim "Режим: $mask_mode, домен: $mask_domain, порт mask: $mask_port" } # ── Добавление дополнительного секрета ─────────────────────────────────────── @@ -95,7 +92,7 @@ EOSECRET log_success "Добавлен секрет: $name" } -# ── Чтение текущего конфига ────────────────────────────────────────────────── +# ── Чтение текущего конфига (telemt v3 формат) ────────────────────────────── get_config_value() { local key="$1" local config="${2:-$TELEMT_CONFIG}" @@ -104,13 +101,19 @@ get_config_value() { case "$key" in secret) - grep -m1 'secret\s*=' "$config" | sed 's/.*=\s*"\(.*\)"/\1/' | tr -d ' ' + # [access.users] main = "..." + grep -A5 '\[access.users\]' "$config" | grep -m1 '=' | sed 's/.*=\s*"\(.*\)"/\1/' | tr -d ' ' ;; port) - grep 'bind_to\s*=' "$config" | sed 's/.*:\([0-9]*\)".*/\1/' + # [server] port = 443 + grep -A5 '\[server\]' "$config" | grep 'port\s*=' | head -1 | sed 's/.*=\s*\([0-9]*\)/\1/' | tr -d ' ' ;; - mask_host) - grep -A10 '\[security\]' "$config" | grep 'host\s*=' | sed 's/.*=\s*"\(.*\)".*/\1/' + mask_host|tls_domain) + # [censorship] tls_domain = "..." + grep -A10 '\[censorship\]' "$config" | grep 'tls_domain\s*=' | sed 's/.*=\s*"\(.*\)"/\1/' + ;; + mask_port) + grep -A10 '\[censorship\]' "$config" | grep 'mask_port\s*=' | sed 's/.*=\s*\([0-9]*\)/\1/' | tr -d ' ' ;; *) grep "$key" "$config" | head -1 | sed 's/.*=\s*"\?\(.*\)"\?/\1/' | tr -d ' "' @@ -151,7 +154,7 @@ validate_telemt_config() { fi if [ -z "$host" ]; then - log_error "Не задан маскировочный хост (security.host)" + log_error "Не задан маскировочный хост (censorship.tls_domain)" ((errors++)) fi