Skip to content

Рандомизация портов и подсетей #22

@PROger4ever

Description

@PROger4ever

Описание проблем

  1. Сейчас используются стандартные порты для сервисов, что упрощает блокировку отдельных сервисов. Более того, по набору открытых портов можно довольно точно понять, что это сервер для раздачи туннелей под управлением VpnBot;
  2. Подсеть 10.0.1.0/24 и подобные мало того, что пересекутся при наличии нескольких серверов с VpnBot, так и могут пересечься с локальными подсетями провайдеров.

Существующие решения

Сейчас предлагается вносить изменённые переменные окружения в файл override.env, но некоторые из этих параметров вшиты в другие конфигурационные файлы (в том числе порт ss в конфигурацию nginx). А маршруты до подсетей есть и в scripts/start_ad.sh. Всё это сильно усложняет рандомизацию портов и всех сетей.

Предлагаемые решения

  1. По-хорошему бы убрать некоторые depends из docker-compose.yaml и доработать VpnBot так, чтобы лишние сервисы можно было полностью не запускать (это позволит боту работать на серверах с 512 мбайт оперативы без подкачки);
  2. Нужен скрипт, который бы позволял легко и удобно менять порты и подсети сервисов на случайные во избежание лёгкого детекта раздающего сервера.

Вот некоторый набросок, который желательно сделать более устойчивым к непредвиденным ситуациям:

Скрипт рандомизации портов и подсетей сервисов VpnBot
# Не забыть до установки обновить систему: sudo apt update && sudo apt upgrade -y && sudo apt autoremove --purge -y && reboot

# TODO: Добавить проверки на то, что всё идёт нормально (на пустые значения старых портов, их доступность и прочее)

VPNBOT_TELEGRAM_BOT_KEY="YOUR_TELEGRAM_BOT_KEY";

VPNBOT_WG_NET_NEW=$(shuf -i 100-254 -n 1);
VPNBOT_TZ_NEW="Europe/Moscow"; # Europe/Samara
VPNBOT_WG_NET_PREFIX_NEW="10.$VPNBOT_WG_NET_NEW.1"; # 10.0.1 # Дабы не было пересечения с локальными подсетями провайдера по типу 10.x.0.0/16 и внутренними адресами других туннелей
VPNBOT_WG_PORT_NEW=$(shuf -i 49152-65535 -n 1); # 51820;
VPNBOT_WG1_NET_PREFIX_NEW="10.$VPNBOT_WG_NET_NEW.3"; # 10.0.3 # TODO: Что с oc на 10.0.2.0/24?
VPNBOT_WG1_PORT_NEW=$((VPNBOT_WG_PORT_NEW + 1)); # 51820
VPNBOT_SS_PORT_NEW=$(shuf -i 2000-10000 -n 1); # 8388
VPNBOT_TG_PORT_NEW=$(shuf -i 2000-10000 -n 1); # 4443

mkdir -p ~/scripts && cd ~/scripts &&
  wget -O- https://raw.githubusercontent.com/mercurykd/vpnbot/master/scripts/init.sh | sh -s "$VPNBOT_TELEGRAM_BOT_KEY" &&
  \
  cd vpnbot &&
  cp .env override.env &&
  \
  \
  VPNBOT_TZ_OLD=$(grep -P '^TZ=' override.env | sed -E 's~^TZ=(.*)$~\1~') &&
  VPNBOT_WG_NET_PREFIX_OLD=$(grep -P '^WGADDRESS=' override.env | sed -E 's~^WGADDRESS=([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/24$~\1~') &&
  VPNBOT_WG_PORT_OLD=$(grep -P '^WGPORT=' override.env | sed -E 's~^WGPORT=([0-9]+)$~\1~') &&
  VPNBOT_WG1_NET_PREFIX_OLD=$(grep -P '^WG1ADDRESS=' override.env | sed -E 's~^WG1ADDRESS=([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/24$~\1~') &&
  VPNBOT_WG1_PORT_OLD=$(grep -P '^WG1PORT=' override.env | sed -E 's~^WG1PORT=([0-9]+)$~\1~') &&
  VPNBOT_SS_PORT_OLD=$(grep -P '^SSPORT=' override.env | sed -E 's~^SSPORT=([0-9]+)$~\1~') &&
  VPNBOT_TG_PORT_OLD=$(grep -P '^TGPORT=' override.env | sed -E 's~^TGPORT=([0-9]+)$~\1~') &&
  \
  sed -Ei.bak1 "s~$VPNBOT_TZ_OLD~$VPNBOT_TZ_NEW~g" override.env &&
  sed -Ei.bak2 "s~(^|[^0-9])$VPNBOT_WG_NET_PREFIX_OLD\.([0-9]+)([^0-9]|$)~\1$VPNBOT_WG_NET_PREFIX_NEW\.\2\3~g" override.env config/* scripts/start_ad.sh &&
  sed -Ei.bak3 "s~(^|[^0-9])$VPNBOT_WG_PORT_OLD([^0-9]|$)~\1$VPNBOT_WG_PORT_NEW\2~g" override.env config/* &&
  sed -Ei.bak4 "s~(^|[^0-9])$VPNBOT_WG1_NET_PREFIX_OLD\.([0-9]+)([^0-9]|$)~\1$VPNBOT_WG1_NET_PREFIX_NEW\.\2\3~g" override.env config/* scripts/start_ad.sh &&
  sed -Ei.bak5 "s~(^|[^0-9])$VPNBOT_WG1_PORT_OLD([^0-9]|$)~\1$VPNBOT_WG1_PORT_NEW\2~g" override.env config/* &&
  sed -Ei.bak6 "s~(^|[^0-9])$VPNBOT_SS_PORT_OLD([^0-9]|$)~\1$VPNBOT_SS_PORT_NEW\2~g" override.env config/* &&
  sed -Ei.bak7 "s~(^|[^0-9])$VPNBOT_TG_PORT_OLD([^0-9]|$)~\1$VPNBOT_TG_PORT_NEW\2~g" override.env config/* &&
  \
  \
  IP=$(curl https://ipinfo.io/ip) VER=$(git describe --tags) docker compose --env-file ./.env --env-file ./override.env up -d --force-recreate

# После полной проверки работоспособности можно удалить резервные копии изменённых файлов: find -name '*.bak?' -delete

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions