В виду факта работы «Роскомнадзора» на территории Российской Федерации в сфере связи, информационных технологий и массовых коммуникаций все делается чтобы Мы обычные системные администраторы и пользователи испытывали трудности в получении информации: Привет torrent популярного ресурса где я черпал книги и журналы для расширения своего кругозора и самообучения. Я же задался вопрос, как вернуть в целях только самообразования доступ к заблокируемому — и выходом из этой ситуации с блокировками стал сервис именуемый, как 3proxy. С его помощью я получил то что как я думал ранее было для меня потерянным. И об его разворачивании на своем подконтрольном сервисе и пойдет речь в данной заметке, все действия ниже были и проделаны и успешно работают на Ubuntu 18.04 Server amd64

Socks сервис на Ubuntu Trusty

Цель: Настроить прокси для захода на определенный хост через определенный браузер.

Все действия будут проделываться на Ubuntu 18.04 Server amd64

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ uname -a

Linux srv-bionic 4.15.0-42-generic #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

ekzorchik@srv-bionic:~$ cd /opt/

ekzorchik@srv-bionic:/opt$ sudo git clone https://github.com/z3APA3A/3proxy.git

ekzorchik@srv-bionic:/opt$ cd 3proxy/

Читаем файл README и в нем указаны шаги по инсталляции:

ekzorchik@srv-bionic:/opt/3proxy$ ln -s Makefile.Linux Makefile

ln: failed to create symbolic link 'Makefile': Permission denied

ekzorchik@srv-bionic:/opt/3proxy$ sudo ln -s Makefile.Linux Makefile

ekzorchik@srv-bionic:/opt/3proxy$ sudo make

ekzorchik@srv-bionic:/opt/3proxy$ sudo make install

Proxy admin password: в рамках этой заметки путь будет 712mbddr@

3proxy installed.

use

service 3proxy start

to start proxy

service 3proxy stop

to stop proxy

/etc/3proxy/conf/add3proxyuser.sh

to add users

Default config uses Google's DNS.

It's recommended to uss provider supplied DNS or install local recursor, e.g. pdns-recursor.

Configure preferred DNS in /etc/3proxy/conf/3proxy.cfg.

ekzorchik@srv-bionic:/opt/3proxy$ cd ~

Проверяю, в какой место установилось приложение 3proxy:

ekzorchik@srv-bionic:~$ whereis 3proxy

3proxy: /bin/3proxy /etc/3proxy /usr/local/3proxy /opt/3proxy/bin/3proxy /usr/share/man/man8/3proxy.8

Отлично, ничего переносить никуда не нужно, как я видел во многих руководствах.

ekzorchik@srv-bionic:~$ sudo cp /etc/3proxy/3proxy.cfg /etc/3proxy/3proxy.cfg.backup

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

ekzorchik@srv-bionic:~$ sudo useradd 3proxy

ekzorchik@srv-bionic:~$ sudo passwd 3proxy

Enter new UNIX password: 712mbddr@

Retype new UNIX password: 712mbddr@

passwd: password updated successfully

ekzorchik@srv-bionic:~$ id 3proxy

uid=1001(3proxy) gid=1001(3proxy) groups=1001(3proxy)

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/3proxy.cfg

#!/bin/3proxy

daemon

pidfile /var/run/3proxy/3proxy.pid

setgid 1001

setuid 1001

nserver 8.8.8.8

nserver 8.8.4.4

nscache 65536

timeouts 1 5 30 60 180 1800 15 60

daemon

log /var/log/3proxy/3proxy.log D

logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"

allow *

socks -p1080 -a

После не забываем сохранить внесенные изменения.

Строка logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" расшифровывается, как:

  • _L — локальное время
  • %t – Timstamp (in seconds since 01-Jan-1970)
  • %. – milliseconds
  • %N – service Name
  • %p – service Port
  • %E – Error code
  • %U — Username
  • %C – Client IP
  • %c – Client port
  • %R – Remote IP
  • %r – Remote port
  • %O – bytes Out
  • %I – bytes In
  • %h – Hops (redirections) count
ekzorchik@srv-bionic:~$ sudo rm -Rf /var/log/3proxy

ekzorchik@srv-bionic:~$ sudo mkdir /var/log/3proxy

ekzorchik@srv-bionic:~$ sudo chown 3proxy:3proxy /var/log/3proxy

ekzorchik@srv-bionic:~$ sudo chown 3proxy:3proxy /etc/3proxy/3proxy.cfg

ekzorchik@srv-bionic:~$ sudo killall 3proxy

ekzorchik@srv-bionic:~$ sudo 3proxy /etc/3proxy/3proxy.cfg

ekzorchik@srv-bionic:~$ sudo netstat -tulpn | grep 3proxy

tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 12110/3proxy

ekzorchik@srv-bionic:~$ sudo tail -f /var/log/3proxy/3proxy.log.2019.01.13 | head -n 1

1547382491.305 SOCKS.1080 00000 - 0.0.0.0:1080 0.0.0.0:0 0 0 0 bind():_Address_already_in_use

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

