# Отчёт проверки MTProto + маскировка (katykhin.store) Проверки выполнены **с внешней консоли** (без SSH на сервер) 2026-02-26. Цель: убедиться, что на 443 выглядит как обычный HTTPS, а MTProto срабатывает только при наличии секрета. --- ## 1) HTTPS сайта **Команда:** `curl -I https://katykhin.store/` **Результат:** - **HTTP/1.1 200 OK** - Server: nginx/1.24.0 (Ubuntu) - Content-Type: text/html **Вывод:** Сайт отдаётся по **HTTPS**, не по HTTP. Маскировка по TLS выполнена. --- ## 2) Порт 443 и TLS ### Порт 443 открыт **Команда:** `nc -vz katykhin.store 443` **Результат:** `Connection to katykhin.store port 443 [tcp/https] succeeded!` ### TLS-рукопожатие и сертификат **Команда:** `openssl s_client -connect katykhin.store:443 -servername katykhin.store` **Результат:** - **Verification: OK** - **Сертификат:** Let's Encrypt (E8), CN=katykhin.store - **Срок:** NotBefore 26 Feb 2026, NotAfter 27 May 2026 - **Протокол:** TLSv1.3, Cipher TLS_AES_256_GCM_SHA384 - **SAN:** host "katykhin.store" в сертификате **Вывод:** Внешний вид — обычный HTTPS с валидным доверенным сертификатом, без самоподписи. --- ## 3) Однострочная проверка **Команда:** `curl -Iv https://katykhin.store/` **Результат:** - TLS handshake успешен - Сертификат проверен (SSL certificate verify ok) - **HTTP/1.1 200 OK** - subject: CN=katykhin.store, issuer: Let's Encrypt **Вывод:** Важнейшая часть маскировки выполнена: **katykhin.store:443 = обычный HTTPS**. --- ## 4) Поведение при «не-TLS» подключении к 443 ### Сырой TCP без данных **Команда:** подключение к 443 без отправки данных (nc без ввода). **Результат:** Ответа нет (сервер ждёт данные). mtg перенаправил соединение на nginx:993; nginx ждёт TLS ClientHello — логично. ### Plain HTTP на порт 443 **Команда:** отправка `GET / HTTP/1.0` на 443 (без TLS). **Результат:** Ответ от nginx: - **HTTP/1.1 400 Bad Request** - «The plain HTTP request was sent to HTTPS port» **Вывод:** На 443 приходит трафик без MTProto-секрета → mtg отдаёт его nginx (cloak). Nginx на 993 принимает только TLS, поэтому на plain HTTP отвечает 400. Для DPI/активной проверки, которые делают **нормальный TLS** (как браузер или `openssl s_client`), будет обычный HTTPS и страница сайта. Plain HTTP на 443 даёт только 400 от nginx, а не MTProto. --- ## 5) Итоговая таблица поведения | Подключение | Ожидание по плану | Факт | |--------------------------|--------------------------|-------------------------------| | Браузер / curl HTTPS | Сайт-заглушка, 200 | ✅ HTTP/1.1 200, nginx, TLS | | TLS (openssl s_client) | Валидный HTTPS | ✅ Let's Encrypt, TLS 1.3 | | Telegram с MTProto | Работа прокси | ✅ Подтверждено пользователем | | Plain HTTP на 443 | Не MTProto | ✅ 400 от nginx (HTTPS port) | | Соединение без данных | Нет «сырого» HTTP-ответа| ✅ Нет ответа (ожидание TLS) | --- ## 6) Что не проверялось из консоли (нужен сервер или устройство) - **Логи nginx** (access.log / error.log) — нужен SSH. - **Логи mtg** (принятые соединения с секретом) — нужен SSH. - **Проверка из РФ** (iPhone/устройство в целевой сети, без общего VPN, с MTProto) — нужно выполнить у тебя. - **Симуляция активного probing** уже по сути сделана: `openssl s_client` к 443 ведёт себя как обычный HTTPS-клиент и получает нормальный TLS и сайт. --- ## 7) Частые ошибки — статус | Риск | Статус | |-----------------------------|--------| | Сайт только по HTTP | ❌ Нет: HTTPS отвечает 200 | | Самоподписанный сертификат | ❌ Нет: Let's Encrypt | | MTProto на нестандартном порту | ❌ Нет: используется 443 | | Не-MTProto видит прокси | ❌ Нет: без секрета — nginx/сайт или 400 | --- ## Краткий вывод **Сеть видит katykhin.store:443 как обычный HTTPS** (валидный сертификат, TLS 1.3, ответ 200 на GET /). Только клиент с правильным MTProto-секретом попадает на прокси; остальное идёт в nginx (сайт или 400 на plain HTTP). Маскировка настроена корректно.