Установка и настройка прокси сервера 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.
Добавьте в него следующие данные:
# Запуск сервера от пользователя 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 Исправление ошибок: Улучшения: 0.9.2 Исправление ошибок: Улучшения: 0.9.1 — выпуск исправления Исправление ошибок: 0.9 вводит параметры сокета, включая привязку интерфейса для Linux, лимиты подключений и ограничения скорости подключения, привязку сеанса пользователя к IP, режим нулевого копирования для Linux, многочисленные улучшения IPv6, предварительная поддержка RADIUS, поддержка ARM для Windows. Рекомендуется обновиться до ветки 0.9 с любых более старых версий. 0.9 теперь является стабильной веткой, 10 — веткой разработки, исправления, связанные с безопасностью, будут перенесены в ветку 0.8. Скачать: http://3proxy.ru/download/ |
Вы можете использовать каждый прокси как отдельную программу (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 Исправление ошибок: Улучшения: 0. 9.2 Исправление ошибок: Улучшения: 0.9.1 — выпуск исправления Исправление ошибок: 0.9 вводит параметры сокета, включая привязку интерфейса для Linux, лимиты подключений и ограничения скорости подключения, привязку сеанса пользователя к IP, режим нулевого копирования для Linux, многочисленные улучшения IPv6, предварительная поддержка RADIUS, поддержка ARM для Windows. Рекомендуется обновиться до ветки 0.9 с любых более старых версий. 0.9 теперь является стабильной веткой, 10 — веткой разработки, исправления, связанные с безопасностью, будут перенесены в ветку 0.8. Скачать: http://3proxy.ru/download/ |
Вы можете использовать каждый прокси как отдельную программу (socks, proxy, tcppm, udppm, pop3p) или использовать комбинированную программу (3proxy). Комбинированный прокси дополнительно поддерживает такие функции, как контроль доступа, ограничение пропускной способности, ограничение ежедневного/недельного/месячного объема трафика, цепочка прокси-серверов, ротация журналов, журналирование системного журнала и ODBC и т.