Вход Регистрация

Свой прокси-сервер на 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 мин чтения
Тёмная рельефная карта Европы со светящимися нитями между городами

Прокси

Прокси Европы: кому нужен европейский IP и какой брать

Сайты всё жёстче привязывают контент к стране посетителя: цены, выдача, наличие товара и реклама в Берлине и Париже разные. Разбираем задачи, где без европейского адреса не обойтись, и подбираем…

4 мин чтения
Светящаяся ретрансляционная вышка между домом и ночным городом

Прокси

Для чего нужен прокси-сервер: разбор реальных задач

Определение «посредник между клиентом и сервером» ничего не объясняет: интересно, зачем этот посредник ставят добровольно. Разбираем живые задачи по обе стороны баррикады: прямые прокси для…

4 мин чтения

Все статьи

Цены Забрать час теста