Установка и настройка прокси сервера 3proxy в Linux

3proxy это легкий и довольно производительный кроссплатформенный прокси сервер, который можно развернуть как на Windows, так и в Linux. В этой статье мы покажем, как установить и настроить 3proxy на базе Linux. Инструкция применима для большинства современных дистрибутивов (Debian, Ubuntu, CentOS, RHEL, Rocky, Oracle Linux, и т.д.)

3proxy универсальный прокси сервером с поддержкой HTTP, HTTPS, SOCKS v4, SOCKS v4a, SOCKS v5, FTP, POP3, UDP и TCP портмаппинг (переадресация или порт-форвардинг), поддержкой ACL, управлением пропускной способности канала, возможностями авторизации по имени пользователя, IP и рядом других полезных опций.

Пакет установки 3proxy отсутствует почти во всех репозиториях Linux, поэтому проще скомпилировать его самостоятельно. Для этого нужно установить компилятор gcc.

В CentOS/RHEL/Oracle Linux/Rocky gcc можно установить с помощью пакетного менеджера yum (dnf):

# yum install gcc

В Debian/Ubuntu используйте команду:

# apt-get install gcc

Скачайте исходные файлы 3proxy с Github и распакуйте архив:

# wget https://github. com/z3APA3A/3proxy/archive/0.9.3.tar.gz
# tar -xvzf 0.9.3.tar.gz

Перейдите в каталог с 3Proxy и скомпилируйте программу:

# cd 3proxy-0.9.3
# make -f Makefile.Linux

Команду make install не запускайте.

Создайте нового пользователя, от имени которого будет работать 3proxy (без доступа к shell и без домашнего каталога):

# useradd -s /usr/sbin/nologin -U -M -r 3proxy

Получите UID и GID нового пользователя:

# id 3proxy

uid=986(3proxy) gid=984(3proxy) groups=984(3proxy)

Создаем каталог для конфигурационного файла 3proxy:

# mkdir /etc/3proxy

Создайте каталог для логов:

# mkdir -p /var/log/3proxy

Скопируйте исполняемый файл 3proxy в /usr/bin:

# sudo cp bin/3proxy /usr/bin/

Предоставьте права для учетной записи 3proxy:

# chown 3proxy:3proxy -R /etc/3proxy
# chown 3proxy:3proxy /usr/bin/3proxy
# chown 3proxy:3proxy /var/log/3proxy

Создайте файл конфигурации:

# mcedit /etc/3proxy/3proxy.

cfg

Добавьте в него следующие данные:

# Запуск сервера от пользователя 3proxy
setgid 984
 setuid 986
# Пропишите правильные DNS сервера (можно получить в /etc/resolv.conf)
nserver 8.8.8.8
nserver 8.8.4.4
# укажите режим запуска как deamon
daemon
# IP-адрес внешнего интерфейса:
#external 192.168.20.14
# IP-адрес адрес внутреннего интерфейса:
#internal 192.168.1.14
# запуск http proxy на порту 4555
proxy -p4555 -n -a
# socks proxy на порту 2333
socks -p2333
# путь к логам и формат лога
log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30
# Оставьте размер кэша для запросов DNS по умолчанию
nscache 65536
# Используйте стандартные таймауты
timeouts 1 5 30 60 180 1800 15 60
 # Включите авторизацию по логинам и паролям
auth cache strong
users "testproxy:CL:Q#x8!jx!-n$)re;V"
users "testproxy2:CR:$1$yourSalt$FZ1CZhbunc3enF.
ujQCS.1" # CL – пароль пользователя укаывается в открытом виде # CR зашифрованный пароль (md5), можно получить с помощью команды openssl passwd -1 -salt yourSalt2 # можно хранить пользователей и пароли в отдельном файле, тогда укажите такую строку users $/etc/3proxy/.proxyauth

За основу вашего конфигурационного файла можно взять шаблон конфига из каталога с исходниками — /cfg/3proxy.cfg.sample

Создайте собственного демона 3proxy для управления им через systemd (подробнее про автозапуск служб и скриптов в Linux):

# touch /etc/systemd/system/3proxy.service
# chmod 664 /etc/systemd/system/3proxy.service
# mcedit /etc/systemd/system/3proxy.service

Добавьте в файл 3proxy.service следующую конфигурацию:

