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