Enhance backup documentation for Proxmox and VPS configurations. Add details for MTProto proxy setup on VPS, clarify backup processes for Immich photos, and update restic backup scripts to exclude photo directories. Include test recovery results and refine instructions for restoring various services and configurations.

This commit is contained in:
2026-02-26 23:06:02 +03:00
parent feaa31f702
commit 56cee83198
10 changed files with 727 additions and 20 deletions

View File

@@ -0,0 +1,112 @@
# Отчёт проверки 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). Маскировка настроена корректно.