Увійти Реєстрація

Свій проксі-сервер на VPS: встановлення 3proxy і перевірка

Покроковий гайд для новачка: ставимо 3proxy на VPS готовим bash-скриптом, перевіряємо доступ ззовні, підключаємо браузер. І чесно про те, коли він не потрібен.

Маленький домашній сервер із теплим підсвічуванням і кабелем, що йде до нічного міста

Особистий проксі-сервер можна підняти, навіть якщо ви жодного разу не відкривали консоль Linux: сам установник укладається у хвилину. Нижче гайд за кроками: орендуємо VPS, запускаємо готовий скрипт, перевіряємо доступ ззовні й підключаємо браузер. На виході вийде один постійний IP з HTTP і SOCKS5 під логіном і паролем.

Наприкінці статті розберемо, у яких задачах особистий сервер програє сервісу. Ми самі продаємо проксі, тож скажемо про це прямо.

Що знадобиться

ЩоЯке
СерверVPS з 1 ядром і 512 МБ памʼяті: особистому проксі вистачить наймолодшого тарифу
Системачиста Ubuntu 22.04 або 24.04, Debian 12 або 13
Доступкористувач root і пароль із листа хостера
ТерміналPowerShell у Windows 10 і 11, «Термінал» у macOS і Linux

Країну VPS вибирайте одразу під задачу: адреса проксі буде з цієї країни, і змінити її можна лише переїздом на інший сервер.

Ми прогнали всі команди із цієї статті на чистих образах чотирьох систем із таблиці, кожній дали 512 МБ памʼяті й одне ядро. Встановлення зайняло від 10 до 31 секунди, а сам 3proxy без навантаження зайняв менше 8 МБ.

Ставитимемо 3proxy. Одна програма обслуговує і HTTP, і SOCKS5, витрачає мало памʼяті й налаштовується одним файлом. Squid працює лише як HTTP-проксі, Dante лише як SOCKS, тож із ними довелося б налаштовувати дві служби. У репозиторіях Ubuntu пакета 3proxy немає, тому скрипт бере офіційний пакет розробника й звіряє його контрольну суму.

Крок 1. Підключіться до сервера

Відкрийте термінал і введіть команду, підставивши адресу з листа хостера:

Ваш компʼютер
ssh root@SERVER_IP

Під час першого входу система запитає, чи довіряти серверу: напишіть yes. Пароль під час введення не відображається, так і задумано. Наберіть його наосліп або вставте й натисніть Enter. Якщо хостер видав звичайного користувача замість root, після входу виконайте sudo -i.

Крок 2. Запустіть установник

Натисніть «Копіювати», вставте блок у вікно термінала цілком і натисніть Enter. Він сам створить файл і запустить його.

Сервер: встановлення
cat > install-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Installs 3proxy with HTTP and SOCKS5, login and password required.
# Ubuntu 22.04+ or Debian 12+. Run as root on a clean server.
set -euo pipefail

VERSION="1.0.2"
CONF_DIR="/usr/local/3proxy/conf"

if [ "$(id -u)" -ne 0 ]; then
  echo "Run as root: sudo bash install-proxy.sh"
  exit 1
fi

case "$(dpkg --print-architecture)" in
  amd64) ARCH="x86_64"; SHA="d42c0a15ab7bc2e129de2e72fedfb6c908bfc1f7b7f4be15368c56eeb21e9a08" ;;
  arm64) ARCH="arm64";  SHA="e7b8f21bc527b30e9b7fd2ebd5889a11eb14889bb45f71074c94c865fc1b2556" ;;
  *) echo "Only amd64 and arm64 servers are supported"; exit 1 ;;
esac

echo "==> Installing packages"
export DEBIAN_FRONTEND=noninteractive NEEDRESTART_SUSPEND=1
APT="apt-get -o DPkg::Lock::Timeout=300"
$APT update -qq
$APT install -y -qq curl openssl ca-certificates >/dev/null

DEB="/tmp/3proxy-$VERSION.$ARCH.deb"
curl -fsSL -o "$DEB" "https://github.com/3proxy/3proxy/releases/download/$VERSION/3proxy-$VERSION.$ARCH.deb"
echo "$SHA  $DEB" | sha256sum -c --quiet -
$APT install -y -qq "$DEB" >/dev/null
rm -f "$DEB"