ekzorchik@srv-bionic:~$ sudo killall 3proxy

Файл описания сервиса:

ekzorchik@srv-bionic:~$ sudo nano /lib/systemd/system/3proxy.service

[Unit]

Description=3Proxy SOCKS5 Daemon

Wants=network-online.target

After=network-online.target

[Service]

Type=forking

ExecStart=/bin/3proxy /etc/3proxy/3proxy.cfg

[Install]

WantedBy=multi-user.target

На заметку: Не указывать путь до 3proxy вида: /opt/3proxy/bin/3proxy

Активируем автозапуск и запускаем:

ekzorchik@srv-bionic:~$ sudo systemctl enable 3proxy

Synchronizing state of 3proxy.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable 3proxy

ekzorchik@srv-bionic:~$ sudo systemctl start 3proxy

ekzorchik@srv-bionic:~$ sudo systemctl status 3proxy | head -n5

● 3proxy.service - 3Proxy SOCKS5 Daemon

Loaded: loaded (/lib/systemd/system/3proxy.service; enabled; vendor preset: enabled)

Active: active (exited) since Sun 2019-01-13 15:18:12 MSK; 14min ago

Tasks: 0 (limit: 2322)

CGroup: /system.slice/3proxy.service

На заметку: Если после активации сервиса вносите в файл конфигурации изменения то нужно сделать:

ekzorchik@srv-bionic:~$ sudo systemctl daemon-reload

Проверяю от имени кого запущен сервис 3proxy:

ekzorchik@srv-bionic:~$ ps auxf | grep 3proxy

3proxy 12392 0.3 0.2 997648 5064 ? Ssl 15:46 0:00 /bin/3proxy /etc/3proxy/3proxy.cfg

ekzorchik@srv-bionic:~$ ls /var/log/3proxy/3proxy.log.2019.01.13 -lh

-rw-r--r-- 1 3proxy 3proxy 30K Jan 13 16:10 /var/log/3proxy/3proxy.log.2019.01.13

Все правильно, от созданной учетной записи 3proxy.

Теперь можно взять запустить браузер и прописать настройки на использование socks сервиса:

