2026-03-28 08:49:34 +07:00

262 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Initializator
Набор скриптов для быстрой настройки нового VPS-сервера с нуля: файрвол, веб-сервер, SSL и VPN.
## Требования
- Ubuntu / Debian
- root-доступ
## Быстрый старт
```bash
git clone <repo> && cd initializator
```
### 1. Базовая настройка
```bash
sudo bash common.sh # UFW-файрвол (deny incoming, allow SSH)
sudo bash nginx.sh # Nginx + правила UFW
sudo bash certbot.sh # Certbot для SSL-сертификатов
```
### 2. Сервисы
| | `vless.sh` | `vless_ip.sh` | `mtp.sh` |
|---|---|---|---|
| Назначение | VLESS VPN | VLESS VPN | MTProto Proxy (Telegram) |
| Подключение | По домену | По IP-адресу | По домену |
| Транспорт | WebSocket | TCP | TCP (fake-TLS) |
| Шифрование | TLS (Let's Encrypt) | Reality (XTLS) | Fake-TLS |
| Nginx | Нужен (проксирует WS) | Не нужен | Stream SNI routing |
| Маскировка | Обычный HTTPS-сайт | TLS-хендшейк с реальным сайтом | TLS-хендшейк с заданным доменом |
## Скрипты
### `common.sh`
Устанавливает и настраивает UFW:
- deny incoming / allow outgoing
- Открывает порт 22 (SSH)
### `nginx.sh`
- Устанавливает Nginx (если не установлен)
- Включает автозапуск
- Открывает порты 80/443 в UFW
### `certbot.sh`
- Устанавливает Certbot + плагин для Nginx
### `vless.sh` — VLESS + WebSocket + TLS (по домену)
Поднимает Xray-core за Nginx с WebSocket-транспортом и настоящим TLS-сертификатом.
**Переменные `.env`:**
```env
DOMAIN=example.com
VLESS_WS_PATH=stream
PORT=10001
```
**Что делает:**
1. Скачивает Xray-core с GitHub в `~/services/vless`
2. Генерирует UUID, создаёт `config.json`
3. Создаёт systemd-сервис `xray-vless`
4. Получает SSL-сертификат через Certbot (webroot)
5. Настраивает Nginx: HTTP -> HTTPS редирект, WebSocket-прокси
6. Выводит строку подключения
**Архитектура:**
```
Клиент -> :443 (Nginx, TLS) -> WS /$VLESS_WS_PATH -> :$PORT (Xray) -> интернет
```
**Строка подключения:**
```
vless://UUID@DOMAIN:443?encryption=none&security=tls&sni=DOMAIN&type=ws&path=%2FPATH#Fish-VLESS
```
**Запуск:**
```bash
sudo bash vless.sh
```
---
### `vless_ip.sh` — VLESS + Reality (по IP)
Поднимает Xray-core напрямую на порту 443 с протоколом Reality. Nginx не нужен — Xray сам обрабатывает TLS, маскируясь под реальный сайт.
**Переменные `.env`:**
```env
SERVER_IP=45.146.202.107
```
**Что делает:**
1. Скачивает Xray-core с GitHub в `~/services/vless_ip`
2. Генерирует UUID + x25519 keypair + short ID
3. Создаёт `config.json` с Reality
4. Создаёт systemd-сервис `xray-vless-ip`
5. Открывает порт 443 в UFW
6. Выводит строку подключения
**Архитектура:**
```
Клиент -> :443 (Xray, Reality/XTLS) -> интернет
|
└─ TLS fingerprint = www.kuper.ru (маскировка)
```
**Строка подключения:**
```
vless://UUID@IP:443?encryption=none&security=reality&sni=www.kuper.ru&fp=chrome&pbk=PUBLIC_KEY&sid=SHORT_ID&type=tcp&flow=xtls-rprx-vision#VLESS-Reality
```
**Запуск:**
```bash
sudo bash vless_ip.sh
```
---
### `mtp.sh` — MTProto Proxy для Telegram (по домену)
Поднимает официальный MTProto Proxy (TelegramMessenger/MTProxy) с fake-TLS и nginx stream SNI routing. Все сервисы (VLESS, MTProxy, сайты) работают на одном порту 443.
**Переменные `.env`:**
```env
MTP_DOMAIN=mtp.example.com
MTP_PORT=10002
```
**Что делает:**
1. Собирает MTProxy из исходников (C, GitHub)
2. Генерирует секрет, скачивает конфиг от Telegram
3. Создаёт systemd-сервис `mtproxy`
4. Устанавливает `libnginx-mod-stream`
5. Добавляет stream-блок в nginx для SNI-роутинга на порту 443
6. Патчит существующие HTTPS-сайты: `listen 443` -> `listen 8443`
7. Выводит ссылку для клиента и данные для MTProxy Admin Bot
**Архитектура (после установки):**
```
:443 (nginx stream, ssl_preread)
|
+-- SNI = mtp.example.com --> :10002 (MTProxy, fake-TLS)
+-- SNI = * (default) --> :8443 (nginx http, TLS termination)
|
+-- WS /path --> :10001 (Xray VLESS)
+-- / --> /var/www (static)
```
**Ссылка для клиента:**
```
tg://proxy?server=MTP_DOMAIN&port=443&secret=ee<SECRET><DOMAIN_HEX>
```
**Для MTProxy Admin Bot:** `MTP_DOMAIN:443`
**Запуск:**
```bash
sudo bash mtp.sh
```
> **Важно:** `mtp.sh` перестраивает nginx — все HTTPS-сайты переезжают на внутренний порт 8443, а порт 443 занимает stream-модуль для SNI-маршрутизации. Если `vless.sh` запускается после `mtp.sh`, он автоматически использует 8443.
---
## Файл `.env`
Создай `initializator/.env` перед запуском скриптов:
```env
# Для vless.sh (доменный вариант)
DOMAIN=example.com
VLESS_WS_PATH=stream
PORT=10001
# Для vless_ip.sh (IP вариант)
SERVER_IP=45.146.202.107
# Для mtp.sh (MTProto Proxy)
MTP_DOMAIN=mtp.example.com
MTP_PORT=10002
```
## Управление сервисами
```bash
# Статус
systemctl status xray-vless # VLESS (домен)
systemctl status xray-vless-ip # VLESS (IP)
systemctl status mtproxy # MTProto Proxy
# Перезапуск
systemctl restart xray-vless
systemctl restart xray-vless-ip
systemctl restart mtproxy
# Логи
journalctl -u xray-vless -f
journalctl -u xray-vless-ip -f
journalctl -u mtproxy -f
```
## Структура файлов на сервере
```
~/services/
├── vless/ # VLESS по домену
│ ├── xray
│ ├── config.json
│ └── connection.txt
├── vless_ip/ # VLESS по IP
│ ├── xray
│ ├── config.json
│ └── connection.txt
└── mtp/ # MTProto Proxy
├── mtproto-proxy # бинарник (собран из C)
├── proxy-secret # секрет от Telegram
├── proxy-multi.conf # конфиг от Telegram (обновляется при старте)
├── secret.txt # клиентский секрет
└── connection.txt # ссылки для подключения
/etc/systemd/system/
├── xray-vless.service
├── xray-vless-ip.service
└── mtproxy.service
/etc/nginx/
├── nginx.conf # содержит stream {} блок (после mtp.sh)
└── sites-available/
└── vless-$DOMAIN # listen 8443 (после mtp.sh)
```
## Клиенты
**VLESS** (v2rayNG, Nekoray, Streisand, V2Box и др.):
- Импорт по ссылке `vless://...`
**MTProto Proxy** (встроен в Telegram):
- Импорт по ссылке `tg://proxy?...` или `https://t.me/proxy?...`
- Настройки -> Данные и хранилище -> Прокси -> Добавить прокси