echo "==> Creating login, password and ports"
LOGIN="user$(openssl rand -hex 3)"
PASS="$(openssl rand -hex 12)"
HTTP_PORT="$(shuf -i 20000-59999 -n 1)"
SOCKS_PORT="$((HTTP_PORT + 1))"

echo "$LOGIN:CL:$PASS" > "$CONF_DIR/passwd"

cat > "$CONF_DIR/3proxy.cfg" <<EOF
nscache 65536
nserver 1.1.1.1
nserver 8.8.8.8
log /logs/3proxy.log D
rotate 7
maxconn 200
users \$/conf/passwd
auth strong
deny * * 127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10
deny * * * 25
allow *
proxy -a -p$HTTP_PORT
socks -p$SOCKS_PORT
EOF

chown proxy:proxy "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"
chmod 640 "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"

if command -v ufw >/dev/null && ufw status | grep -q "Status: active"; then
  echo "==> Opening ports in ufw"
  ufw allow "$HTTP_PORT/tcp" >/dev/null
  ufw allow "$SOCKS_PORT/tcp" >/dev/null
fi

echo "==> Starting the service"
systemctl enable 3proxy >/dev/null 2>&1
systemctl restart 3proxy
sleep 2

if ! systemctl is-active --quiet 3proxy; then
  echo "3proxy did not start. Details: journalctl -u 3proxy -n 30"
  exit 1
fi

SERVER_IP=""
for URL in https://ifconfig.me https://api.ipify.org; do
  SERVER_IP="$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@127.0.0.1:$HTTP_PORT" "$URL" || true)"
  [ -n "$SERVER_IP" ] && break
done

if [ -z "$SERVER_IP" ]; then
  echo "The proxy runs but its test request failed. Details: tail /usr/local/3proxy/logs/3proxy.log.*"
  exit 1
fi

umask 077
cat > /root/proxy.txt <<EOF
Server:     $SERVER_IP
HTTP port:  $HTTP_PORT
SOCKS port: $SOCKS_PORT
Login:      $LOGIN
Password:   $PASS

curl -x "http://$LOGIN:$PASS@$SERVER_IP:$HTTP_PORT" https://ifconfig.me
curl --socks5-hostname "$LOGIN:$PASS@$SERVER_IP:$SOCKS_PORT" https://ifconfig.me
bash check-proxy.sh $SERVER_IP $HTTP_PORT $SOCKS_PORT $LOGIN $PASS
EOF

echo
echo "Done. These details are saved in /root/proxy.txt"
echo
cat /root/proxy.txt
SCRIPT
bash install-proxy.sh

Ось що скрипт робить, по порядку:

  • ставить пакет 3proxy і перевіряє, що файл завантажився без підміни;
  • придумує випадкові логін, пароль і два порти з верхнього діапазону, куди сканери зазирають рідше, ніж на 3128 і 1080;
  • забороняє підключення без логіна й закриває доступ із проксі до внутрішніх адрес сервера та службових адрес хмари;
  • блокує поштовий порт 25, щоб у разі витоку пароля спамери не загнали вашу адресу в чорні списки;
  • прибирає із заголовків HTTP відомості про клієнта: сайт не побачить ваш справжній IP;
  • вмикає автозапуск після перезавантаження й відкриває порти в ufw, якщо цей фаєрвол активний.

Наприкінці зʼявиться такий звіт, лише з вашими значеннями:

Приклад виводу
Done. These details are saved in /root/proxy.txt

Server:     203.0.113.10
HTTP port:  34512
SOCKS port: 34513
Login:      user4f2a9c
Password:   8c1f0e77a2d94b36c5e1a07d

curl -x "http://user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34512" https://ifconfig.me
curl --socks5-hostname "user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34513" https://ifconfig.me
bash check-proxy.sh 203.0.113.10 34512 34513 user4f2a9c 8c1f0e77a2d94b36c5e1a07d

Скопіюйте ці дані до себе. На сервері вони лежать у файлі /root/proxy.txt, команда cat /root/proxy.txt покаже їх знову.

