5.5 KiB
Отчёт проверки 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). Маскировка настроена корректно.