Установка и настройка прокси-сервера 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.
В панели управления платформой заходим в раздел «Облачная платформа» — «Серверы», нажимаем кнопку «Создать сервер».
Выберем ОС — Ubuntu 20.04, фиксированную конфигурацию — 1 vCPU, 1 ГБ оперативной памяти и 5 ГБ диска. В разделе «Сеть» выберем или создадим подсеть с публичным IP-адресом, чтобы к машине можно было подключаться из интернета. Также проверьте раздел «Доступ»: нужно либо записать пароль от root-пользователя, либо выбрать SSH-ключ.
Когда виртуальная машина будет готова, скопируйте ее 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
или же в одном из следующих руководств, на которые ссылается официальный сайт:
- https://3proxy.ru/doc/man3/3proxy.cfg.3.html
- https://3proxy.ru/doc/3proxy_for_dummies.rtf
- https://3proxy.ru/howtor.asp
- https://3proxy.ru/howtoe.asp
Вот пример конфигурации без ведения логов:
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-записи. В целом он хорош тем, что является маленьким и простым, но в то же время функциональным.