commit 2dbf28e1eaaea5339edad9e72b08efdbbed4f530 Author: AlexChard Date: Sat Aug 29 13:06:15 2026 +0400 Initial project files diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..98d1337 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +PROXY_DOMAIN=gg.chardwork.ru +ACME_EMAIL=admin@example.com +CADDY_CONTAINER=adguard-caddy +CADDY_STACK_DIR=/opt/stacks/adguard-dns diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fd8c688 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +* text=auto +*.sh text eol=lf +*.py text eol=lf +*.html text eol=lf +*.css text eol=lf +*.svg text eol=lf +*.md text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58af94e --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.env +*.secret +*.key +*.pem +credentials/ +backups/ +dist/ +.DS_Store +Thumbs.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..efa3fcd --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# Telegram WEB Proxy for a shared Docker-Caddy VPS + +Однокомандная установка экспериментального Telegram WEB Proxy с закрытой минимальной панелью и нейтральным сайтом-заглушкой. Проект рассчитан на сервер, где публичные `80/443` уже обслуживает Caddy в Docker и на тех же портах нельзя запускать второй reverse proxy. + +Целевая конфигурация этого репозитория: + +- домен WEB Proxy: `gg.chardwork.ru`; +- существующий Caddy-контейнер: `adguard-caddy`; +- Caddyfile: `/opt/stacks/adguard-dns/Caddyfile`; +- существующий DoH: `dns.chardwork.ru`; +- панель доступна по случайному пути и защищена логином и паролем; +- главная страница выглядит как нейтральный визуальный журнал **Gradient Garden**. + +## Что устанавливается + +- официальный `telegramdesktop/tproxy-server` из зафиксированного commit; +- локальный MTProxy backend; +- `WEB PANEL PROXY v2.0.2` из архива с проверкой SHA-256; +- отдельные secrets и QR-коды для пользователей; +- статический сайт без аналитики, внешних шрифтов и стороннего JavaScript; +- приватные мосты между Docker-Caddy и сервисами на localhost; +- лимиты памяти и CPU для новых служб; +- резервная копия Caddyfile перед изменением. + +Установщик **не создаёт второй Caddy** и не публикует внутренние порты `2398`, `8080`, `8081` и `8090` в интернет. + +## Требования + +- Ubuntu 22.04+ или Debian 12+ `x86_64`; +- Docker и работающий Caddy-контейнер; +- существующий Caddyfile, смонтированный в контейнер как `/etc/caddy/Caddyfile`; +- свободные локальные порты `2398`, `8080`, `8081`, `8090`, `18080`, `18090`; +- A-запись домена на IPv4 VPS; +- минимум 1 ГБ RAM, комфортнее 2 ГБ RAM. + +Перед запуском DNS-запись `gg.chardwork.ru` должна указывать на VPS. CDN или проксирование DNS-провайдера включать не нужно. + +## Установка одной командой + +```bash +curl -fsSL https://git.chardb.ru/AlexChard/telegram-web-proxy/raw/branch/main/install-shared-vps.sh -o /tmp/install-telegram-web-proxy.sh && sudo bash /tmp/install-telegram-web-proxy.sh --domain gg.chardwork.ru --email YOUR_EMAIL +``` + +Скрипт запросит логин и пароль панели через терминал. Пароль не передаётся в аргументах и не сохраняется в shell history. + +После установки адрес панели, основной secret и готовая Telegram-ссылка сохраняются на VPS: + +```text +/root/telegram-web-proxy-access.txt +``` + +Файл доступен только `root`. + +## Пользователи и ссылки + +Один secret технически можно использовать на нескольких устройствах и раздать нескольким людям. Практичнее создавать в панели отдельный профиль каждому человеку: тогда доступ можно отозвать точечно, не меняя ссылки остальных. + +Панель формирует ссылки вида: + +```text +tg://webproxy?server=gg.chardwork.ru&port=443&secret=SECRET +``` + +WEB Proxy предназначен прежде всего для поддерживаемых версий Telegram Desktop. Это экспериментальная технология, а не VPN для всего устройства. + +## Где хранятся данные + +В Git находятся только исходники, шаблоны и публичный сайт. На VPS, вне репозитория, остаются: + +- `/etc/web-proxy-panel/` — настройки установки и основной secret; +- `/var/lib/tproxy-panel/` — база панели и пользователи; +- `/etc/tproxy-server/` — конфигурация relay и профили; +- `/root/telegram-web-proxy-access.txt` — приватная памятка владельца; +- `/opt/backups/telegram-web-proxy/` — резервные копии перед установкой. + +Не добавляйте эти каталоги и файлы в Git без предварительного удаления секретов. + +## Проверка + +```bash +systemctl status mtproxy tproxy-server tproxy-panel --no-pager +systemctl status tproxy-caddy-relay-bridge tproxy-caddy-panel-bridge --no-pager +curl -fsS http://127.0.0.1:8081/healthz +curl -fsS http://127.0.0.1:8081/readyz +curl -I https://gg.chardwork.ru/ +curl -o /dev/null -w '%{http_code}\n' 'https://dns.chardwork.ru/dns-query?dns=AAABAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE' +``` + +Последняя команда должна вернуть `200`: это подтверждает, что существующий DoH продолжает работать. + +## Безопасность + +- Панель не публикуется отдельным портом — она доступна только через HTTPS и случайный URL. +- Путь панели не заменяет хороший пароль. +- Secrets создаются на VPS и не входят в репозиторий. +- Загруженный upstream-архив проверяется по SHA-256. +- Статические файлы сайта также проверяются по SHA-256. +- При ошибке до завершения установки предыдущий Caddyfile автоматически восстанавливается. + +## Происхождение компонентов + +- [Telegram Desktop tproxy-server](https://github.com/telegramdesktop/tproxy-server) +- [WEB PANEL PROXY](https://github.com/POLESNIESOVETI12/web-panel-proxy) + +Соблюдайте условия лицензий upstream-проектов и применимое законодательство вашего региона. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..8ef9ca8 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,16 @@ +# Security policy + +## Что нельзя публиковать + +Не создавайте issue, commit или pull request, содержащий: + +- secrets и готовые ссылки подключения; +- пароль панели; +- содержимое `/var/lib/tproxy-panel`; +- приватные ключи SSH или TLS; +- cookies, токены Gitea и экспортированные браузерные сессии; +- полные серверные резервные копии. + +## Отчёт об уязвимости + +Если проблема раскрывает secret или позволяет обходить авторизацию панели, не публикуйте эксплуатационные данные в открытом issue. Сначала отзовите затронутый secret и смените пароль панели.