Skip to content

Russia-focused guide to setting up your own proxy server. #fuckrkn

Notifications You must be signed in to change notification settings

begoniacommunity/unrestrict

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Потребуются ПК на Windows с установленными WinSCP, PuTTY или Windows Terminal; чистый VDS/VPS с Ubuntu.
Настоятельно рекомендуется полностью ознакомиться с инструкцией прежде, чем будете делать изложенное. Есть два варианта действия – ручной и полуавтоматический.

I. Настройка сервера

Ручной метод

  1. Подключаемся к серверу через SSH в WinSCP. Запускаем программу, вводим:
    Имя хоста: IP-адрес вашего сервера, указанного в ЛК вашего хостера
    Порт: 22 (по умолчанию)
    Имя пользователя: root (или другой пользователь, согласно описанию приобретённой услуги в ЛК хостера) Пароль: пароль от вашего сервера, который находится на странице услуги
    Нажимаем Войти. Во всплывающем окне с хэшем хостового ключа, ещё чем-либо – всё подтверждаем. Справа появится файловая система сервера.
  2. Теперь, в верхнем тулбаре, выбираем кнопку Открыть сессию в PuTTY. Введите пароль от сервера, затем выполните apt update && apt upgrade.
  3. Выполните ufw status – вывод должен быть inactive.
  4. Придумайте или сгенерируйте случайное число от 1 до 65535 – это будет ваш новый порт подключения по SSH. Выше – лучше.
  5. Выполните ufw allow [число порта для SSH].
  6. В WinSCP перейдите по пути /etc/ssh/sshd_config, раскомментируйте строку #Port 22 (т.е. удалите #) и замените число 22 на выбранное вами число.
  7. Выполните команду systemctl restart ssh && systemctl restart networking && ufw enable. После этого сессия в WinSCP отвалится, потому что изменились данные подключения. Сессия в PuTTY останется живой. Теперь ваш порт подключения к серверу по SSH сменился на указанное вами число, соответственно, для повторных будущих подключений вписывайте новый порт (вместо стандартного 22).
  8. Переавторизуемся в 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. Существует готовый скрипт блокировки ботов РКН с обновляемыми списками. Ознакомиться можно в профильном репозитории.

  1. Придумайте или сгенерируйте 5 новых случайных чисел от 1 до 65535 – они потребуются в качестве портов для настраиваемых протоколов и веб-панели Marzban.

Note

Итого, учитывая ранее добавленные порты, всего их должно быть 6 штук:

  • Для SSH
  • Для веб-панели
  • Для VLESS/TCP
  • Для VLESS/GPRC
  • Для AmneziaWG
  • Для OpenVPN-over-Cloak
  1. Выполните ufw allow [ваше число] соответственно 5 раз. Например:
ufw allow 41567
ufw allow 13854
ufw allow 29875 и т. п.
  1. После выполняем команду ufw reload.
(Опционально) Подключение к серверу через SSH-ключ для удобства и безопасности
  1. В Терминале Windows выполняем команду ssh-keygen -t ed25519, задаем имя файла и (опционально) пароль для ключа.
    Будут созданы два файла: публичный ключ (файл с расширением .pub) и файл приватного ключа авторизации (без расширения, только заданное вами название). Они будут сохранены по пути C:/Users/[Профиль].
  2. Авторизуемся на сервере любым удобным способом и переходим к консоли, затем выполняем команду mkdir ~/.ssh && touch ~/.ssh/authorized_keys && chmod 644 -R ~/.ssh.
  3. Переходим к редактированию на сервере – используем 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, открываем текстовым редактором и вставляем в него скопированное содержимое. Сохраняем файл.

  1. Выполняем команду systemctl reload ssh для применения изменений.
  2. Подключаемся к серверу через Терминал в Windows: ssh root@IP-сервера -i (путь до файла приватного ключа) -p (порт для SSH). Вводим заданный ранее пароль к ключу.

Настраиваем авторизацию для WinSCP:

  • Выбираем Новое подключение
  • Вводим всё то же, что в начале инструкции, кроме пароля от root
  • Переходим в меню "Ещё..." → SSH/Аутентификация → Файл закрытого ключа → [...] (выбор файла) → меняем фильтр расширения на Все файлы → выбираем файл приватного ключа. Соглашаемся на конвертацию в необходимый формат, вводим пароль, если задавали, и сохраняем файл в безопасном месте. Он будет автоматически выбран в этом поле. Нажимаем ОК.
  • Возвращаемся и подключаемся к серверу кнопкой Войти. Для удобства сохраните пресет авторизации этой сессии через ПКМ по вкладке с сервером → Сохранить подключение. Для авторизации в консоли через PuTTY нужно будет вводить пароль от ключа (но зачем оно нужно, когда можно использовать Терминал Windows?). Готово.

Полуавтоматический метод

(всё то же самое, но из обычного Терминала и в чуть более облегчённом виде)

  1. Открываем терминал и подключаемся к VDS (были выше описаны данные для подключения): ssh username@ip_address
  2. Соглашаемся с хостовыми ключами VDS, прописав yes.
  3. Если пользователь был root – дальше от его лица будут производиться действия, иначе, в зависимости от выбранной ОС на VDS хостера, подключаемся выданным пользователем и сменяем пользователя и привилегии командой sudo -i.
  4. Выполняем обновление системы: apt update && apt upgrade.
  5. Выполняем скрипт настройки системы. Пишем 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
  1. Выполняем скрипт. Порты для файервола на открытие перечисляем через запятую без пробелов после опции -u, например: -u 1488,1337,228, для порта SSH просто указать число после опции -p (-p 11488).
    Исходя из описанного, команда запуска скрипта будет следующая: bash ./prepare.sh -u 1488,1337,228,7839,9475 -p 11488
  2. PROFIT. Всё сделалось само, никуда лезть не надо :)