[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/3proxy /etc/3proxy/3proxy.cfg
ExecStop=/bin/kill `/usr/bin/pgrep 3proxy`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user.
target

Обновите конфигурацию systemd:

# systemctl daemon-reload

Добавьте сервис в автозагрузку и запустите его:

# systemctl enable 3proxy
# systemctl start 3proxy
# systemctl status 3proxy

Добавьте правило в файервол, которое открывает для подключений к прокси порт TCP 4555. Если у вас используется firewalld, добавьте разрешающее правило так:

# firewall-cmd --zone=public --add-port=4555/tcp
# firewall-cmd --reload

Если ваш Linux сервер расположен у внешнего провайдера (AWS, Azure, Oracle Cloud, и т.д.), не забудьте настроить в них соответствующую Security Group для порта 4555.

На этом настройка 3proxy завершена. Задайте IP адрес (имя) хоста с 3proxy и порт в настройках браузера. На компьютеры Windows можно распространить настройки прокси через GPO.

В статье рассмотрена лишь базовая минимальная настройка 3proxy. Вы можете использовать дополнительные возможности 3proxy для реализации более сложны сценариев (SOCKS-прокси, построение цепочек соединений, управление доступом, ограничение ширины потребляемого канала, ограничение трафика по времени или по сайтам и т.

д.).

Установка 3proxy | FirstVDS

3proxy — один из самых легко настраиваемых прокси-серверов, к тому же он открытый и кроссплатформенный. 

В статье рассмотрим установку 3proxy на ОС AlmaLinux 9 и Debian 11 (актуальные на момент написания статьи), а затем расскажем, как можно развернуть 3proxy в Docker.

1. Установка 3proxy с поддержкой http(s) и socks5-proxy

1.1. Установка

1.2. Пример файла конфигурации

2. Исправление распространённых проблем

2.1. Проблема 1

2.2. Проблема 2

2.3. Проблема 3

3. Упрощенный конфиг анонимного http(s) proxy сервера на порту 3128

4. Установка 3proxy в Docker

 

Установка 3proxy с поддержкой http(s) и socks5-proxy

Ни в коем случае не устанавливайте сервер без авторизации, т.к. этим незамедлительно воспользуются злоумышленники — создадут большой трафик и организуют рассылку спама через ваш сервер.

Установка

Так как в репозиториях 3proxy как правило отсутствует, мы будем устанавливать его из исходников. Для установки потребуется установить некоторые пакеты.

Для AlmaLinux:

# yum -y install gcc wget tar 

Для Debian:

# apt install -y build-essential wget tar

Далее скачиваем файлы 3proxy (ссылка на актуальную версию 3proxy со временем может измениться) и распаковываем архив:

# wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz
# tar -xvzf 0.9.3.tar.gz

Переходим в распакованную директорию и компилируем:

# cd 3proxy-0.9.3/
# make -f Makefile.Linux

Создаем директорию для конфигурационных файлов, директорию для логов и переносим исполняемый файл 3proxy:

# mkdir /etc/3proxy
# mkdir -p /var/log/3proxy
# cp bin/3proxy /usr/bin/

Теперь создадим пользователя для работы с 3proxy:

# useradd -s /usr/sbin/nologin -U -M -r proxyuser

И даем нашему пользователю proxyuser права на директории /etc/3proxy, /var/log/3proxy

и /usr/bin/3proxy:

# chown -R proxyuser:proxyuser /etc/3proxy
# chown -R proxyuser:proxyuser /var/log/3proxy
# chown -R proxyuser:proxyuser /usr/bin/3proxy

Создаем новый конфигурационный файл:

# touch /etc/3proxy/3proxy. cfg

И даём права на конфигурационный файл только пользователю root:

# chmod 600 /etc/3proxy/3proxy.cfg

Дальше необходимо правильно заполнить созданный конфигурационный файл. Для этого нам понадобится узнать uid и gid нашего пользователя proxyuser:

# id proxyuser
uid=991(proxyuser) gid=991(proxyuser) groups=991(proxyuser)

Запоминаем uid и gid пользователя, вставляем текст из примера файла конфигурации с помощью удобного для вас текстового редактора и сохраняем.

Пример файла конфигурации

Пример файла конфигурации 3proxy.cfg, который должен у вас получиться после его редактирования:

# Настройка запуска сервера от пользователя proxyuser 
# (вставляем uid и gid нашего пользователя, которые мы узнали ранее)
setgid 991
setuid 991
# Указываем правильные сервера имен. Посмотреть можно в /etc/resolv.conf
nserver 8.8.8.8
nserver 8.8.4.4
# Используем таймауты и размер кэша для запросов DNS по умолчанию
timeouts 1 5 30 60 180 1800 15 60
nscache 65536
# Указываем режим запуска как daemon
daemon
# Указываем IP-адрес внешнего интерфейса сервера 
external 111.
111.111.111 # либо игнорируем строку, если IP один # Указываем IP-адрес внутреннего интерфейса сервера internal 192.168.0.1 # либо игнорируем, чтобы прокси слушал все IP # Настраиваем http proxy на стандартном порту 3128 proxy -p3128 -n -a # укажите свой порт, предварительно проверив, что он работает # Настраиваем socks proxy на стандартном порту 1080 socks -p1080 # укажите свой порт, предварительно проверив, что он работает # Указываем путь к логам, формат лога и ротацию log /var/log/3proxy/3proxy.log D logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" rotate 30

Создаем файл-инициализации для systemd и настраиваем верные права:

# touch /etc/systemd/system/3proxy.service
# chmod 664 /etc/systemd/system/3proxy.service

В данный файл нужно вставить следующий текст

[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/3proxy /etc/3proxy/3proxy.cfg
ExecStop=/bin/kill `/usr/bin/pgrep proxyuser`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user. target

Сохраняем и обновляем конфигурацию systemd:

# systemctl daemon-reload

Запускаем 3proxy и добавляем его в автозагрузку:

# systemctl start 3proxy
# systemctl enable 3proxy

Не забудьте открыть порт http proxy в firewalld или iptables.

Настройка закончена. На порту 3128 теперь у вас работает http-proxy, на порту 1080 — socks-proxy.

Исправление распространённых проблем

Проблема 1

Из-за кеширования доменных имён есть вероятность, что ваш новый домен для вас будет недоступен.

Решение: необходимо дождаться обновления записей DNS либо прописать в файл hosts IP-адрес вашего сервера и новый домен.

Проблема 2

Ваш прокси-сервер с дефолтными портами рано или поздно найдут.

Решение: поменять порты. 

proxy -n -p7834
# на http proxy слушать порт 7834 
socks -p7835   
# на socks слушать порт 7835

Но их тоже могут найти. Поэтому можно в фаерволе разрешить доступ с определённых адресов, а остальным — запретить. Довольно негибкое (так как у вас может и не быть статического IP), но железное решение.

Проблема 3

Если вы ведёте логи, в которых отражаются все соединения, со временем они станут занимать всё больше места. В конечном итоге логи могут занять всё место на диске.

Решение: не вести логи или настроить их ротацию.
 

Лучше предусмотреть всё заранее.

Упрощенный конфиг анонимного http(s) proxy сервера на порту 3128

users proxyuser:CL:password
daemon
log /var/log/3proxy/3proxy.log D
rotate 30
auth strong
proxy -n -a
setgid 65534
setuid 65534

Также нужно создать директорию под логи и выставить права (мы запускаем сервер с минимальными правами nobody в системе используя директивы setgid/setud):

mkdir /var/log/3proxy ; chown nobody /var/log/3proxy

Установка 3proxy в Docker

Рассмотрим вариант установки 3proxy в Docker.

Для начала потребуется установить некоторые пакеты (а для свежеустановленных ОС Debian и Ubuntu, возможно, ещё потребуется обновить индекс пакетов apt командой # apt update).

Для AlmaLinux и CentOS:

# yum install docker docker-compose

для Ubuntu и Debian:

# apt install docker docker.io docker-compose

Скачиваем образ:

# docker pull 3proxy/3proxy

По умолчанию 3proxy использует безопасную среду chroot в /usr/local/3proxy с uid 65535 и gid 65535, и ожидает, что конфигурационный файл 3proxy будет помещен в /usr/local/etc/3proxy. Пути в конфигурационном файле должны указываться относительно /usr/local/3proxy, т.е. должно быть /logs вместо /usr/local/3proxy/logs. В chroot требуется разрешение для nserver.

Для этого создадим директорию и конфигурационный файл 3proxy:

# mkdir -p /etc/dockerapp/3proxy
# touch /etc/dockerapp/3proxy/3poxy.conf

Далее с помощью любого удобного для вас текстового редактора необходимо отредактировать созданный конфигурационный файл 3proxy. conf. Для запуска 3proxy в Docker достаточно минимальной конфигурации:

nserver 8.8.8.8
socks -p3129

Для того чтобы добавить логирование и пользователя, необходимо в файл конфигурации 3proxy добавить:

log /logs/3proxy.log
auth strong
users "proxyuser:CR:87beeef3f4ee4661ac1897eca216fc26"

Вместо «87beeef3f4ee4661ac1897eca216fc26» необходимо указать хэш MD5 пароля для пользователя proxyuser. Узнать хэш MD5 можно с помощью онлайн генераторов.

Запустим 3proxy с помощью docker-compose. Для этого потребуется создать файл конфигурации в формате .yml:

# touch /etc/dockerapp/3proxy/docker-compose.yml

Вставляем туда с помощью текстового редактора следующий текст:

version: "2.1"
services:
  3proxysvc:
image: 3proxy/3proxy:latest
container_name: 3proxy
volumes:
   - /etc/dockerapp/3proxy/conf:/usr/local/3proxy/conf
ports:
   - 8080:3129
restart: unless-stopped

Сохраняем. В данном файле мы указали внешний порт 8080. Теперь можем запускать:

# docker-compose -f /etc/dockerapp/3proxy/docker-compose. yml up -d

Получим примерно такой ответ:

Creating network "3proxy_default" with the default driver
Creating 3proxy ... done

Проверяем:

# docker ps

Получим ответ, где будут указаны ID контейнера, образ, статус, используемые порты и имя:

48cc0cd140cd   3proxy/3proxy:latest   "/bin/3proxy /etc/3p…"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->3129/tcp   3proxy

 

3proxy крошечный бесплатный прокси-сервер для Windows, Linux, Unix: SOCKS, HTTP, FTP-прокси


Горячие новости: 3proxy 0.9.3 выпущен 03 декабря 2020 г.
0.9.3

Исправление ошибок:
Исправлено: файл описания systemd (прокси мог не запуститься после перезагрузки или через systemctl)
Исправлено: создание группы/учетной записи в сценариях установки
Исправлено: countall/nocounall не работает в некоторых конфигурациях
Исправлено: счетчики не работают, если не указан файл счетчика
Исправлено: счетчики без ротации (тип N) некорректно отображались в веб-интерфейсе администратора
Исправлено: %n может быть неполным или отсутствовать в длинных записях журнала.
Исправлено: функция обратного подключения не работает

Улучшения:
+ сборки Docker

0.9.2

Исправление ошибок:
Исправлено: ограничители пропускной способности (снова)
Исправлено: плагины фильтрации данных (PCREPlugin, SSLPlugin). Использование SSLPlugin в Linux требует отключения соединения (-s0)
Исправлено: автономные прокси не реагируют на HUP (Ctrl+C) в Linux/Unix
Исправлено: несколько мелких ошибок

Улучшения:
+ деба для подлокотников (экспериментальная)
+ Поддержка Openssl 1.1 для SSLPlugin

0.9.1 — выпуск исправления

Исправление ошибок:
Исправлено: сокет мог быть закрыт до получения/отправки всех данных
Исправлено: не работает бандлимин
Исправлено: countall/nocountall
Исправлено: несколько условий гонки

0.9 вводит параметры сокета, включая привязку интерфейса для Linux, лимиты подключений и ограничения скорости подключения, привязку сеанса пользователя к IP, режим нулевого копирования для Linux, многочисленные улучшения IPv6, предварительная поддержка RADIUS, поддержка ARM для Windows. Рекомендуется обновиться до ветки 0.9 с любых более старых версий.

0.9 теперь является стабильной веткой, 10 — веткой разработки, исправления, связанные с безопасностью, будут перенесены в ветку 0.8.

Скачать: http://3proxy.ru/download/

3Proxy крошечный бесплатный прокси-сервер действительно крошечный кросс-платформенный (Win32/Win64&Unix) набор бесплатных прокси-серверов. Он включает HTTP-прокси с HTTPS и поддержка FTP, прокси SOCKSv4/SOCKSv4.5/SOCKSv5 (socks/socks.exe), прокси POP3, SMTP-прокси, AIM/ICQ-прокси (icqpr/icqpr.exe), MSN messenger / Live messenger прокси (msnpr/msnpr.exe), FTP-прокси, кеширующий DNS-прокси, портмаппер TCP и UDP.

Вы можете использовать каждый прокси как отдельную программу (socks, proxy, tcppm, udppm, pop3p) или использовать комбинированную программу (3proxy). Комбинированный прокси дополнительно поддерживает такие функции, как контроль доступа, ограничение пропускной способности, ограничение ежедневного/недельного/месячного объема трафика, цепочка прокси-серверов, ротация журналов, журналирование системного журнала и ODBC и т.  д.

Маленький, простой и в то же время очень функциональный.

Может быть скомпилирован с помощью Visual C или gcc. Включены родные версии Win32/Win64 в архиве и поддерживает установку как услугу. В настоящее время 3proxy протестирован для работы под Windows начиная с 98 (для Windows до Vista требуется облегченная версия) и до последней версии i386 и x64, FreeBSD/i386/x64, NetBSD/i386/x64, OpenBSD/i386/x64, Linux/i386/x64/PPC/Alpha/arm, Mac OS X, Solaris/i386/x64.

3proxy абсолютно бесплатен (FreeWare) и имеет открытый исходный код. Его можно использовать на условиях GNU/GPL. Начиная с версии 0.6 используется лицензия типа BSD и вместо этого может использоваться любая совместимая лицензия (лицензия Apache, GPL, LGPL).

По вопросам лицензирования или коммерческой поддержки обращайтесь по адресу электронной почты [электронная почта защищена]
.

Авторы:

  • 3APA3A, 3APA3A на 3proxy.ru, разработчик кода
  • Владимир Дубровин, vlad securityvulns. ru, разработчик кода

3proxy крошечный бесплатный прокси-сервер для Windows, Linux, Unix: SOCKS, HTTP, FTP прокси


Горячие новости: 3proxy 0.9.3 выпущен 03 декабря 2020 г.
0.9.3

Исправление ошибок:
Исправлено: файл описания systemd (прокси мог не запуститься после перезагрузки или через systemctl)
Исправлено: создание группы/учетной записи в сценариях установки
Исправлено: countall/nocounall не работает в некоторых конфигурациях
Исправлено: счетчики не работают, если не указан файл счетчика
Исправлено: счетчики без ротации (тип N) некорректно отображались в веб-интерфейсе администратора
Исправлено: %n может быть неполным или отсутствовать в длинных записях журнала.
Исправлено: функция обратного подключения не работает

Улучшения:
+ сборки Docker

0. 9.2

Исправление ошибок:
Исправлено: ограничители пропускной способности (снова)
Исправлено: плагины фильтрации данных (PCREPlugin, SSLPlugin). Использование SSLPlugin в Linux требует отключения соединения (-s0)
Исправлено: автономные прокси не реагируют на HUP (Ctrl+C) в Linux/Unix
Исправлено: несколько мелких ошибок

Улучшения:
+ деба для подлокотников (экспериментальная)
+ Поддержка Openssl 1.1 для SSLPlugin

0.9.1 — выпуск исправления

Исправление ошибок:
Исправлено: сокет может быть закрыт до получения/отправки всех данных
Исправлено: не работает бандлимин
Исправлено: countall/nocountall
Исправлено: несколько условий гонки

0.9 вводит параметры сокета, включая привязку интерфейса для Linux, лимиты подключений и ограничения скорости подключения, привязку сеанса пользователя к IP, режим нулевого копирования для Linux, многочисленные улучшения IPv6, предварительная поддержка RADIUS, поддержка ARM для Windows. Рекомендуется обновиться до ветки 0.9 с любых более старых версий.

0.9 теперь является стабильной веткой, 10 — веткой разработки, исправления, связанные с безопасностью, будут перенесены в ветку 0.8.

Скачать: http://3proxy.ru/download/

3Proxy крошечный бесплатный прокси-сервер действительно крошечный кросс-платформенный (Win32/Win64&Unix) набор бесплатных прокси-серверов. Он включает HTTP-прокси с HTTPS и поддержка FTP, прокси SOCKSv4/SOCKSv4.5/SOCKSv5 (socks/socks.exe), прокси POP3, SMTP-прокси, AIM/ICQ-прокси (icqpr/icqpr.exe), MSN messenger / Live messenger прокси (msnpr/msnpr.exe), FTP-прокси, кеширующий DNS-прокси, портмаппер TCP и UDP.

Вы можете использовать каждый прокси как отдельную программу (socks, proxy, tcppm, udppm, pop3p) или использовать комбинированную программу (3proxy). Комбинированный прокси дополнительно поддерживает такие функции, как контроль доступа, ограничение пропускной способности, ограничение ежедневного/недельного/месячного объема трафика, цепочка прокси-серверов, ротация журналов, журналирование системного журнала и ODBC и т.