====== Установка и использование 3proxy на Ubuntu ====== ===== Настройка брандмауэра ===== По умолчанию, в Ubuntu брандмауэр разрешает все подключения. Однако, если у нас настроен фаервол для запрета лишних соединений, необходимо открыть порт для прокси. **а) если используем Iptables.** iptables -I INPUT 1 -p tcp --dport 3128 -j ACCEPT netfilter-persistent save * если система вернет ошибку при вводе команды для сохранения правил, устанавливаем пакет командой **apt-get install iptables-persistent**. **б) если у нас firewalld.** firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload * **3128** — порт по умолчанию, по которому работает 3proxy в режиме прокси; ===== Установка и запуск 3proxy ===== 3proxy отсутствует в репозиториях Ubuntu, поэтому для установки сначала необходимо скачать его исходник. Для начала устанавливаем пакет программ для компиляции пакетов: apt-get install build-essential Переходим на [[https://3proxy.org/download/stable/|официальную страницу загрузки 3proxy]] и копируем ссылку на версию пакета для Linux: ... используя ссылку, скачиваем пакет: wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz * в моем случае будет скачена версия 0.9.3. Распакуем скачанный архив: tar xzf 0.9.3.tar.gz Переходим в распакованный каталог: cd 3proxy-* Запускаем компиляцию 3proxy: make -f Makefile.Linux Создаем системную учетную запись: adduser --system --disabled-login --no-create-home --group proxy3 Создаем каталоги и копируем файл 3proxy в /usr/bin: mkdir -p /var/log/3proxy mkdir /etc/3proxy cp bin/3proxy /usr/bin/ Задаем права на созданные каталоги: chown proxy3:proxy3 -R /etc/3proxy chown proxy3:proxy3 /usr/bin/3proxy chown proxy3:proxy3 /var/log/3proxy Смотрим uid и gid созданной учетной записи: id proxy3 Получим, примерно, такой результат: uid=109(proxy3) gid=113(proxy3) groups=113(proxy3) * где **109** — идентификатор пользователя; **113** — идентификатор для группы. Создаем конфигурационный файл: vi /etc/3proxy/3proxy.cfg setgid 113 setuid 109 nserver 77.88.8.8 nserver 8.8.8.8 nscache 65536 timeouts 1 5 30 60 180 1800 15 60 external 111.111.111.111 internal 111.111.111.111 daemon log /var/log/3proxy/3proxy.log D logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" rotate 30 auth none allow * * * 80-88,8080-8088 HTTP allow * * * 443,8443 HTTPS proxy -n * //необходимо обратить внимание на настройки **setuid** и **setgid** — это должны быть значения для созданной нами учетной записи; **external** и **internal** — внешний и внутренний интерфейсы (если наш прокси работает на одном адресе, то IP-адреса должны совпадать). // Запускаем 3proxy: /usr/bin/3proxy /etc/3proxy/3proxy.cfg ===== Настройка браузера ===== Проверяем работоспособность нашего 3proxy. Для этого настраиваем браузер для работы через прокси-сервер, например, Mozilla Firefox: {{ :linux:proxy-server:3proxy-ubuntu-02.jpg |}} ... пробуем открыть сайты. ===== Настройка автозапуска ===== Для автозагрузки 3proxy настроим его как сервис. Создаем файл в systemd: vi /etc/systemd/system/3proxy.service [Unit] Description=3proxy Proxy Server [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 Обновляем конфигурацию systemd: systemctl daemon-reload Разрешаем запуск сервиса и стартуем его: systemctl enable 3proxy systemctl start 3proxy ===== Настройка аутентификации ===== Для редактирования настроек открываем конфигурационный файл: vi /etc/3proxy/3proxy.cfg Добавляем опции **users** и добавляем пользователей: users 3APA3A:CL:3apa3a "test:CR:$1$qwer$CHFTUFGqkjue9HyhcMHEe1" users dmosk1:CL:password users "dmosk2:CR:$1$UsbY5l$ufEATFfFVL3xZieuMtmqC0" * в данном примере мы добавили 3-х пользователей: **3APA3A** с паролем **3apa3a**, **dmosk1** с открытым паролем **password** и **dmosk2** с паролем **dmosk2** в виде md5 и солью **UsbY5l** (Для получения хэша пароля можно воспользоваться командой **openssl passwd -1 -salt UsbY5l**, где в качестве соли можно использовать любую комбинацию).\\ * обратите внимание, при использовании знака **$**, строчка пишется в кавычках. * возможные типы паролей: * CL — текстовый пароль * CR — зашифрованный пароль (md5) * NT — пароль в формате NT. Чтобы включить запрос логина, необходимо поменять значение для опции **auth** на **strong**: ... auth strong ... * возможные варианты для **auth**: * none — без авторизации. * iponly — авторизация по IP-адресу клиента. * nbname — по Netbios имени. * strong — по логину и паролю. Также можно использовать двойную авторизацию, например: auth nbname strong После внесения изменений, перезапускаем службу: systemctl restart 3proxy ===== SOCKS ===== Для прозрачного прохождения пакетов через прокси можно настроить SOCKS5. В конфигурационном файле добавляем: vi /etc/3proxy/3proxy.cfg socks * запускаем **socks** на порту **1080**. Или: socks -p8083 -i192.168.1.23 -e111.111.111.111 * запускаем **socks** на порту **8083;** внутренний интерфейс — **192.168.1.23**, внешний — **111.111.111.111**. После перезапускаем сервис: systemctl restart 3proxy ===== Настройка анонимности ===== Для обеспечения полной анонимности при использовании прокси-сервера, делаем дополнительные настройки. 1. Меняем порты, которые используются по умолчанию — 3128, 1080. Данные порты известны, как порты для прокси. Открываем конфигурационный файл 3proxy: vi /etc/3proxy/3proxy.cfg Меняем порты: socks -p1088 proxy -n -p3111 * //в данном примере мы укажем серверу работать на портах **3111** и **1088**.// После перезапускаем сервис: systemctl restart 3proxy 2. Необходимо, чтобы время на сервере совпадало с временем на компьютере. На стороне сервера необходимо задать часовой пояс, например, если наш прокси находится в Германии, вводим: timedatectl set-timezone Europe/Berlin На стороне клиента либо меняем часовой пояс в системе, либо устанавливаем плагин для браузера, например, для [[https://addons.mozilla.org/en-US/firefox/addon/change-timezone-time-shift/|Mozilla Firefox]] и меняем часовой пояс уже в нем. 3. Отключение icmp. По времени ответа на ping можно определить отдаленноесть клиента от прокси. Чтобы проверку нельзя было выполнить, отключаем на сервере icmp. Для этого создаем правило в брандмауэре: iptables -I INPUT -p icmp --icmp-type 8 -j REJECT И применяем настройку: netfilter-persistent save 4. Проверяем настройки. Открываем браузер, который работает через прокси и переходим на страницу [[https://2ip.ru/privacy/|2ip.ru/privacy]] — кликаем по **Проверить**: {{ :linux:proxy-server:3proxy-ubuntu-03.jpg |}} Будет выполнена проверка анонимности нашего сервера. ===== Дополнительные настройки ===== Настройки, которые могут не понадобиться. Но они позволят настроить дополнительные возможности прокси-сервера. ==== Настройка портов и прокси-интерфейсов ==== При необходимости, можно настроить 3proxy на использование разных интерфейсов на разных портах: vi /etc/3proxy/3proxy.cfg proxy -n -a -p3128 -i192.168.0.23 -e222.222.222.222 proxy -n -a -p8080 -i192.168.1.23 -e111.111.111.111 *  3proxy будет слушать на порту **3128** с внутреннего интерфейса **192.168.0.23** и направлять пакеты в сеть Интернет через внешний интерфейс **222.222.222.222**, а также, на порту **8080** для внутреннего и внешнего интерфейсов **192.168.1.23** и **111.111.111.111** соответственно.\\ * не забываем также настраивать брандмауэр (вначале инструкции мы открывали только 3128 порт). systemctl restart 3proxy ==== Ограничение пропускной способности ==== При необходимости, можно ограничить скорость. vi /etc/3proxy/3proxy.cfg bandlimin 1000000 user1,user3 bandlimin 5000000 user2,user4 *  в данном примере пользователям **user1** и **user3** установлено ограничение в **1000000** бит/сек (1 мбит); для **user2** и **user4** — 5 мбит/сек. systemctl restart 3proxy ==== Ограничения доступа ==== Можно ограничить доступ и разрешить только для определенных портов, сетей и пользователей. vi /etc/3proxy/3proxy.cfg Синтаксис: allow deny * где: * **userlist** — список пользователей через запятую. * **sourcelist** — сети клиентов через запятую. * **targetlist** — сети назначения через запятую. * **targetportlist** — порты назначения через запятую. * **commandlist** — команды, к которым применяется правило. * **weekdays** — в какие дни недели работает правило. 0 - 6 — Пн - Вс, 7 — тоже Вс. * **timeperiodslist** — время, когда работает правило. Указываются диапазоны. Примеры: allow * * * 80 HTTP allow * * * 443,8443 HTTPS allow * * * 21 FTP *  в данном примере пользователям **user1** и **user3** установлено ограничение в **1000000** бит/сек (1 мбит); для **user2** и **user4** — 5 мбит/сек. Также, ограничить доступ можно по количеству одновременных соединений для каждой службы: maxconn 700 proxy -n -a -p3128 -i192.168.0.23 -e222.222.222.222 proxy -n -a -p8080 -i192.168.1.23 -e111.111.111.111 * таким образом, мы установим **700** максимальных соединений для прокси на порту **3128** и **700** — для proxy на порту **8080**. systemctl restart 3proxy ===== Возможные ошибки ===== Рассмотрим ошибки, с которыми можно столкнуться при настройке 3proxy. ==== Unable to set gid Command: 'setgid' failed with code 1 ==== Ошибка появляется при попытке запустить 3proxy. **Причина:** до ввода команды setgid должна быть введена команда setuid. Ошибка возникает, если в конфигурационном файле наружен порядок. **Решение:** откроем конфигурационный файл: vi /etc/3proxy/3proxy.cfg Убедимся, что сначала идет **setgid**, а за ним **setuid**: setgid ... setuid ...