II. Устанавливаем и настраиваем Marzban

Note

Инструкция актуальна на момент последнего редактирования этого раздела (13.04.2024).
Если вы обнаружили, что в новых версиях присутствуют какие-либо несоответствия с гайдом, просим сообщить о них, создав Issue или предложив правки через Pull Request, так как Marzban – активно развивающийся проект, изменения в котором не всегда получается отслеживать своевременно.

  1. Выполните команду:
    sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install

После установки выведутся логи. Для остановки вывода логов воспользуйтесь комбинацией Ctrl+C.

  1. Создаём аккаунт админа для Marzban: sudo marzban cli admin create --sudo
    Используйте логин из рандомных символов и пароль как можно сложнее.
  2. Переходим в WinSCP, идём по пути /opt/marzban. Правкой открываем файл .env. (или в терминале от root открываем файл для редактирования командой nano /opt/marzban/.env)
  3. Находим самых верхние строчки UVICORN_IP= и UVICORN_PORT=.
UVICORN_IP=xx.xxx.xxx.xx (меняем на IP-адрес вашего сервера)
UVICORN_PORT=XXXXXX (пишем порт, который вы создавали для веб-панели)
  1. Переходим к разделу 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.
  1. Сохраняем отредактированный файл. Возвращаемся в окно PuTTY с консолью и выполняем команду marzban restart.
  2. Marzban должен запуститься без ошибок в логах, а вывод в логе обновиться – теперь там будет указан IP-адрес вашего сервера с портом. Переходим по адресу вашей веб-панели, добавив /dashboard/ в URL (например: 134.43.57.54:43842/dashboard/). Логинимся в созданную ранее учетную запись админа.
  3. В интерфейсе веб-панели открываем меню (три полоски) → Настройки хоста → VLESS TCP REALITY → разворачиваем Дополнительные опции → меняем порт на тот, который придумали ранее для этого протокола; аналогично с VLESS GRPC. Сохраняем.
  4. Открываем Настройки (иконка шестерёнки) → находим в конфигурации нужные протоколы: VLESS TCP REALITY, VLESS GRPC; меняем значение "port" на указанные ранее соответствующе каждому протоколу. Сохраняем, нажимаем Перезагрузить ядро.
  5. Создаем нового пользователя (новый профиль). Придумайте ему любое название. Оставляем активным только протокол Vless (т.е. выбран только он, что индицируется в интерфейсе синей подсветкой) без ограничений по трафику и времени. Пусть этот профиль будет для телефона. Через NekoBox добавляем конфиги TCP и GRPC, отсканировав QR-коды (так будет проще). Выбираем профиль VLESS/tcp и нажимаем на кнопку самолётика снизу.
  6. Аналогично создаём такой же профиль для ПК. В Nekoray включаем режим системного прокси и добавляем профиль ссылкой из буфера. Ссылка должна начинаться с vless://xxx..., после добавления ПКМ по профилю VLESS/tcp → Запустить.

Проверяем, что VPN функционирует корректно на обоих устройствах. Если всё нормально, возвращаемся в WinSCP, проходим по пути /opt/marzban, открываем Правкой файл .env и меняем UVICORN_IP на 127.0.0.1. Этим мы закрываем веб-панель в локальной сети (т.е. закрываем доступ к админ-панели извне), а дальнейшее управление профилями будем по необходимости производить через Telegram-бота.
P.S. Telegram-бот по неизвестной мне причине иногда отваливается после перезапуска Marzban. Это фиксится само по себе по истечении ~5 минут.

III. Устанавливаем и настраиваем Amnezia

  1. Скачиваем клиент AmneziaVPN на ПК. Запускаем и выбираем Настроить свой сервер → У меня есть данные подключения → указываем IP-адрес сервера:порт для авторизации через SSH (например 134.43.57.54:43842), логин root и пароль от сервера (не путать с паролем от админки Marzban, нужен тот пароль, который вы использовали в WinSCP). На экране появится прогресс-бар, ждём некоторое время.

Если вы используете авторизацию через SSH-ключ, в поле ввода пароля вставьте содержимое файла приватного ключа (не забывая в том числе и строки -----BEGIN OPENSSH PRIVATE KEY-----, -----END OPENSSH PRIVATE KEY----- – их тоже нужно копировать).

  1. Откроется окно выбора предустановленных профилей. Листаем вниз и выбираем вариант "Выбрать протокол самостоятельно".
  2. Выбираем AmneziaWG, указываем порт, который создавали для этого протокола. Ждём установки.
  3. После установки первого протокола мы попадаем на основную страницу клиента AmneziaVPN. Переходим по иконке Настроек → Серверы → выбираем наш сервер (Server 1). Здесь можно его переименовать. В разделе Протоколы находим OpenVPN over Cloak и рядом нажимаем на кнопку загрузки. Указываем порт, который ранее добавляли для этого протокола. Ждём окончания установки.
  4. Чтобы добавить ваш сервер с AmneziaVPN на телефон, снизу выбираем кнопку Поделиться и добавляем юзеров для каждого протокола отдельно. Протокол AmneziaWG можно добавить QR-кодом, если повезёт, то OpenVPN over Cloak тоже. Если нет – жмём в окне с постоянно меняющимся QR-кодом "Поделиться" и сохраняем конфиг файлом, далее добавляем его на телефон.
    Управлять пользователями можно в разделе Поделиться → Пользователи.

About

Russia-focused guide to setting up your own proxy server. #fuckrkn

Topics

Resources

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •