В данной статье будет продемонстрирована настройка 3proxy-клиента на выделенный сервер под управлением операционной системы ArchLinux/CentOS. 3proxy является одним из самых актуальных и функциональных инструментов на сегодняшний день. Он поддерживает различные виды протоколов: HTTP, HTTPS, FTP, SOCKS, и другие. С его помощью возможно настроить собственный прокси-сервер за считанные минуты.
В статье содержится пошаговое руководство по установке утилиты и дальнейшей настройке. Рассмотрены такие вопросы, как: установка с официального источника, настройка файлов конфигурации, открытие нестандартных портов, а также изложены частые ошибки и даны практические рекомендации по их решению. Перед началом работы необходимо заказать VPS или выделенный сервер с операционной системой CentOS или ArchLinux. Все действия в примере будут производиться на выделенном сервере под управлением ОС CentOS7 с одним выделенным статическим публичным IP-адресом.
Установка
Шаг 1
Установка 3proxy производится напрямую из исходников. В качестве компилятора будет использоваться gcc. Подключаемся к серверу, как root (суперпользователь) и устанавливаем компилятор.
yum install gcc
Шаг 2
Теперь необходимо скачать исходные файлы 3proxy. Сделать это можно перейдя на официальный сайт и скопировав ссылку на актуальную версию:
Также можно взять ссылку напрямую с GitHub, если требуется архивная версия:
На момент написания статьи актуальная версия 0.9.3. Скачиваем ee и сразу распаковываем:
wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz
tar -xvzf 0.9.3.tar.gz
Шаг 3
Переходим в директорию с распакованным проектом и компилируем:
cd 3proxy-0.9.3/
make -f Makefile.Linux
Шаг 4
Создаем каталоги и копируем файл 3proxy в /usr/bin:
mkdir -p /var/log/3proxy
mkdir /etc/3proxy
cp bin/3proxy /usr/bin/
Настройка 3proxy
Шаг 5
Создание пользователя для работы с каталогом. В данном случае имя пользователя 3proxyuser:
useradd -s /usr/sbin/nologin -U -M -r 3proxyuser
Выдаем созданному пользователю права на работу с каталогами:
chown -R 3proxyuser:3proxyuser /etc/3proxy
chown -R 3proxyuser:3proxyuser /var/log/3proxy
chown -R 3proxyuser:3proxyuser /usr/bin/3proxy
Создадим файл конфигурации командой:
touch /etc/3proxy/3proxy.cfg
По желанию можно выставить права на файл конфигурации для root пользователя. Этот шаг не обязателен, но добавит защиту:
chmod 600 /etc/3proxy/3proxy.cfg
Шаг 6
Необходимо правильно заполнить файл конфигурации, который был создан ранее. Для начала узнаем uid и gid пользователя командой:
id 3proxyuser
В нашем случае это следующие значения:
Для заполнения файла конфигурации можно взять готовые конфиги или воспользоваться документацией на официальном сайте. Также по умолчанию уже предустановлен файл с примером, найти его можно по пути /cfg/3proxy.cfg.sample
В качестве примера мы рассмотрим 2 вида конфигурации: с логированием и без него. Каждая строка будет сопровождена комментариями (они помечены символом "#").
Пример готового конфига без логирования:
# Указываем данные пользователя, которые узнали в предыдущей команде
setgid 995
setuid 997
# Пишем NS-сервера. Можно уточнить свои в файле /etc/resolv.conf
nserver 1.1.1.1
nserver 8.8.8.8
# Размер кэша
nscache 65536
# Таймауты
timeouts 1 5 30 60 180 1800 15 60
# Авторизация пользователей по логину/паролю (если требуется). Можно не использовать или указать путь до файла, в котором хранятся данные для авторизации, например, users $/etc/3proxy/.authfile
# Если будете вставлять пароль в формате md5, замените «CL» на «CR», как это указано в примере. Можно использовать 2 способа одновременно.
auth cache strong
users "userproxy:CL:passwordproxy"
users "userproxy2:CR:b89097a7ad0b94f13b3c313ae76699d4 "
# Режим запуска. Обязательно Daemon.
Daemon
# Пишем порт, через который будет происходить http подключение. В примере указан стандартный. Для установки socks подключения используется команда, указанная во второй строке, порт также стандартный.
proxy -p3128
socks -p1080
Мы рассмотрели вариант конфигурационного файла без логирования. Далее создадим файл конфигурации с логированием и авторизацией пользователей, именно он будет использован в дальнейшем при настройке севера.
Обязательно указывайте данные для авторизации, так как сервер может быть обнаружен даже на нестандартных портах.
# Настройка запуска сервера от пользователя userproxy и заданным паролем passwordproxy.
users userproxy:CL:passwordproxy
# Указываем uid и gid пользователя
setgid 995
setuid 997
# Сервера имен (NS-сервера)
nserver 1.1.1.1
nserver 8.8.8.8
# Таймауты
timeouts 1 5 30 60 180 1800 15 60
# Размер кэша (стандартный)
nscache 65536
# Указываем режим запуска
daemon
# Установим http proxy на нестандартном порту 50001. Если на сервере IP-адресов несколько, обязательно укажите конкретный адрес для выхода в сеть. Например, «-e91.150.32.146». В качестве аргумента «i» используется локальный адрес.
proxy –p50001
# Установим аналогично socks proxy на порт 50002
socks –p50002
# Путь к директории с логами, формат логов и ротация прокси
Log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30
На этом настройка основного файла конфигурации подошла к концу. Переходим к завершающему этапу и запуску.
Шаг 7
Создаем файл инициализации для 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 3proxyuser`
RemainAfterExit=yes
Restart=on-failure
[Install]
WantedBy=multi-user.target»
Обратите внимание: в значении «ExecStop» необходимо указать имя пользователя, которое было создано в шаге №5.
После чего необходимо обновить конфигурацию Daemon командой:
systemctl daemon-reload
Шаг 8
Осталось только запустить настроенный 3proxy, добавить его в автозагрузку, а также открыть порты в firewall.
Добавляем в автозагрузку, запускаем и проверяем статус:
systemctl enable 3proxy
systemctl start 3proxy
systemctl status 3proxy
После проверки статуса видим информацию о том, что 3proxy успешно запущен:
Осталось открыть порты:
firewall-cmd --zone=public --add-port=50001/tcp
firewall-cmd --zone=public --add-port=50002/tcp
firewall-cmd –reload
При необходимости перезагружаем сервер. Проверить открылись ли порты можно командой:
firewall-cmd --list-all
Должно быть:
Как видно, оба порта успешно открылись и прослушиваются. На первом http-подключение, на втором socks.
Проверяем подключение через любой удобный сервис:
Все работает. Со своей стороны, мы не рекомендуем использование незащищенного подключения без авторизации по логину/паролю, а также со стандартным набором портов. При настройке файла конфигурации обязательно указывайте логин и создавайте сложный пароль, а также меняйте порты на нестандартные. В исключительных случаях возможно использование авторизации по IP-адресу
Распространенные проблемы
Что-то не работает? Возможно настройка 3proxy была выполнена с ошибкой. Рассмотрим основные проблемы:
Отсутствует подключение
Самой частой проблемой многих пользователей является недоступное подключение при, казалось бы, правильной настройке конфигурационных файлов. Если Вы уверены, что вся настройка произведена верно, хостинг-провайдер не ограничивает выбранный порт и все данные свидетельствуют о рабочем сервисе, проблема может быть в Firewall, а точнее его неправильной настройке. Например, в системе может быть установлено более двух программ, которые будут конфликтовать между собой. Для решения проблемы достаточно использовать один конкретный Firewall. Советуем остановиться только на iptables или firewall-cmd.
Сервис не запускается
Не запускается сервис после настройки всех необходимых файлов конфигурации. Такое возникает в тех случаях, когда пропущен какой-либо шаг по настройке, не выданы соответствующие разрешения или допущена незначительная ошибка в файлах конфигурации. Рекомендуем внимательно изучить инструкцию пошагово еще раз, возможно, Вы что-то упустили. Если ничего не помогает, будет разумнее переустановить ОС и выполнить все шаги с начала. Рекомендуем в качестве тестового конфига использовать sample, который расположен по пути /cfg/3proxy.cfg.sample, а в качестве firewall предустановленный firewall-cmd.
Логирование журналов
Заключительная, но не менее важная проблема связана с хранением файлов. 3proxy при установке занимает несколько мб, но со временем размер может быть увеличен в разы только за счет логирования. Дело в том, что многие пользователи включают запись логов в отдельный файл, но не устанавливают ротацию и не удаляют неактуальные логи. Для решения этой проблемы можно использовать 3 варианта:
- Отключить логирование;
- Периодически удалять неактуальные логи;
- Включить ротацию, как это было выполнено в конфиге выше. Например, «rotate 30» в файле конфигурации означает, что 3proxy будет хранить только 30 последних файлов.
Заключение
Установка и настройка 3proxy на операционных системах CentOS и ArchLinux является достаточно простой, но в то же время и эффективной задачей. В статье были рассмотрены шаги по установке необходимых пакетов, настройке конфигурационных файлов и запуску сервиса. Полученные знания позволят установить и настроить свой прокси-сервер самостоятельно без каких-либо затруднений.