VPN·HUB·CRACK
Чек-лист безопасности сервиса · VPN HUB CRACK
Чек-лист безопасности сервиса
Безопасность сервиса
Безопасность VPN-бизнеса это три фронта: панель (веб-центр управления сервисом; угон = потеря всех клиентов), ноды (серверы, к которым подключаются клиенты; взлом/деанон), антиабуз (мультиаккаунты/слив = минус деньги). Пройдитесь по всему чек-листу.
📖 Незнакомые слова? Термины простыми словами смотрите в Словаре терминов.
1. Панель Remnawave
- Только localhost + reverse-proxy. Панель/БД/Redis/sub-page слушают
127.0.0.1. Наружу торчит только nginx/caddy с TLS (шифрование HTTPS, «замочек» в браузере). Никогда не публикуйте3000/6767/3010. - Зарегистрируйте супер-админа сразу после первого старта: первый регистрант становится админом. Окно «кто угодно может зарегистрироваться» = риск захвата.
- Сильные уникальные секреты:
JWT_AUTH_SECRET,JWT_API_TOKENS_SECRET(64 байта hex),POSTGRES_PASSWORD,METRICS_PASS: генерируйте черезopenssl rand. Никакихchange_me/postgres/admin. - Swagger выключен в проде:
IS_DOCS_ENABLED=false(или за авторизацией/allowlist). - Cloudflare перед панелью: ограничьте origin IP-адресами Cloudflare + секретный заголовок; либо Cloudflare Zero Trust / Tunnel (не светить публичный IP). Админ-путь держите в IP-allowlist на свои адреса.
- Метрики (
3001): basic-auth (METRICS_USER/PASS), не выносить в публичный proxy. - Любые правки секретов/
.envтребуютdown && up -d, а не restart.
2. Ноды
NODE_PORT(2222) должен быть доступен только с IP панели. Закройте порт ноды фаерволом для всех, кроме панели:
ufw default deny incoming
ufw allow 22/tcp
ufw allow 443/tcp # рабочий порт inbound
ufw allow from PANEL_IP to any port 2222 proto tcp
ufw --force enable
- Нода работает в
network_mode: host+cap_add: NET_ADMIN→ контролируете фаерволом хоста. - SSH только по ключу, fail2ban, BBR (см. «Инфраструктура»).
- Минимум на ноде: только Xray + (опц.) nginx для CDN. Ничего лишнего: меньше поверхность атаки.
- Не держите клиентские ключи на «расходных» входах, используйте каскад (тупой релей, подход B): вход ничего не расшифровывает.
2а. Маскировка: что реально прячет, а что косметика
Совет «поменяйте стандартные порты и переименуйте каталоги» ходит по чатам как защита. Работает он только против одного — автосканера, который ищет установку по сигнатуре. Против того, у кого уже есть доступ к серверу (хостер через консоль, снапшот диска, саппорт), не помогает вовсе: docker images покажет реальный образ remnawave/backend при любом имени контейнера, а процессы и миграции БД выдают продукт за секунды. Разделяйте два уровня и не путайте их.
Косметика (замедляет только поверхностный автоскан):
- Смена дефолтных портов: панель 3000, метрики 3001, sub-page 3010. По штатной установке они и так за 127.0.0.1 — сначала проверьте, что порт вообще не смотрит наружу (ss -tlnp), это важнее смены номера.
- Переименование /opt/remnawave, /opt/remnanode, имён контейнеров. Против человека с root — бесполезно, против скрипта — чуть тормозит.
Настоящие меры (снижают риск и от сканера, и от целевого анализа):
- Нода за selfsteal/Reality с валидным TLS и реальным доменом-донором — снимает главные внешние признаки (self-signed сертификат, отсутствие сайта). Разбор в «Self-steal с nginx».
- NODE_PORT (по умолчанию 2222) открыт только для IP панели. Это канал управления нода↔панель, снаружи ему делать нечего. Меняете порт — синхронно в .env ноды и в карточке ноды в панели, иначе связь отвалится.
- Панель не на публичном порту — Cloudflare Access или доступ только по SSH-туннелю без публичной DNS-записи (см. §1 выше). Помните: сертификат панели виден в Certificate Transparency (crt.sh), по нему поддомен находят и без сканирования — держите её на непримечательном домене отдельно от бренда.
- Панель и ноды — на разных IP. Панель самый палевный компонент: форма логина, JWT, характерный API опознаются массовым сканером мгновенно, и маскировки под сайт у неё нет. Один IP на панель и ноду = единая точка блокировки и утечки адресов всех нод разом.
- Чистый egress — не абузить, закрыть исходящий SMTP (см. «Чистый egress»): жалоба на спам валит сервер независимо от того, как названы каталоги.
Приоритет: выбор лояльного хостера и разделение ролей по IP → selfsteal без self-signed → панель не на публичном порту + firewall NODE_PORT → чистый egress → и только в самом низу смена портов и переименование каталогов.
3. Параметры Reality (от этого зависит, заметит ли DPI)
dest/serverNames(«донор» это чужой реальный сайт, под который Reality маскирует ноду): сайт с TLS 1.3 + HTTP/2, вне РФ/GFW, не за CDN, не редирект, не ваш. Желательно IP донора рядом с IP ноды. Wildcards*нельзя.- Для РФ берите популярные, которые РКН не станет блокировать «пачкой» (крупные SaaS). Не копируйте заезженные дефолты на все ноды.
shortId: hex, длина кратна 2, ≤16 символов. Пустой""пускает клиентов без shortId, поэтому используйте разные непустые shortId на тариф/клиента для отзыва доступа.fingerprint(uTLS): по умолчаниюfirefox(другой TLS-стек, реже под массовыми фильтрами);chromeне ставьте: самый палевный, и на части сборок нода с ним не стартует.randomized/randomподходят для ротации, но осторожно: нестабильный отпечаток сам по себе сигнал.flow: xtls-rprx-visionнужен на сервере и клиенте: без него внутренний HTTPS даёт детектируемый паттерн TLS-in-TLS.- Один SNI (имя сайта, видное в начале соединения ещё до шифрования) / донор + свой ключ Reality на ноду. Если заблокировали один SNI, умирает одна нода, не весь флот. Переиспользование одного SNI на всех = единая точка отказа и сигнал корреляции.
4. Hysteria2 / QUIC
- ⚠️ Опции ниже (
masquerade,obfs: salamander, port hopping) предназначены для standalone-демона Hysteria (config.yaml). В Remnawave Hysteria2 это xray-инбаунд (входная точка на ноде: протокол + порт)protocol: hysteria(см. «Профили подключений» §7), там этих YAML-полей нет. - Маскарад под реальный сайт (
masquerade: type proxy),obfs: salamanderесли QUIC фингерпринтят, port hopping (listen: :20000-50000): даже если один порт зарезали, сервис жив. - В РФ QUIC/UDP часто душат → держите Hysteria2 как быстрый второй транспорт, TCP Reality основной fallback.
5. Подписки
- Подписка защищена только неугадываемым shortUuid → поднимайте
SHORT_UUID_LENGTH(до 64) и держите sub-page на отдельном домене/сервере. - Отдавайте в подписке сырые IP (или DoH/DoT в клиенте): РКН спуфит DNS, домен можно отравить.
is_hiddenдля служебных/транспортных хостов: не светить лишнее в выдаче.
6. Антиабуз и деньги
- Лимит устройств (
hwidDeviceLimit=1): ограничивает массовое расшаривание, ноx-hwidподделывается — это учёт, не защита (см. «Абуз подписок»). - Антиабуз пробного периода: лимит триалов на устройство/номер, бан мультиаккаунтов (иначе бесконечные бесплатники).
- Лимит трафика на тариф (
trafficLimit): против майнеров/торрентов на вашем канале;bittorrent → blockв роутинге ноды. - Не теряйте деньги на инфраструктуре: удаляйте брошенные/лишние серверы при паузах и лимитах (классическая утечка: Timeweb/RUVDS оставляют включённые VPS, за них капает).
- Бэкапы БД панели и бота вне сервера, регулярно. Шифруйте бэкапы.
7. Гигиена секретов и доступов
- Токены/ключи/пароли держите только в
.env/секрет-хранилище, никогда в git/чат. - На доступ к панели по API заведите отдельный токен с минимальными правами; ротация при утечке.
- Логи доступа храните, но редактируйте секреты перед выводом/пересылкой.
- Разные пароли на разные серверы; менеджер паролей; 2FA где можно.
Быстрый аудит «всё ли закрыто»
- [ ] Панель не отвечает по публичному IP на 3000/6767/3010.
- [ ] Супер-админ создан, дефолтных секретов нет, Swagger выключен.
- [ ] На каждой ноде
2222открыт только для IP панели. - [ ] SSH по ключу, fail2ban, ufw на всех серверах.
- [ ] Свой SNI/ключ Reality на ноду,
flow=vision,fingerprint=firefox. - [ ] Подписка на отдельном домене, длинный shortUuid, в выдаче сырые IP.
- [ ] hwid-лимит, антиабуз триалов, лимит трафика,
bittorrent→block. - [ ] Бэкапы БД панели и бота вне сервера.
Дальше превращаем всё это в доход: бот, оплата, автоматизация (премиум).