Установка и настройка прокси-сервера 3proxy на Debian/Ubuntu - Академия Selectel

Установка и настройка прокси-сервера 3proxy на Debian/Ubuntu

О том, как установить и настроить прокси-сервер.

Введение

В этой статье мы расскажем, как установить и настроить прокси-сервер. Прокси-сервер (от англ. proxy — «представитель, уполномоченный») выступает в роли посредника в коммуникациях между вашим ПК/мобильным и интернетом.

Причин использовать его может быть множество, включая:

  • обход ограничений доступа к определенным веб-ресурсам установленным администратором локальной сети;
  • обход региональных ограничений доступа у определенных веб-ресурсов;
  • анонимный доступ к веб-ресурсам путем сокрытия реального IP-адреса.

Среди всего многообразия прокси-серверов остановим свой выбор на открытом бесплатном кроссплатформенном сервере 3proxy, опубликованном под BSD-подобной лицензией. Официальный сайт — http://3proxy.ru/.

Исходный код на GitHub — https://github.com/z3APA3A/3proxy

3proxy включает в себя:

  • HTTP прокси с поддержкой HTTPS и FTP.
  • SOCKSv4/SOCKSv4.5/SOCKSv5 прокси.
  • POP3 прокси.
  • SMTP прокси.
  • AIM/ICQ прокси.
  • MSN messenger / Live messenger прокси.
  • FTP прокси.
  • Кэширующий DNS прокси.
  • TCP и UDP портмапперы.

Также доступны дополнительные возможности, такие как:

  • Управление доступом.
  • Ограничение ширины потребляемого канала.
  • Ограничение трафика на день, неделю и месяц.
  • Перенаправление соединений.
  • Построение цепочек соединений.
  • Ротация лог-файлов.
  • Ведение журналов через ODBC и syslog.
  • Поддержка IPv6.

К недостаткам можно отнести:

  • Отсутствие поддержки кеширования веб-страниц.
  • Отсутствие в официальных репозиториях некоторых linux-дистрибутивов (включая Debian и Ubuntu), но в репозиториях Gentoo, RedHat, Alt Linux присутствует.

Технические требования

  • Операционная система Debian GNU/Linux (версии с 9 по 11) или Ubuntu (версии с 18.04 по 21.10) любой разрядности (32/64 бита).
  • Пользователь с привилегиями root (как вариант доступ через sudo).

Шаг 1. Подготавливаем инфраструктуру

Установку и настройку 3proxy мы будем показывать на примере виртуальной машины на платформе Selectel.

В панели управления платформой заходим в раздел «Облачная платформа» — «Серверы», нажимаем кнопку «Создать сервер».

создаем сервер в панели Selectel

Выберем ОС — Ubuntu 20.04, фиксированную конфигурацию — 1 vCPU, 1 ГБ оперативной памяти и 5 ГБ диска. В разделе «Сеть» выберем или создадим подсеть с публичным IP-адресом, чтобы к машине можно было подключаться из интернета. Также проверьте раздел «Доступ»: нужно либо записать пароль от root-пользователя, либо выбрать SSH-ключ.

конфигурация сервера

Когда виртуальная машина будет готова, скопируйте ее IP-адрес:

копируем ip-адрес

Чтобы подключиться к машине, выполните команду, подставив ваш IP-адрес:


    ssh root@<IP-адрес> 

Если вы указали SSH-ключ, то подключиться можно без пароля:


    ssh -i <Путь/до/приватного/ключа> root@<IP-адрес>

Шаг 2. Подготавливаем инструментарий

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


    sudo apt-get update

    sudo apt-get install -y build-essential

Шаг 3. Скачиваем и распаковываем исходники

Последняя версия 0.9.3 (на момент написания руководства). Узнать последнюю версию можно на официальном сайте, при необходимости просто замените цифры на необходимые в следующих командах:


    cd ~

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


    tar xzf 0.9.3.tar.gz

Шаг 4. Компилируем


    cd ~/3proxy-0.9.3


    sudo make -f Makefile.Linux

Шаг 5. Устанавливаем

Копируем получившийся бинарный файл:


    sudo mkdir /etc/3proxy



    cd ~/3proxy-0.9.3/bin

    sudo cp 3proxy /usr/bin/

Создадим отдельного системного пользователя proxy3, от имени которого и будет работать сервер:


    sudo adduser --system --no-create-home --disabled-login --group proxy3

Узнаем UID и GID пользователя командой:


    id proxy3

В ответ, например, получим:


    uid=109(proxy3) gid=115(proxy3) groups=115(proxy3)

Создаем файл настроек:


    sudo nano /etc/3proxy/3proxy.cfg

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


    # Запускаем сервер от пользователя proxy3
# (возможно в вашей ОС uid и gid пользователя proxy3
# будут другими. Для их определения воспользуйтесь командой id proxy3)
setgid 115
setuid 109
#
# Пропишите правильные серверы имен посмотрев их
# на своем сервере в /etc/resolv.conf
nserver 188.93.16.19
nserver 188.93.17.19
#
# Оставьте размер кэша для запросов DNS по умолчанию
nscache 65536
#
# Равно как и таймауты
timeouts 1 5 30 60 180 1800 15 60
#
# Если несколько IP на одном сервере, указываем тот,
# через который будем ходить во внешний мир.
# Иначе эту строку игнорируем
#external <YOURSERVERIP>
# Тоже самое, только указываем IP, который надо слушать
# Если проигнорировать, то прокси слушает все адреса на сервере
#internal <YOURSERVERIP>
#
# Указываем на расположение файла с пользователями и паролями
users $/etc/3proxy/.proxyauth
#
# укажите режим запуска как deamon
daemon
#
# путь к логам и формат лога, к имени лога будет добавляться дата создания
log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
#
# Включаем авторизацию по логинам и паролям
auth cache strong
#
# Конфигурация http(s) proxy
# Запускаем анонимный (-a) HTTP-proxy на порту (-p) 3128 и
# c отключенной NTLM-авторизацией (-n)
proxy -n -p3128 -a