Крок 3. Відкрийте порти в панелі хостера

Частина хостерів ставить перед сервером власний мережевий фаєрвол, він налаштовується в особистому кабінеті. Якщо у вас такий є, дозвольте там обидва порти по TCP. Немає такого розділу в панелі, отже, крок можна пропустити.

Крок 4. Перевірте проксі ззовні

Перевіряти треба зі свого компʼютера: так ви побачите сервер очима зовнішнього світу. На Linux і macOS вставте блок у термінал: він створить файл check-proxy.sh. Потім вставте й запустіть останній рядок зі звіту установника, у ньому вже стоять ваші дані.

Ваш компʼютер: перевірка
cat > check-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD
# Run it from your own computer: only an outside check shows the real picture.
set -u
if [ "$#" -ne 5 ]; then
  echo "Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD"
  exit 2
fi
HOST="$1"; HTTP_PORT="$2"; SOCKS_PORT="$3"; LOGIN="$4"; PASS="$5"
URL="https://ifconfig.me"
FAILED=0

pass() { echo "[ OK ] $1"; }
fail() { echo "[FAIL] $1"; FAILED=$((FAILED + 1)); }
info() { echo "[INFO] $1"; }

MY_IP=$(curl -4 -s --max-time 10 "$URL" || curl -4 -s --max-time 10 https://api.ipify.org || true)
info "Your own IP: ${MY_IP:-unknown}"

HTTP_IP=$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "$URL" || true)
if [ -n "$HTTP_IP" ]; then pass "HTTP proxy works, exit IP $HTTP_IP"; else fail "HTTP proxy gave no answer"; fi

SOCKS_IP=$(curl -s --max-time 20 --socks5-hostname "$LOGIN:$PASS@$HOST:$SOCKS_PORT" "$URL" || true)
if [ -n "$SOCKS_IP" ]; then pass "SOCKS5 proxy works, exit IP $SOCKS_IP"; else fail "SOCKS5 proxy gave no answer"; fi

if [ -n "$HTTP_IP" ] && [ "$HTTP_IP" = "$MY_IP" ]; then
  info "Exit IP equals your IP: fine on the server itself, a problem anywhere else"
fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP without login is refused (407)"; else fail "HTTP without login returned $CODE, expected 407"; fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$LOGIN:wrong-$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP with a wrong password is refused (407)"; else fail "HTTP with a wrong password returned $CODE, expected 407"; fi

if [ -n "$SOCKS_IP" ]; then
  if curl -s --max-time 20 -o /dev/null --socks5-hostname "$HOST:$SOCKS_PORT" "$URL"; then
    fail "SOCKS5 lets you in without a login: the proxy is open"
  else
    pass "SOCKS5 without login is refused"
  fi
fi

if [ -n "$MY_IP" ] && [ -n "$HTTP_IP" ] && [ "$HTTP_IP" != "$MY_IP" ]; then
  if curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me/all" | grep -qF "$MY_IP"; then
    fail "The site can see your own IP in the proxy headers"
  else
    pass "Your own IP is not visible in the headers"
  fi
fi

echo
if [ "$FAILED" -eq 0 ]; then
  echo "All checks passed."
else
  echo "Failed checks: $FAILED"
  exit 1
fi
SCRIPT

Якщо все налаштовано правильно, вивід буде таким:

Приклад виводу
[INFO] Your own IP: 198.51.100.7
[ OK ] HTTP proxy works, exit IP 203.0.113.10
[ OK ] SOCKS5 proxy works, exit IP 203.0.113.10
[ OK ] HTTP without login is refused (407)
[ OK ] HTTP with a wrong password is refused (407)
[ OK ] SOCKS5 without login is refused
[ OK ] Your own IP is not visible in the headers

All checks passed.

У Windows скрипт запускається в Git Bash. Без нього вистачить двох команд у PowerShell, кожна має вивести адресу вашого сервера. Пишіть саме curl.exe: просто curl у PowerShell викликає іншу команду.

PowerShell
curl.exe -x "http://LOGIN:PASSWORD@HOST:HTTP_PORT" https://ifconfig.me
curl.exe --socks5-hostname "LOGIN:PASSWORD@HOST:SOCKS_PORT" https://ifconfig.me

