Потребуются ПК на Windows с установленными WinSCP, PuTTY или Windows Terminal; чистый VDS/VPS с Ubuntu.
Настоятельно рекомендуется полностью ознакомиться с инструкцией прежде, чем будете делать изложенное. Есть два варианта действия – ручной и полуавтоматический.
- Подключаемся к серверу через SSH в WinSCP. Запускаем программу, вводим:
Имя хоста: IP-адрес вашего сервера, указанного в ЛК вашего хостера
Порт: 22 (по умолчанию)
Имя пользователя: root (или другой пользователь, согласно описанию приобретённой услуги в ЛК хостера) Пароль: пароль от вашего сервера, который находится на странице услуги
Нажимаем Войти. Во всплывающем окне с хэшем хостового ключа, ещё чем-либо – всё подтверждаем. Справа появится файловая система сервера. - Теперь, в верхнем тулбаре, выбираем кнопку Открыть сессию в PuTTY. Введите пароль от сервера, затем выполните
apt update && apt upgrade
. - Выполните
ufw status
– вывод должен быть inactive. - Придумайте или сгенерируйте случайное число от 1 до 65535 – это будет ваш новый порт подключения по SSH. Выше – лучше.
- Выполните
ufw allow [число порта для SSH]
. - В WinSCP перейдите по пути /etc/ssh/sshd_config, раскомментируйте строку
#Port 22
(т.е. удалите #) и замените число 22 на выбранное вами число. - Выполните команду
systemctl restart ssh && systemctl restart networking && ufw enable
. После этого сессия в WinSCP отвалится, потому что изменились данные подключения. Сессия в PuTTY останется живой. Теперь ваш порт подключения к серверу по SSH сменился на указанное вами число, соответственно, для повторных будущих подключений вписывайте новый порт (вместо стандартного 22). - Переавторизуемся в WinSCP и проходим по пути /etc/ufw и открываем Правкой (ПКМ → Правка) файл before.rules. Листаем до раздела последнего комментария и перед строкой COMMIT добавляем:
# drop GRCHC
-A ufw-before-input -s 185.224.228.0/22 -j DROP
-A ufw-before-input -s 195.209.120.0/22 -j DROP
-A ufw-before-input -s 212.192.156.0/22 -j DROP
-A ufw-before-input -s 194.165.22.0/24 -j DROP
-A ufw-before-input -s 194.165.23.0/24 -j DROP
-A ufw-before-input -s 195.209.122.0/22 -j DROP
-A ufw-before-input -s 185.224.231.0/24 -j DROP
-A ufw-before-input -s 185.224.230.0/24 -j DROP
-A ufw-before-input -s 185.224.229.0/24 -j DROP
-A ufw-before-input -s 212.192.158.0/24 -j DROP
Обязательно оставьте COMMIT
последней строкой! Сохраните файл.
8.1. Существует готовый скрипт блокировки ботов РКН с обновляемыми списками. Ознакомиться можно в профильном репозитории.
- Придумайте или сгенерируйте 5 новых случайных чисел от 1 до 65535 – они потребуются в качестве портов для настраиваемых протоколов и веб-панели Marzban.
Note
Итого, учитывая ранее добавленные порты, всего их должно быть 6 штук:
- Для SSH
- Для веб-панели
- Для VLESS/TCP
- Для VLESS/GPRC
- Для AmneziaWG
- Для OpenVPN-over-Cloak
- Выполните
ufw allow [ваше число]
соответственно 5 раз. Например:
ufw allow 41567
ufw allow 13854
ufw allow 29875 и т. п.
- После выполняем команду
ufw reload
.
(Опционально) Подключение к серверу через SSH-ключ для удобства и безопасности
- В Терминале Windows выполняем команду
ssh-keygen -t ed25519
, задаем имя файла и (опционально) пароль для ключа.
Будут созданы два файла: публичный ключ (файл с расширением .pub) и файл приватного ключа авторизации (без расширения, только заданное вами название). Они будут сохранены по пути C:/Users/[Профиль]. - Авторизуемся на сервере любым удобным способом и переходим к консоли, затем выполняем команду
mkdir ~/.ssh && touch ~/.ssh/authorized_keys && chmod 644 -R ~/.ssh
. - Переходим к редактированию на сервере – используем WinSCP или nano.
В файле/etc/ssh/sshd_config:
Раскоментируем и меняем значениеPasswordAuthentication
наno
Раскомментируем строчкуPubkeyAuthentication
и меняем значение наyes
Добавляем новую строчкуAuthenticationMethods publickey
Раскомментируем строчкуAuthorizedKeysFile
, а из её значения убираем.ssh/authorized_keys2
В результате должно быть так:AuthorizedKeysFile .ssh/authorized_keys
. Сохраняем файл.
Возвращаемся к ранее созданному файлу публичного ключа, открываем его текстовым редактором и копируем содержимое БЕЗ указания пользователя@хостнейма. То есть без username@something
в конце строчки.
В результате должно быть нечто подобное: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3CGQ2UqRlaqdxwIdyAMkvFWDkvnEAqBRIPCqbfXvYG
.
Переходим к файлу /root/.ssh/authorized_keys
, открываем текстовым редактором и вставляем в него скопированное содержимое. Сохраняем файл.
- Выполняем команду
systemctl reload ssh
для применения изменений. - Подключаемся к серверу через Терминал в Windows: ssh root@IP-сервера -i (путь до файла приватного ключа) -p (порт для SSH). Вводим заданный ранее пароль к ключу.
Настраиваем авторизацию для WinSCP:
- Выбираем Новое подключение
- Вводим всё то же, что в начале инструкции, кроме пароля от root
- Переходим в меню "Ещё..." → SSH/Аутентификация → Файл закрытого ключа → [...] (выбор файла) → меняем фильтр расширения на Все файлы → выбираем файл приватного ключа. Соглашаемся на конвертацию в необходимый формат, вводим пароль, если задавали, и сохраняем файл в безопасном месте. Он будет автоматически выбран в этом поле. Нажимаем ОК.
- Возвращаемся и подключаемся к серверу кнопкой Войти. Для удобства сохраните пресет авторизации этой сессии через ПКМ по вкладке с сервером → Сохранить подключение. Для авторизации в консоли через PuTTY нужно будет вводить пароль от ключа (но зачем оно нужно, когда можно использовать Терминал Windows?). Готово.
(всё то же самое, но из обычного Терминала и в чуть более облегчённом виде)
- Открываем терминал и подключаемся к VDS (были выше описаны данные для подключения):
ssh username@ip_address
- Соглашаемся с хостовыми ключами VDS, прописав
yes
. - Если пользователь был
root
– дальше от его лица будут производиться действия, иначе, в зависимости от выбранной ОС на VDS хостера, подключаемся выданным пользователем и сменяем пользователя и привилегии командойsudo -i
. - Выполняем обновление системы:
apt update && apt upgrade
. - Выполняем скрипт настройки системы. Пишем
nano prepare.sh
и вставляем следующее содержимое (напоминаю, выполняется всё и вся здесь от прав суперпользователя):
#!/usr/bin bash
declare -a ports
while getopts ":u:p:" opt; do
case $opt in
u)
IFS=","
ports=($OPTARG)
unset IFS
;;
p)
port_num=($OPTARG)
;;
\?)
echo "Неверная опция: -$OPTARG" >&2
exit 1
;;
esac
done
echo "Настройка файервола"
ufw default deny incoming && ufw default allow outgoing
ufw allow $port_num
echo "Добавляем порты в разрешённые в файерволе:"
for ports in "${ports[@]}"; do
ufw allow $ports
done
echo "Устанавливаем порт для SSH"
sed -i "s/^#Port 22/Port $port_num/" /etc/ssh/sshd_config
echo "Блокировка сканирования ГРЧЦ"
cat >> /etc/ufw/before.rules <<EOF
# drop GRCHC
-A ufw-before-input -s 185.224.228.0/22 -j DROP
-A ufw-before-input -s 195.209.120.0/22 -j DROP
-A ufw-before-input -s 212.192.156.0/22 -j DROP
-A ufw-before-input -s 194.165.22.0/24 -j DROP
-A ufw-before-input -s 194.165.23.0/24 -j DROP
-A ufw-before-input -s 195.209.122.0/22 -j DROP
-A ufw-before-input -s 185.224.231.0/24 -j DROP
-A ufw-before-input -s 185.224.230.0/24 -j DROP
-A ufw-before-input -s 185.224.229.0/24 -j DROP
-A ufw-before-input -s 212.192.158.0/24 -j DROP
COMMIT
EOF
echo "Перезапускаем сервисы"
systemctl restart ssh && systemctl restart networking && ufw enable
- Выполняем скрипт. Порты для файервола на открытие перечисляем через запятую без пробелов после опции
-u
, например:-u 1488,1337,228
, для порта SSH просто указать число после опции-p
(-p 11488
).
Исходя из описанного, команда запуска скрипта будет следующая:bash ./prepare.sh -u 1488,1337,228,7839,9475 -p 11488
- PROFIT. Всё сделалось само, никуда лезть не надо :)
Note
Инструкция актуальна на момент последнего редактирования этого раздела (13.04.2024).
Если вы обнаружили, что в новых версиях присутствуют какие-либо несоответствия с гайдом, просим сообщить о них, создав Issue или предложив правки через Pull Request, так как Marzban – активно развивающийся проект, изменения в котором не всегда получается отслеживать своевременно.
- Выполните команду:
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
После установки выведутся логи. Для остановки вывода логов воспользуйтесь комбинацией Ctrl+C.
- Создаём аккаунт админа для Marzban:
sudo marzban cli admin create --sudo
Используйте логин из рандомных символов и пароль как можно сложнее. - Переходим в WinSCP, идём по пути /opt/marzban. Правкой открываем файл .env. (или в терминале от
root
открываем файл для редактирования командойnano /opt/marzban/.env
) - Находим самых верхние строчки
UVICORN_IP=
иUVICORN_PORT=
.
UVICORN_IP=xx.xxx.xxx.xx (меняем на IP-адрес вашего сервера)
UVICORN_PORT=XXXXXX (пишем порт, который вы создавали для веб-панели)
- Переходим к разделу Telegram. Находим строчки
TELEGRAM_API_TOKEN=
,TELEGRAM_ADMIN_ID=
и (опционально)TELEGRAM_LOGGER_CHANNEL_ID=
– раскомментируем каждую из них.
- Открываем ваш клиент Telegram и обращаемся к @BotFather. Создаём нового бота с рандомным названием и юзернеймом. В "поздравительном" сообщении об успешном создании бота находим токен доступа к боту, копируем и вставляем его в строчку
TELEGRAM_API_TOKEN=
. - Если у вас кастомный клиент/включено отображение ID в экспериментальных настройках: заходим в Настройки/свой профиль и копируем ID вашего аккаунта; если у вас официальный клиент, напишите любое сообщение в чат и ответьте на него же командой /id.
- (Опционально) Создаём частный канал и добавляем в него вашего бота. Копируем ID канала и вставляем в строчку
TELEGRAM_LOGGER_CHANNEL_ID=
, добавив префикс -100 (!). Некоторые клиенты, выдающие ID каналов через Bot API, сразу добавляют -100 – в таком случае добавлять префикс вручную не нужно, в общем, перепроверьте.
После добавления бота в ваш частный канал, отключите разрешение на его добавление в другие каналы. Делается это в @BotFather командой/setjoingroups
. Там выберите нужного бота и переведите статус в Disabled.
- Сохраняем отредактированный файл. Возвращаемся в окно PuTTY с консолью и выполняем команду
marzban restart
. - Marzban должен запуститься без ошибок в логах, а вывод в логе обновиться – теперь там будет указан IP-адрес вашего сервера с портом. Переходим по адресу вашей веб-панели, добавив
/dashboard/
в URL (например: 134.43.57.54:43842/dashboard/). Логинимся в созданную ранее учетную запись админа. - В интерфейсе веб-панели открываем меню (три полоски) → Настройки хоста → VLESS TCP REALITY → разворачиваем Дополнительные опции → меняем порт на тот, который придумали ранее для этого протокола; аналогично с VLESS GRPC. Сохраняем.
- Открываем Настройки (иконка шестерёнки) → находим в конфигурации нужные протоколы: VLESS TCP REALITY, VLESS GRPC; меняем значение "port" на указанные ранее соответствующе каждому протоколу. Сохраняем, нажимаем Перезагрузить ядро.
- Создаем нового пользователя (новый профиль). Придумайте ему любое название. Оставляем активным только протокол Vless (т.е. выбран только он, что индицируется в интерфейсе синей подсветкой) без ограничений по трафику и времени. Пусть этот профиль будет для телефона. Через NekoBox добавляем конфиги TCP и GRPC, отсканировав QR-коды (так будет проще). Выбираем профиль VLESS/tcp и нажимаем на кнопку самолётика снизу.
- Аналогично создаём такой же профиль для ПК. В Nekoray включаем режим системного прокси и добавляем профиль ссылкой из буфера. Ссылка должна начинаться с vless://xxx..., после добавления ПКМ по профилю VLESS/tcp → Запустить.
Проверяем, что VPN функционирует корректно на обоих устройствах. Если всё нормально, возвращаемся в WinSCP, проходим по пути /opt/marzban, открываем Правкой файл .env и меняем UVICORN_IP
на 127.0.0.1
. Этим мы закрываем веб-панель в локальной сети (т.е. закрываем доступ к админ-панели извне), а дальнейшее управление профилями будем по необходимости производить через Telegram-бота.
P.S. Telegram-бот по неизвестной мне причине иногда отваливается после перезапуска Marzban. Это фиксится само по себе по истечении ~5 минут.
- Скачиваем клиент AmneziaVPN на ПК. Запускаем и выбираем Настроить свой сервер → У меня есть данные подключения → указываем IP-адрес сервера:порт для авторизации через SSH (например 134.43.57.54:43842), логин root и пароль от сервера (не путать с паролем от админки Marzban, нужен тот пароль, который вы использовали в WinSCP). На экране появится прогресс-бар, ждём некоторое время.
Если вы используете авторизацию через SSH-ключ, в поле ввода пароля вставьте содержимое файла приватного ключа (не забывая в том числе и строки
-----BEGIN OPENSSH PRIVATE KEY-----
,-----END OPENSSH PRIVATE KEY-----
– их тоже нужно копировать).
- Откроется окно выбора предустановленных профилей. Листаем вниз и выбираем вариант "Выбрать протокол самостоятельно".
- Выбираем AmneziaWG, указываем порт, который создавали для этого протокола. Ждём установки.
- После установки первого протокола мы попадаем на основную страницу клиента AmneziaVPN. Переходим по иконке Настроек → Серверы → выбираем наш сервер (Server 1). Здесь можно его переименовать. В разделе Протоколы находим OpenVPN over Cloak и рядом нажимаем на кнопку загрузки. Указываем порт, который ранее добавляли для этого протокола. Ждём окончания установки.
- Чтобы добавить ваш сервер с AmneziaVPN на телефон, снизу выбираем кнопку Поделиться и добавляем юзеров для каждого протокола отдельно. Протокол AmneziaWG можно добавить QR-кодом, если повезёт, то OpenVPN over Cloak тоже. Если нет – жмём в окне с постоянно меняющимся QR-кодом "Поделиться" и сохраняем конфиг файлом, далее добавляем его на телефон.
Управлять пользователями можно в разделе Поделиться → Пользователи.