3proxy — это бесплатный и кроссплатформенный прокси-сервер с открытым исходным кодом. Его можно использовать, чтобы быстро поднять SOCKS5 или HTTP-прокси на своем виртуальном или выделенном сервере, а также для развертывания прокси-шлюза в небольших сетях.
3proxy поддерживает множество протоколов: HTTP/HTTPS, SOCKS 4/4.5/5, FTP, POP3, SMTP. Встроенные функции:
- авторизация по IP-адресу и имени/паролю;
- возможность ограничивать скорость и задавать лимиты для сетевого трафика;
- контроль доступа при помощи ACL (Access Control List — список управления доступом).
В статье рассмотрим установку и настройку 3proxy на сервере с Linux, а также его запуск в Docker.
Установка
Установить 3proxy можно двумя способами: скачать готовый deb или rpm-пакет, собрать из исходного кода. Разберём оба подхода для различных дистрибутивов Linux — AlmaLinux 10.1, CentOS 10, Debian 13, Ubuntu 24.04.
Установка готового пакета
Скачать готовый deb или rpm-пакет можно на официальной странице проекта в GitHub. Для скачивания потребуется утилита wget. Мы будем использовать последнюю актуальную версию — 0.9.5. Все команды необходимо выполнять от имени root-пользователя.
Для дистрибутивов на основе Debian (Ubuntu, Debian) установка выполняется командой:
wget https://github.com/3proxy/3proxy/releases/download/0.9.5/3proxy-0.9.5.x86_64.debДля дистрибутивов AlmaLinux или CentOS используйте:
wget https://github.com/3proxy/3proxy/releases/download/0.9.5/3proxy-0.9.5.x86_64.rpmДля установки пакета в Ubuntu или Debian выполните команду:
dpkg -i 3proxy-0.9.5.x86_64.debДля установки пакета в AlmaLinux или CentOS выполните:
rpm -i 3proxy-0.9.5.x86_64.rpmЗапустите сервис 3proxy (независимо от дистрибутива):
systemctl start 3proxy.serviceПроверьте статус сервиса:
systemctl status 3proxy.service
Если в статусе отображается active (running), то 3proxy успешно запущен и готов к работе.
Установка сборкой из исходного кода
При необходимости (например, если нужна более свежая версия) 3proxy можно собрать из исходного кода.
Для начала установим необходимые пакеты. Для дистрибутивов Ubuntu и Debian воспользуемся командой:
apt -y install gcc make wget tar libssl-devДля дистрибутивов AlmaLinux или CentOS:
dnf install gcc make wget tar openssl-devel -yПереходим в каталог src, который используется для хранения исходных кодов программ:
cd /usr/local/srcСкачиваем tar-архив с исходным кодом программы:
wget https://github.com/3proxy/3proxy/archive/refs/tags/0.9.5.tar.gzРазархивируем его:
tar -xvf 0.9.5.tar.gzПереходим в директорию:
cd 3proxy-0.9.5/Создаем символическую ссылку на файл Makefile:
ln -s Makefile.Linux MakefileЗапускаем процесс компиляции:
make -f Makefile.LinuxУстанавливаем программу:
make installЗапускаем 3proxy и проверяем статус:
systemctl start 3proxy.service && systemctl status 3proxy.service
Если в статусе отображается active (running), то 3proxy успешно запущен и готов к работе.
Открываем порты
При использовании ufw:
sudo ufw allow 3128/tcp
sudo ufw allow 1080/tcpПри использовании firewalld:
sudo firewall-cmd --permanent --add-port=3128/tcp
sudo firewall-cmd --permanent --add-port=1080/tcp
sudo firewall-cmd --reloadПри использовании iptables:
sudo iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1080 -j ACCEPTСоздание отдельного пользователя для 3proxy
Чтобы реализовать принцип наименьших привилегий, создадим отдельного пользователя от имени которого будет запущен прокси-сервер.
- Создадим пользователя с именем proxy3:
sudo adduser --system --no-create-home --disabled-login --group proxy3- Получим UID (идентификатор пользователя) и GID (идентификатор группы) созданного пользователя:
id proxy3
Значения uid и gid нужно запомнить. В нашем примере они равны 124 и 125 соответственно.
Конфигурация с логином/паролем (HTTP + HTTPS + SOCKS5)
Настроим 3proxy как SOCKS5-прокси с аутентификацией по логину и паролю. При использовании этого протокола ваш реальный IP-адрес подменяется адресом прокси-сервера. Это может быть полезно для подключения к корпоративным сетям, а также для веб-скрапинга и сбора данных.
- Открываем на редактирование основной конфигурационный файл 3proxy.cfg:
nano /etc/3proxy/3proxy.cfg- Приводим файл к следующему виду:
setgid 124
setuid 125
nserver 8.8.8.8
nscache 65536
log /var/log/3proxy.log D
rotate 30
logformat "L%t %U %C %R %c %r %i %o %T"
auth strong
users user1:CL:PasswordForUser1
proxy -p3128 -i0.0.0.0
socks -p1080 -i0.0.0.0Описание параметров конфигурации:
setgid 124— уникальный идентификатор пользователя от имени которого будет запущен 3proxy.setuid 125— уникальный идентификатор группы пользователя от имени которого будет запущен 3proxy.nserver 8.8.8.8— адрес DNS-сервера, который 3proxy будет использовать для разрешения имён хостов. Можно указать сразу несколько адресов.nscache 65536— размер кэша DNS-записей (количество записей). Позволяет ускорить повторные обращения к одним и тем же доменам и снизить нагрузку на DNS-серверы.log /var/log/3proxy.log D— включает запись логов в файл/var/log/3proxy.log.D — тип ротации: ежедневная (Daily). Можно указать другие варианты: H (почасовая), W (еженедельная), M (ежемесячная), C (каждую минуту). Без типа ротации запись в лог-файл будет происходить бесконечно.rotate 30— задает количество старых лог-файлов которые необходимо сохранять. После 30-го файла, самый старый файл удаляется.logformat "L%t %U %C %R %c %r %i %o %T"— формат записи строк в лог-файле. Обратите внимание: чем больше данных логируется, тем больше становится файл с логами. Рекомендуется гибко настраивать логирование, указав только необходимые ключи для записи:- L — локальное время;
- %t — timestamp в секундах с 1970-01-01 (формат Unix time);
- %U — имя пользователя;
- %C — IP-адрес клиента;
- %R — IP-адрес целевого сервера (куда идёт запрос);
- %c — порт клиента;
- %r — порт целевого сервера;
- %i — байты, полученные от целевого сервера (входящий трафик);
- %o — байты, отправленные целевому серверу (исходящий трафик);
- %T — текст запроса.
auth strong— тип аутентификации: логин + пароль.users user1:CL:PasswordForUser1— создаёт учётную запись с именем пользователя user1 и паролем PasswordForUser1.proxy -p3128 -i0.0.0.0— запускает HTTP/HTTPS-прокси.- -p3128 — порт 3128 для HTTP-прокси;
- -i0.0.0.0 — слушать на всех интерфейсах.
socks -p1080 -i0.0.0.0— запускает SOCKS5-прокси.- -p1080 — стандартный порт SOCKS;
- -i0.0.0.0 — слушать на всех интерфейсах.
Сохраняем изменения в файле и выходим из него.
- Перезапускаем сервис 3proxy и проверяем статус:
systemctl restart 3proxy && systemctl status 3proxyЕсли сервис успешно запустился, значит, ошибок нет, и новая конфигурация успешно применена.
- Проверим работоспособность прокси сервера с помощью утилиты curl. Вместо IP-адреса 192.168.234.135 необходимо указать свой внутренний IP-адрес сервера. Узнать IP-адрес можно с помощью команды
ip a.
Для начала проверим HTTP-прокси:
curl -x http://user1:PasswordForUser1@192.168.234.135:3128 http://ifconfig.me
Далее проверим SOCKS5-прокси:
curl --socks5 user1:PasswordForUser1@192.168.234.135:1080 http://ifconfig.me
Если обе команды вернули внешний IP-адрес, то прокси-сервер работает.
Конфигурация с анонимным доступом
Использовать анонимный доступ нужно очень осторожно. Открытый публичный прокси без защиты быстро находят сканеры, которые используют прокси для рассылки спама, DDoS-атак и другой вредоносной активности. Поэтому доступ по IP-адресу лучше ограничивать, а полностью открытый прокси использовать только для тестов.
Как настроить анонимный доступ:
- Открываем на редактирование основной конфигурационный файл 3proxy.cfg:
nano /etc/3proxy/3proxy.cfg- Приводим конфигурацию к следующему виду:
setgid 124
setuid 125
nserver 8.8.8.8
nscache 65536
log /var/log/3proxy.log D
rotate 30
logformat "L%t %U %C:%c %R:%r %i %o %T"
auth none
allow *
proxy -p3128 -i0.0.0.0 -a
socks -p1080 -i0.0.0.0Сохраняем изменения в файле и выходим из него.
- Перезапускаем сервис 3proxy и проверяем статус:
systemctl restart 3proxy && systemctl status 3proxy
Если в конфигурации нет ошибок, то отобразится статус «active».
- Проверяем работоспособность с помощью утилиты curl. Не забудьте поменять IP-адрес на свой:
curl -x http://192.168.234.135:3128 http://ifconfig.me
curl --socks5 192.168.234.135:1080 http://ifconfig.me