Якщо перевірка не пройшла

Що бачитеУ чому річЩо робити
Обидва рядки «gave no answer», код 000порти закриті дорогою до серверавідкрийте їх у панелі хостера й в ufw, звірте адресу сервера
Проксі відповів лише на самому серверіфаєрвол хостера чи провайдераповторіть крок 3, напишіть у підтримку хостера
Код 407 за правильного пароляодрук у логіні чи паролі, або ваш IP не входить до дозволенихзвірте з /root/proxy.txt і рядком allow у налаштуваннях
SOCKS5 пускає без логінаналаштування змінено вручнузапустіть установник заново, дані видадуться нові
Установник пише «did not start»служба не запустиласяподивіться причину: journalctl -u 3proxy -n 30
Установник пише «test request failed»служба працює, але сервер не виходить в інтернет через проксіподивіться журнал: tail /usr/local/3proxy/logs/3proxy.log.*
Помилка залежностей під час встановленнясистема старша за Ubuntu 22.04 і Debian 12перевстановіть ОС у панелі хостера на свіжу

Крок 5. Підключіть проксі

У браузері використовуйте HTTP-порт: Chrome і Firefox без розширень не вміють вводити логін і пароль для SOCKS5. Куди що вписати, розібрано у статті про налаштування проксі вручну. Програми зазвичай приймають рядок виду IP:PORT:LOGIN:PASSWORD, а якщо їм потрібен інший формат, рядок переробить конвертер проксі.

Підключилися? Відкрийте перевірку анонімності через проксі: сторінка покаже, яку адресу й які заголовки бачить сайт. Чим HTTP відрізняється від SOCKS5 і який порт брати під конкретний софт, ми розібрали в порівнянні протоколів.

Як керувати сервером

Усі команди нижче виконуються на сервері. Статус служби й журнал зʼєднань за сьогодні. На кожен день 3proxy заводить новий файл і зберігає їх тиждень. Вийти із журналу можна сполученням Ctrl+C:

Сервер
systemctl status 3proxy --no-pager
tail -f "$(ls -t /usr/local/3proxy/logs/* | head -1)"

Змінити пароль. Замість LOGIN підставте логін зі звіту. Команда покаже новий пароль, старий одразу перестане працювати, а в /root/proxy.txt лишаться колишні дані:

Сервер
NEW="$(openssl rand -hex 12)"
sed -i "s/^LOGIN:CL:.*/LOGIN:CL:$NEW/" /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Додати другого користувача:

Сервер
echo "friend:CL:$(openssl rand -hex 12)" >> /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Пускати лише з вашої адреси, якщо вона постійна. Замість YOUR_IP підставте свій IP. З інших адрес проксі почне відповідати кодом 407 навіть за правильного пароля:

Сервер
sed -i 's/^allow \*$/allow * YOUR_IP/' /usr/local/3proxy/conf/3proxy.cfg
systemctl restart 3proxy

Видалити все, коли сервер більше не потрібен:

Сервер
systemctl disable --now 3proxy
apt-get purge -y 3proxy </dev/null
rm -rf /usr/local/3proxy /etc/3proxy /root/proxy.txt

Чек-ліст безпеки

Проксі з помилкою в налаштуванні доступу стає публічним. Сканери обходять адреси хостерів постійно, і відкритий порт швидко потрапляє в безплатні списки: далі на вас чекають чужий трафік, зʼїдений канал і скарги хостеру. Скрипт закриває основне, решта на вас:

  1. Увімкніть фаєрвол командою нижче, підставивши порти зі звіту: назовні лишаться тільки SSH і проксі.
  2. Увімкніть автооновлення системи. Сам 3proxy стоїть окремим пакетом, тому раз на кілька місяців перевіряйте, чи не вийшла нова версія.
  3. Памʼятайте, що логін і пароль проксі передаються без шифрування. У публічній мережі їх може перехопити сусід, тому в кафе й аеропортах підключайтеся до проксі через VPN або обмежте доступ своїм IP. Докладніше в розборі публічного Wi-Fi.
  4. Раз на місяць переглядайте журнал на незнайомі адреси й перевіряйте IP сервера за чорними списками RBL.
