Свій проксі-сервер на 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 викликає іншу команду.
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Чек-ліст безпеки
Проксі з помилкою в налаштуванні доступу стає публічним. Сканери обходять адреси хостерів постійно, і відкритий порт швидко потрапляє в безплатні списки: далі на вас чекають чужий трафік, зʼїдений канал і скарги хостеру. Скрипт закриває основне, решта на вас:
- Увімкніть фаєрвол командою нижче, підставивши порти зі звіту: назовні лишаться тільки SSH і проксі.
- Увімкніть автооновлення системи. Сам 3proxy стоїть окремим пакетом, тому раз на кілька місяців перевіряйте, чи не вийшла нова версія.
- Памʼятайте, що логін і пароль проксі передаються без шифрування. У публічній мережі їх може перехопити сусід, тому в кафе й аеропортах підключайтеся до проксі через VPN або обмежте доступ своїм IP. Докладніше в розборі публічного Wi-Fi.
- Раз на місяць переглядайте журнал на незнайомі адреси й перевіряйте 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 хв читання