Комментарии начинаются со знака # и допустимы только с начала строки. Рекомендуется также использовать другой порт вместо стандартного 3128 для прокси серверов, лучше всего из диапазона 49152–65535.

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


    nano ~/3proxy-0.9.3/cfg/3proxy.cfg.sample


    nano ~/3proxy-0.9.3/doc/ru/example1.txt

или же в одном из следующих руководств, на которые ссылается официальный сайт:

Вот пример конфигурации без ведения логов:


    setgid 115
setuid 109
nserver 8.8.8.8
nserver 77.88.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
users $/etc/3proxy/.proxyauth
daemon
auth cache strong
proxy -n -p3128 -a

Создаем файл с пользователями и паролями:


    sudo nano /etc/3proxy/.proxyauth

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


    ## addusers in this format:
#user:CL:password
##see for documentation: http://www.3proxy.ru/howtoe.asp#USERS
username:CL:strongpassword

Где логин username и пароль strongpassword следует изменить на свои. Каждый новый пользователь указывается с новой строки. Выставляем права доступа к файлам прокси-сервера:


    sudo chown proxy3:proxy3 -R /etc/3proxy


    sudo chown proxy3:proxy3 /usr/bin/3proxy

    sudo chmod 444 /etc/3proxy/3proxy.cfg


    sudo chmod 400 /etc/3proxy/.proxyauth

Создаем папку для ведения логов и назначаем права на нее:


    sudo mkdir /var/log/3proxy

    sudo chown proxy3:proxy3 /var/log/3proxy

В случае наличия IPv6 на сервере, рекомендуем запускать прокси со следующей строкой в /etc/3proxy/3proxy.cfg:


    proxy -46 -n -p3128 -a -i95.213.255.16 -e95.213.255.16 -e2002:5fd5:ff010::1

Для сервера с IPv4:95.213.255.16 и IPv6:2002:5fd5:ff010::1 у вас же они будут иные. В таком случае будет поддержка IPv6 на выходе с прокси, например, https://yandex.ru/internet отобразит оба адреса.

Шаг 6. Добавляем в автозагрузку и запускаем прокси-сервер

Создаем файл-инициализации для systemd:


    sudo nano/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 -u proxy3`
RemainAfterExit=yes
Restart=on-failure

[Install]
WantedBy=multi-user.target

Еще один вариант скрипта инициализации:


    nano ~/3proxy-0.9.3/scripts/3proxy.service

Теперь нужно обновить конфигурацию systemd:


    sudo systemctl daemon-reload

Добавляем в автозагрузку:


    sudo systemctl enable 3proxy

Запускаем прокси-сервер:


    sudo systemctl start 3proxy

Если с первого раза сервис не запустился, проверьте наличие ошибок:


    systemctl status 3proxy.service

Проблемы с запуском чаще всего связаны с файлом /etc/3proxy/3proxy.cfg. При возникновении ошибки обычно указан порядковый номер проблемной строки.

Также мы увидим его в списке запущенных процессов в ответе на команду:


    ps -ela | grep "3proxy"

Шаг 7. Открываем порт

Открываем порт (3128/tcp) на сервере. Либо указываем свой, который указан в файле /etc/3proxy/3proxy.cfg.

При использовании Uncomplicated Firewall (UFW):


    sudo ufw allow 3128/tcp

    sudo ufw enable

При использовании iptables:


    sudo iptables -I INPUT -p tcp -m tcp --dport 3128 -j ACCEPT

Шаг 8. Настраиваем окружение

Множество программ (включая веб-браузеры) поддерживают работу через прокси по умолчанию. Интерфейс настроек у каждой свой.

Если же программа не поддерживает, то возможна настройка работы всех соединений через прокси в параметрах используемой вами операционной системы.

Либо использование программы проксификатора.

Например такой как:

Для подключения к сети Google Chrome использует системные настройки прокси-сервера.

В случае Microsoft Windows это настройки можно также найти в Internet Explorer / MS Edge.

Настройки для браузера Mozilla Firefox, настройки для Opera и Safari.

Форма с предложением ввода логина и пароля (username:strongpassword) появится, после первой попытки открытия любой веб-страницы.

Затем любые сервисы по проверки IP-адреса, например, такие как:

сообщат IP-адрес вашего сервера вместо текущего.

Шаг 9. Удаляем временные файлы


    rm ~/0.9.3.tar.gz

    sudo rm -r ~/3proxy-0.9.3

Шаг 10. Удаляем 3Proxy (опционально)

Так как установка осуществлялась из исходников, то пакетный менеджер операционной системы бесполезен. Для удаления выполните следующие команды:


    sudo systemctl stop 3proxy.service 

    sudo rm /etc/systemd/system/3proxy.service

    sudo rm -rf /etc/3proxy

    sudo rm -rf /var/log/3proxy

    sudo rm /usr/bin/3proxy

    sudo systemctl daemon-reload

Заключение

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

Таким образом, после выполненных действий вы получаете свой собственный прокси-сервер, который более безопасен для вас, так как ваш трафик заведомо не будет перехвачен и проанализирован третьими лицами, от чего вы не застрахованы при использовании сторонних решений. Хотя с этой точки зрения более эффективна настройка VPN-туннеля с шифрованием.

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