Сервер
DEBIAN_FRONTEND=noninteractive apt-get install -y ufw unattended-upgrades </dev/null
printf 'APT::Periodic::Update-Package-Lists "1";\nAPT::Periodic::Unattended-Upgrade "1";\n' > /etc/apt/apt.conf.d/20auto-upgrades
ufw allow 22/tcp
ufw allow HTTP_PORT/tcp
ufw allow SOCKS_PORT/tcp
ufw --force enable

Якщо SSH у вас на іншому порту, замініть 22 на нього до запуску, інакше втратите доступ до сервера.

Що ви отримуєте і що втрачаєте

Свій VPSСервіс проксі
Контроль і логиповністю вашіна боці оператора
Адресодна, максимум кількапули на тисячі адрес
Тип адресидата-центр хостеравід дата-центрів до домашніх і стільникових
Геокраїна вашого VPSвибір країни, у резидентних і міста
Ротаціяні, адреса постійнана кожен запит або за сесією
Обслуговуванняоновлення й аптайм на васвходить у ціну
Ціна входуоренда VPS плюс часвід годинної підписки

Найважливіший тут рядок про тип адреси. VPS живе в підмережі хостингу, і будь-який сайт бачить це за автономною системою: перевірте свій сервер через визначення ASN. На маркетплейсах і в соціальних мережах до таких діапазонів ставляться настороженно, і особистий сервер там нічого не змінить. Домашньою чи стільниковою його адреса не стане.

Із грошима теж без ілюзій. Дешевий VPS ділить процесор і канал із сусідами, тому вечірні просідання швидкості для нього звична справа. У багатьох хостерів трафік лімітовано, і перевитрата коштує помітно дорожче за гігабайт у проксі-сервісу.

Коли свій проксі виправданий

  • Постійний IP під свої сервіси. Адмінки й внутрішні панелі відкриті лише з однієї адреси: VPS дає її дешево й надовго.
  • Тунель між своїми машинами. Офіс і сервер звʼязані напряму, і ви самі вирішуєте, що йде через цю точку.
  • Вимоги до логів. Записи про трафік мають зберігатися лише у вас.
  • Навчання. Підняти, зламати й полагодити: так найшвидше розумієш, як проксі працює зсередини.

Коли потрібен сервіс

Особистий сервер виходить із гри, щойно задачі потрібна більше ніж одна адреса, ротація чи певний тип IP: утримувати сотні VPS дорожче за будь-який тариф. Парсинг, моніторинг цін, робота з акаунтами й перевірка реклами живуть на пулах. Для них підійдуть наші тарифи: пакети зі списком ip:port і резидентні адреси з вибором країни. Багато хто тримає і те, і те: особистий сервер для доступу до своїх систем, пул сервісу для робочих задач.

Читайте далі

Темне місто із силуетами пагод і сучасними вежами, пов'язаними світними дугами

Проксі

Проксі Китаю: кому потрібен китайський IP і що він дає

Китайський сегмент мережі живе за своїми правилами, і дивитися на нього ззовні майже марно: частина сайтів відповідає лише адресам із Китаю, ціни й видача відрізняються від світових. Розбираємо…

4 хв читання
Три світні тунелі різної форми сходяться до однієї арки в темному дата-центрі

Проксі

Типи проксі-серверів: чим HTTP відрізняється від SOCKS5

Протокол вирішує, як софт передає запит проксі: HTTP-проксі читає його цілком, CONNECT відкриває тунель для TLS, а SOCKS5 переливає потік і вміє UDP. Розбираємо всі чотири протоколи зі схемою й…

7 хв читання
Темна рельєфна карта Європи зі світними нитками між містами

Проксі

Проксі Європи: кому потрібен європейський IP і який брати

Сайти дедалі жорсткіше прив'язують контент до країни відвідувача: ціни, видача, наявність товару й реклама в Берліні та Парижі різні. Розбираємо задачі, де без європейської адреси не обійтися, і…

4 хв читання

Усі статті

Тарифи Взяти годину безкоштовно