TGViewer
Purple Team Diary's Purple Team Diary's @purple_team_diary · 482 subscribers
Post #281 120
Web-Proxy от официальных разработчиков Telegram (Часть 1)

Телеграм научился притворяться обычным сайтом. Для этого он использует HTTPS как внешний транспорт, а внутри relay передаёт Telegram-трафик в обычный MTProxy.
Давайте настроим :)

1. Регистрируем домен и связываем с сервером: https://proxy.example.com
2. Получаем исходный код:

cd /opt 
git clone https://github.com/telegramdesktop/tproxy-server.git
cd /opt/tproxy-server


3. Создаём обычный публичный сайт

Создаём:

mkdir -p /opt/tproxy-site

nano /opt/tproxy-site/index.html


Содержимое:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>


Проверяем:

ls -la /opt/tproxy-site


Обязателен читаемый index.html. Официальный installer сам скопирует сайт в /srv/tproxy-site и выставит владельца root:root.

4. Определяем параметры установки:

HOSTNAME="proxy.example.com"
EMAIL="admin@example.com"
BASE_PATH="krztwamxs6qzpmjs" (если не зафиксировать то старые клиентские ссылки непригодными для нового адреса)


5. Генерируем MTProxy secret

Для новой установки сгенерировать новый секрет:

openssl rand -hex 16


Получим строку вида:

0123456789abcdef0123456789abcdef

6. Исправляем проблему install.sh с umask

На текущем у меня возникла проблема с upstream install.sh где используется:

umask 077


Из-за этого тест конфигурации может некорректно создать файл с правами 0400 вместо ожидаемых 0444, и установка завершается на:

TestLoadAcceptsSystemdCredentialReadPermissions

Такая проблема всё ещё присутствует в текущем upstream issue/PR.

Перед установкой создаём резервную копию:

cp deploy/install.sh deploy/install.sh.backup
cp deploy/install-mtproxy.sh deploy/install-mtproxy.sh.backup
cp internal/config/config_test.go internal/config/config_test.go.backup


Исправляем тест:

python3 - <<'PY'
from pathlib import Path

p = Path("internal/config/config_test.go")
s = p.read_text()

needle = 'if err := os.WriteFile(profiles, []byte(content), 0444); err != nil {'

pos = s.find(needle)
if pos == -1:
raise SystemExit("Не найден os.WriteFile(..., 0444)")

end = s.find("\n\t}", pos)
if end == -1:
raise SystemExit("Не найден конец блока os.WriteFile")

insert_pos = end + len("\n\t}")

insert = '''
\tif err := os.Chmod(profiles, 0444); err != nil {
\t\tt.Fatal(err)
\t}'''

if "os.Chmod(profiles, 0444)" in s:
print("Chmod уже присутствует — ничего менять не нужно")
else:
s = s[:insert_pos] + insert + s[insert_pos:]
p.write_text(s)
print("config_test.go исправлен")
PY


Форматируем:

gofmt -w internal/config/config_test.go


Проверяем:

grep -n -A8 -B3 "os.Chmod(profiles, 0444)" \
internal/config/config_test.go


7. Запускаем официальный installer

Секрет установщик запросит интерактивно:

sudo ./deploy/install.sh \
--hostname "$HOSTNAME" \
--email "$EMAIL" \
--base-path "$BASE_PATH" \
--site-dir /opt/tproxy-site


После запуска появится:

WEB proxy secret (32 hex, optionally prefixed with dd):

Вставляем ранее сгенерированный:

<MTProxy_SECRET>

#network #proxy #telegram
  • 🔥 4
  • 👏 3
  • ❤ 2
More from @purple_team_diary
  1. Oct 1, 2026CVE-2026-102831 CVSS 3.1: 8.1/10 · высокий уровень Пакеты: jupyterlab, notebook Исправлено…
  2. Sep 30, 2026CVE-2026-59090 CVSS 3.1: 8.4/10 · высокий уровень Продукты: Red Hat Enterprise Linux 9, Re…
  3. Sep 30, 2026epi052/feroxbuster 8093 звёзд · Rust · MIT · обновлён 05.09.2026 Описание: feroxbuster — р…
  4. Sep 30, 2026CVE-2025-71408 CVSS 4.0: 8.5/10 · высокий уровень Продукты: ntlk, nltk nltk Класс проблемы…
  5. Sep 30, 2026CVE-2026-88060 CVSS 4.0: 8.6/10 · высокий уровень Продукты: angular Класс проблемы: CWE-79…
  6. Sep 30, 2026CVE-2026-77262 CVSS 3.1: 8.6/10 · высокий уровень Продукты: sooperset mcp-atlassian Класс…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →