Свой прокси-сервер на 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 мин чтения
Прокси Европы: кому нужен европейский IP и какой брать
Сайты всё жёстче привязывают контент к стране посетителя: цены, выдача, наличие товара и реклама в Берлине и Париже разные. Разбираем задачи, где без европейского адреса не обойтись, и подбираем…
4 мин чтения
Для чего нужен прокси-сервер: разбор реальных задач
Определение «посредник между клиентом и сервером» ничего не объясняет: интересно, зачем этот посредник ставят добровольно. Разбираем живые задачи по обе стороны баррикады: прямые прокси для…
4 мин чтения