- Установка 3proxy
- Установка 3proxy с поддержкой http(s) и socks5-proxy
- Установка
- Пример файла конфигурации
- Исправление распространённых проблем
- Проблема 1
- Проблема 2
- Проблема 3
- Упрощенный конфиг анонимного http(s) proxy сервера на порту 3128
- Установка 3proxy в Docker
- Установка и настройка прокси сервера 3proxy в Linux
Установка 3proxy
3proxy — один из самых легко настраиваемых прокси-серверов, к тому же он открытый и кроссплатформенный. В статье рассмотрим установку 3proxy на ОС AlmaLinux 9 и Debian 11 (актуальные на момент написания статьи), а затем расскажем, как можно развернуть 3proxy в Docker.
Установка 3proxy с поддержкой http(s) и socks5-proxy
Ни в коем случае не устанавливайте сервер без авторизации, т.к. этим незамедлительно воспользуются злоумышленники — создадут большой трафик и организуют рассылку спама через ваш сервер.
Установка
Так как в репозиториях 3proxy как правило отсутствует, мы будем устанавливать его из исходников. Для установки потребуется установить некоторые пакеты. Для AlmaLinux:
# yum -y install gcc wget tar
# apt install -y build-essential wget tar
Далее скачиваем файлы 3proxy (ссылка на актуальную версию 3proxy со временем может измениться) и распаковываем архив:
# cd 3proxy-0.9.3/ # make -f Makefile.Linux
Создаем директорию для конфигурационных файлов, директорию для логов и переносим исполняемый файл 3proxy:
# mkdir /etc/3proxy # mkdir -p /var/log/3proxy # cp bin/3proxy /usr/bin/
# 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
# chmod 600 /etc/3proxy/3proxy.cfg
Дальше необходимо правильно заполнить созданный конфигурационный файл. Для этого нам понадобится узнать uid и gid нашего пользователя proxyuser:
# id proxyuser uid=991(proxyuser) gid=991(proxyuser) groups=991(proxyuser)
Запоминаем uid и gid пользователя, вставляем текст из примера файла конфигурации с помощью удобного для вас текстового редактора и сохраняем.
Пример файла конфигурации
# Настройка запуска сервера от пользователя 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
# 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
# systemctl start 3proxy # systemctl enable 3proxy
Исправление распространённых проблем
Проблема 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
# apt install docker docker.io docker-compose
По умолчанию 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 достаточно минимальной конфигурации:
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
# docker-compose -f /etc/dockerapp/3proxy/docker-compose.yml up -d
Creating network "3proxy_default" with the default driver Creating 3proxy . done
48cc0cd140cd 3proxy/3proxy:latest "/bin/3proxy /etc/3p…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->3129/tcp 3proxy
Установка и настройка прокси сервера 3proxy в Linux
12.08.2022
itpro
CentOS, Linux, Ubuntu
комментария 2
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):
В Debian/Ubuntu используйте команду:
Скачайте исходные файлы 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
Создайте нового пользователя, от имени которого будет работать 3proxy (без доступа к shell и без домашнего каталога):
# useradd -s /usr/sbin/nologin -U -M -r 3proxy
Получите UID и GID нового пользователя:
uid=986(3proxy) gid=984(3proxy) groups=984(3proxy)
Создаем каталог для конфигурационного файла 3proxy:
Создайте каталог для логов:
Скопируйте исполняемый файл 3proxy в /usr/bin:
Предоставьте права для учетной записи 3proxy:
# chown 3proxy:3proxy -R /etc/3proxy
# chown 3proxy:3proxy /usr/bin/3proxy
# chown 3proxy:3proxy /var/log/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 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-прокси, построение цепочек соединений, управление доступом, ограничение ширины потребляемого канала, ограничение трафика по времени или по сайтам и т.д.).
Предыдущая статья Следующая статья