Если обе команды вернули внешний IP-адрес, то анонимный прокси-сервер работает.
Запуск 3proxy в Docker
При желании, 3proxy легко запустить в Docker контейнере. Рассмотрим несколько способов.
Запуск анонимного режима
- Запустим 3proxy в анонимном режиме без аутентификации:
docker run -d \
--name 3proxy-anonymous \
--restart unless-stopped \
-p 3128:3128 \
-p 1080:1080 \
ghcr.io/tarampampam/3proxy:latest- Проверим работоспособность 3proxy:
curl -x http://127.0.0.1:3128 http://ifconfig.me
curl --socks5 127.0.0.1:1080 http://ifconfig.me
Запуск с авторизацией
- Запустим 3proxy с использованием аутентификации по логину и паролю. Прежде чем запускать конфигурацию, необходимо остановить или удалить контейнер из предыдущего примера, чтобы избежать конфликта портов.
docker run -d \
--name 3proxy-with-password \
--restart unless-stopped \
-p 3128:3128 \
-p 1080:1080 \
-e AUTH_TYPE=strong \
-e USERS="user2:CL:PasswordForUser2" \
ghcr.io/tarampampam/3proxy:1- Проверяем работу:
curl -x http://user2:PasswordForUser2@127.0.0.1:3128 http://ifconfig.me
curl --socks5 user2:PasswordForUser2@127.0.0.1:1080 http://ifconfig.me