Win — Firefox (на Ubuntu 18.04 Desktop amd64 version: 64.0 (64-бит) — Открыть меню — Настройки — Основные — (Параметры сети) Настроить… – отмечаю «Ручная настройка прокси» и прописываю:

  • Узел SOCKS: 172.33.33.25
  • Порт 1080
  • отмечаю использование SOCKS 5

и нажимаю OK

Далее пробую открыть какой-либо сайт, к примеру http://www.ekzorchik.ru и получаю его содержимое.

Если посмотреть на логи:

1547383565.868 SOCKS.1080 00000 - 0.0.0.0:1080 0.0.0.0:0 0 0 0 Accepting_connections_[12392/655701760]

1547383574.505 SOCK5.1080 00000 - 172.33.33.16:60190 173.194.221.104:443 0 0 0 CONNECT_173.194.221.104:443

то в них видно обращение браузера к URL строке.

Дополнения к заметке.

Задача: Чтобы ограничить доступ к 3proxyсерверу по IPадресу:

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/3proxy.cfg

allow * 172.33.33.16

ekzorchik@srv-bionic:~$ sudo systemctl restart 3proxy && sudo systemctl status 3proxy | head -n5 | grep active

Active: active (running) since Sun 2019-01-13 15:52:53 MSK; 36ms ago

Задача: Добавить аутентификацию к использованию 3proxy сервиса:

ekzorchik@srv-bionic:~$ sudo systemctl stop 3proxy

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/3proxy.cfg

#!/bin/3proxy

daemon

pidfile /var/run/3proxy/3proxy.pid

setgid 1001

setuid 1001

nserver 8.8.8.8

nserver 8.8.4.4

nscache 65536

timeouts 1 5 30 60 180 1800 15 60

daemon

log /var/log/3proxy/3proxy.log D

logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"

allow *

socks -p1080 -a

users ekzorchik:CL:712mbddr@

auth strong

ekzorchik@srv-bionic:~$ sudo systemctl restart 3proxy && sudo systemctl status 3proxy | head -n5 | grep active

Active: active (running) since Sun 2019-01-13 15:57:46 MSK; 29ms ago

Проверяю, к примеру на Firefox, ранее я указал только IP:PORT при запуске браузера получаю уведомление, что я должен войти в эту сеть перед тем как получу доступ в интернет → нажимаю «Открыть страницу входа в сеть»

Уведомление, что я должен войти в сеть прежде чем получу доступ

вот только нет ни какой страницы входа, меня перекинуло на

Ошибка указания HTTP прокси вместо Socks

что это? Это у меня в настройки прокси сервера была указан HTTP прокси.

К примеру настройки работы через socks5 для OwnCloud Client

Настройки Socks для OwnCloud Client

Создавая файлы на хранилище в логах 3proxy получаю обращения:

1547384613.140 SOCK5.1080 00000 ekzorchik 172.33.33.16:35642 172.35.35.6:443 1397 1286 0 CONNECT_172.35.35.6:443

значит все работает.

Задача: Ограничить доступ к 3proxy определенному списку IP адресов. Читаю man 3proxy.cfg и там есть синтаксис вида:

allow <userlist> <sourcelist> <targetlist> <targetportlist> <opera‐

tionlist> <weekdayslist> <timeperiodslist>

ekzorchik@srv-bionic:~$ sudo systemctl stop 3proxy

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/allow.txt

172.33.33.7

172.33.33.16

ekzorchik@srv-bionic:~$ sudo chown 3proxy:3proxy /etc/3proxy/allow.txt

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/3proxy.cfg

#!/bin/3proxy

daemon

pidfile /var/run/3proxy/3proxy.pid

setgid 1001

setuid 1001

nserver 8.8.8.8

nserver 8.8.4.4

nscache 65536

timeouts 1 5 30 60 180 1800 15 60

daemon

log /var/log/3proxy/3proxy.log D

logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"

flush

allow * $"/etc/3proxy/allow.txt"

socks -p1080 -a

users ekzorchik:CL:712mbddr@

auth strong

ekzorchik@srv-bionic:~$ sudo systemctl restart 3proxy && sudo systemctl status 3proxy | head -n5 | grep active

Active: active (running) since Sun 2019-01-13 16:25:19 MSK; 35ms ago

Задача: Ограничить доступ к 3proxy определенному списку IP адресов и аутентификационных данных. Читаю man 3proxy.cfg или на официальном сайте справку на русском (https://3proxy.ru/howtor.asp)

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/users.txt

alektest:CL:Aa1234567@!

alektest1:CL:Aa1234567@!1

alektest2:CL:Aa1234567@!2

alektest3:CL:Aa1234567@!3

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/allow.txt

#только если адрес на мой системе, а это через Wifi

172.33.33.7

ekzorchik@srv-bionic:~$ sudo chown 3proxy:3proxy /etc/3proxy/users.txt

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/3proxy.cfg

#!/bin/3proxy

daemon

pidfile /var/run/3proxy/3proxy.pid

setgid 1001

setuid 1001

nserver 8.8.8.8

nserver 8.8.4.4

nscache 65536

timeouts 1 5 30 60 180 1800 15 60

daemon

log /var/log/3proxy/3proxy.log D

logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"

flush

allow * $"/etc/3proxy/allow.txt"

socks -p1080 -a

users $"/etc/3proxy/users.txt"

auth strong

ekzorchik@srv-bionic:~$ sudo systemctl restart 3proxy && sudo systemctl status 3proxy | head -n5 | grep active

Active: active (running) since Sun 2019-01-13 16:30:00 MSK; 30ms ago

Ответ да, я смог подключиться через OwnCloud клиент только тогда когда у меня IP адрес 172.33.33.7

Задача выполнена.

Задача: Поднять два прокси сервиса на одной системе. Один порт 3128 только для определенных IP и связки логин+pass + все ресурсы, другой порт 3129 только для определенных IP и связки логин+пасс + действует правило запрета хождения на определенные ресурсы. См. Примеры:ekzorchik@srv-bionic:~$ sudo nano /opt/3proxy/cfg/3proxy.cfg.sample

Файл deny.txt с перечнем ресурсов: ya.ru

flush

auth strong

allow * $"/etc/3proxy/allow3128.txt"

socks -p3128 -a

users $"/etc/3proxy/users3128.txt"

#для 3129 не работает.

socks -p3129 -a

auth strong

flush

allow * $"/etc/3proxy/allow3129.txt"

users $"/etc/3proxy/users3129.txt"

deny $"/etc/3proxy/deny.txt"

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/allow3128.txt

172.33.33.16

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/users3128.txt

alektest:CL:Aa1234567

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/allow3129.txt

172.33.33.16

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/users3129.txt

alektest:CL:Aa1234567

ekzorchik@srv-bionic:~$ sudo nano /etc/3proxy/deny.txt

ekzorchik.ru

ekzorchik@srv-bionic:~$ sudo chown 3proxy:3proxy /etc/3proxy/*.txt

ekzorchik@srv-bionic:~$ sudo systemctl restart 3proxy && sudo systemctl status 3proxy | head -n5 | grep active

Active: active (running) since Sun 2019-01-13 16:58:01 MSK; 73ms ago

ekzorchik@srv-bionic:~$ sudo netstat -tulpn | grep 3proxy

tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 21025/3proxy

tcp 0 0 0.0.0.0:3129 0.0.0.0:* LISTEN 21025/3proxy

Проверим, если для порта 3129 закомментируем параметр users и проверим на примере браузера: (это ниже работает, доступ только с адреса в файле)

flush

auth iponly

allow * $"/etc/3proxy/allow3129.txt"

socks -p3129 -a

Проверим, если для порта 3128 — OwnCloud Client успешно подключился.

На заметку: Порядок в конфигурационном файле настроек очень важен:

flush

auth

deny

allow

tcppm

socks

Вывод: Получаем я могу где-либо поднять свой собственный socks сервис с доступом по логин и паролю и использовать его к примеру в Telegram если так не заходит. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru