Установка и настройка 3proxy на Ubuntu

Материал из Wikipedia PC-SUPP
Перейти к: навигация, поиск

Введение

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

3proxy.jpg

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

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


Официальный сайт - http://3proxy.ru/
Исходный код на GitHub - https://github.com/z3APA3A/3proxy


Среди альтернатив можно выделить Squid, но он:

  • Сложен в настройках.
  • Потребляет больше ресурсов.
  • Не скомпилирован с поддержкой SSL по умолчанию и сложен для компиляции.

Преимущества и недостатки

Он включает в себя:

  • 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 (версии с 7 по 9) или Ubuntu (версии с 14.04 по 17.04) любой разрядности (32/64 бита).
  • Пользователь с привилегиями root (как вариант доступ через sudo).

Подготовка, скачивание, компиляция

Подготовка

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

Предварительно установим всё необходимое для дальнейшей работы.

sudo apt-get update
sudo apt-get install -y build-essential nano wget tar gzip

Скачивание и распаковка исходников

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

cd ~
wget --no-check-certificate https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz
tar xzf 0.8.12.tar.gz

Компиляция

cd ~/3proxy-0.8.10
sudo make -f Makefile.Linux

Установка

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

sudo mkdir /etc/3proxy
cd ~/3proxy-0.8.10/src
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)

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

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

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

# Запускаем сервер от пользователя proxy3
# (возможно в вашей ОС uid и gid пользователя proxy3
# будут другими. Для их определения воспользуйтесь командой id proxy3)
setgid 115
setuid 109
#
# Пропишите правильные серверы имен посмотрев их
# на своем сервере в /etc/resolv.conf
nserver 8.8.8.8
nserver 77.88.8.8
#
# Оставьте размер кэша для запросов 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

(Для сохранения и закрытия нажмите CTRL+X затем Y)

Комментарии начинаются со знака # и допустимы только с начала строки.

Рекомендуется вообще удалить комментарии для более стабильной работы 3proxy.

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


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

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

Автозагрузка и запуск прокси-сервера

Создаём файл-инициализации:

sudo nano /etc/init.d/3proxyinit

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

#!/bin/sh
#
### BEGIN INIT INFO
# Provides: 3Proxy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Initialize 3proxy server
# Description: starts 3proxy
### END INIT INFO

case "$1" in
start)
echo Starting 3Proxy

/usr/bin/3proxy /etc/3proxy/3proxy.cfg
;;

stop)
echo Stopping 3Proxy
/usr/bin/killall 3proxy
;;

restart|reload)
echo Reloading 3Proxy
/usr/bin/killall -s USR1 3proxy
;;
*)
echo Usage: \$0 "{start|stop|restart}"
exit 1
esac
exit 0

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

nano ~/3proxy-0.8.10/scripts/rc.d/proxy.sh

Делаем файл исполняемым:

sudo chmod +x /etc/init.d/3proxyinit

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

sudo update-rc.d 3proxyinit defaults

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

sudo /etc/init.d/3proxyinit start

В консоли мы увидим сообщение:

Starting 3Proxy

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

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

ps -ela | grep "3proxy"

Открытие порта

Открываем порт (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

Удаление

Удаление временных файлов

rm ~/0.8.10.tar.gz
sudo rm -r ~/3proxy-0.8.10

Удаление 3Proxy (при необходимости)

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

sudo /etc/init.d/3proxyinit stop
sudo rm -rf /etc/3proxy
sudo rm /etc/rc0.d/*proxyinit
sudo rm /etc/rc1.d/*proxyinit 
sudo rm /etc/rc6.d/*proxyinit
sudo rm /etc/rc2.d/*proxyinit
sudo rm /etc/rc3.d/*proxyinit 
sudo rm /etc/rc4.d/*proxyinit
sudo rm /etc/rc5.d/*proxyinit
sudo rm /etc/init.d/3proxyinit
sudo rm -rf /var/log/3proxy
sudo rm /usr/bin/3proxy

Прочее

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

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

Либо использование программы проксификатора.
Например такой как:
WideCap
FreeCap
tun2socks
redsocks
Proxifier
ProxyCap

Настройки для браузера Google Chrome:
Для подключения к сети Google Chrome использует системные настройки прокси-сервера.
В случае Microsoft Windows это настройки можно также найти в Internet Explorer / MS Edge.

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


Затем любые сервисы по проверки IP-адреса, сообщат IP-адрес вашего сервера вместо текущего.

Например, такие как:
https://yandex.ru/internet
https://2ip.ru/
https://ifconfig.co/

P.S. SOCKS-прокси

SOCKS-прокси имеют несколько версий протокола (SOCKSv4/SOCKSv4.5/SOCKSv5) и ряд особенностей. Подробнее описано тут - https://3proxy.ru/howtor.asp

Например SOCKSv4 не поддерживает IPv6 на уровне протокола, в SOCKSv5 есть поддержка IPv6 с помощью отдельного вида запроса, который должен быть реализован в клиентском приложении или соксификаторе. Авторизации по паролю поддерживаются в SOCKS так же как и через HTTP-прокси. SOCKSv5 имеет поддержку UDP.

В шаге-4 в конфиге /etc/3proxy/3proxy.cfg
вместо последней строчки можно одновременную работы с HTTP-прокси настроить - тогда просто добавить в конец строку:

socks -p1080

Параметр (-p1080) это номер порта. Можно другой указать, но этот стандартный.

В шаге-6 при использовании Uncomplicated Firewall (UFW):

sudo ufw allow 1080
sudo ufw enable

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

sudo iptables -I INPUT -p tcp -m tcp --dport 1080 -j ACCEPT
sudo iptables -I INPUT -p udp -m udp --dport 1080 -j ACCEPT

Примечание

  1. В случае наличия 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 отобразит оба адреса.