VPN·HUB·CRACK
Защита панели и доступов · VPN HUB CRACK
Защита панели и доступов
Защита панели и доступов
Угон панели (веб-центр управления сервисом: пользователи, подписки, ноды) равносилен угону всего сервиса: всех клиентов, нод, выдач. Поэтому панель прячут и закрывают в несколько слоёв.
📖 Незнакомые слова? Все термины простыми словами объяснены в Словаре терминов.
1. Не светить панель
- Сабдомен должен быть невзрачным/случайным, не
panel/admin/marzban(см. «Домены»). По очевидному имени сразу начинают перебор. - Адрес панели нигде не публикуется: не в подписке, не в боте, не в чате. Знаете только вы.
- Первый зарегистрировавшийся = суперадмин. Зарегистрируйтесь сразу после установки, пока никто не перехватил.
2. Reverse-proxy: basic-auth + IP-allowlist
Перед панелью стоит Caddy/nginx, который пускает только вас. Даже зная адрес, чужой упрётся в стену.
Caddy (/etc/caddy/Caddyfile):
a7f3.your.domain {
@allowed remote_ip 203.0.113.10 198.51.100.20 # ← ваши IP (дом/моб/офис)
handle @allowed {
basicauth { admin JDJhJDE0... } # хеш: caddy hash-password
reverse_proxy 127.0.0.1:3000
}
respond 403
}
caddy hash-password --plaintext 'ВАШ_ПАРОЛЬ' # вставить хеш в basicauth
systemctl reload caddy
nginx-аналог (фрагмент server-блока):
location / {
allow 203.0.113.10; allow 198.51.100.20; deny all; # IP-allowlist
auth_basic "restricted";
auth_basic_user_file /etc/nginx/.htpasswd; # htpasswd -c ...
proxy_pass http://127.0.0.1:3000;
}
Если IP динамический, оставьте basic-auth + сильный пароль, а allowlist замените на доступ через свой VPN/релей. Идеальный вариант: заходить в панель только из-под своей же ноды/туннеля.
3. Закрыть порты (ufw)
ufw default deny incoming
ufw allow 22/tcp # SSH
ufw allow 443/tcp # reverse-proxy/панель/ноды
ufw allow from PANEL_IP to any port 2222 proto tcp # NODE_PORT — только с IP панели
ufw --force enable
- Панель (
3000) и страница подписки (3010) слушают только127.0.0.1, наружу выходят через reverse-proxy. - NODE_PORT (2222) на нодах открыт только для IP панели, иначе любой постучится в ноду.
4. SSH по ключу, без пароля
ssh-keygen -t ed25519 -C "vpn-admin" # на своей машине, если ключа нет
ssh-copy-id root@SERVER_IP
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart ssh
5. fail2ban (перебор пароля/SSH)
apt -y install fail2ban
cat >/etc/fail2ban/jail.d/local.conf <<'EOF'
[sshd]
enabled = true
maxretry = 4
bantime = 1h
findtime = 10m
EOF
systemctl enable --now fail2ban
Для попыток подбора basic-auth можно добавить jail на лог nginx/Caddy (фильтр на 401/403).
6. Гигиена
- API-токены (для бота): минимально нужные, храните в
.env, ротируйте; утёк токен = доступ к выдаче подписок. - Swagger выключен в проде:
IS_DOCS_ENABLED=false(или под allowlist). - Обновляйте панель/ноды и систему (
apt upgrade), читайте changelog Remnawave. - Бэкап БД до любых правок (см. «Мониторинг и бэкап»): без него угон/сбой = потеря всех клиентов.
- 2FA на всё, где есть (почта домена, хостинг-аккаунты, регистратор): компрометация почты = угон домена.
Чек-лист
- [ ] Панель на невзрачном сабдомене, не светится.
- [ ] Reverse-proxy: basic-auth + IP-allowlist.
- [ ] Панель/подписка слушают только
127.0.0.1. - [ ] NODE_PORT открыт только для IP панели.
- [ ] SSH по ключу, пароль выключен, fail2ban.
- [ ] Swagger off, токены в
.env, регулярные бэкапы.
Связано: «Домены» (сабдомен панели), «Мониторинг и бэкап», «Чтобы не угнали» (базовый чек-лист хоста).