Contents

Установка 3proxy из исходников.

Установим пакет для компиляции программ:

1
$ apt-get install build-essential

Скачаем исходники отсюда:

1
2
3
$ wget https://github.com/z3APA3A/3proxy/archive/refs/tags/0.9.3.tar.gz -O 3proxy093.tgz
$ tar -zxvf 3proxy093.tgz
$ cd 3proxy-0.9.3

Собираем:

1
2
$ sudo apt install checkinstall
$ make -f Makefile.Linux

Создадим учётную запись для 3proxy:

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

Копируем файл в /usr/bin/, а так же создаём директорию для log-файлов:

1
2
$ sudo mkdir -pv /var/log/3proxy /etc/3proxy
$ sudo cp -v bin/3proxy /usr/bin/

Установим права:

1
$ sudo chown -v proxy3:proxy3 -R /etc/3proxy /usr/bin/3proxy /var/log/3proxy

В конфиге нужно указать setuid и setgid. Узнаем, какие у нас:

1
2
id proxy3
uid=126(proxy3) gid=136(proxy3) groups=136(proxy3)

Создадим конфиг:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cat <<- EOF | tee /etc/3proxy/3proxy.cfg
setgid 136
setuid 126

nserver ns1.zavod.lan
# nserver 192.168.8.1
# nserver 8.8.8.8

nscache 65536
timeouts 1 5 30 60 180 1800 15 60

# ip внешнего интерфейса
external 91.122.226.82
# ip внутреннего интерфейса
internal 192.168.8.1

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
EOF

Запускаем 3proxy и проверяем, что всё работает:

1
$ sudo /usr/bin/3proxy /etc/3proxy/3proxy.cfg

Создадим systemd файл для запуска unit:

Как создавать unit файлы, я почитал тут.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat <<- EOF | sudo tee /etc/systemd/system/3proxy.service
[Unit]
Description=3proxy Proxy Server
After=syslog.target network.target

[Service]
Type=simple
User=proxy3
Group=proxy3
ExecStart=/usr/bin/3proxy /etc/3proxy/3proxy.cfg
RemainAfterExit=yes
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

Перечитаем конфиг файлы юнитов, установим автозапуск и запустим:

1
2
3
4
$ sudo systemctl daemon-reload
$ sudo systemctl enable 3proxy
$ sudo systemctl start 3proxy
$ journalctl --unit=3proxy

Настроим аутентификацию:

  • CL - пароль в виде текста (plain text)
  • CR - зашифрованный пароль (md5)
  • NT - пароль в формате NT

При использовании зашированного пароля с символами $ нужно его заключить в кавычки.

Генерируем пароль die3Aipa с солью Kkyp7:

1
2
3
$ openssl passwd -1 -salt Kkyp7
Password:
$1$Kkyp7$qZgpu9h7vi9.raAZl..Fd/

Добавим в файл /etc/3proxy/3proxy.cfg следующие строки:

cat <<- EOF | sudo tee --append /etc/3proxy/3proxy.cfg не корректно переносит данные со спец символами.

1
2
3
4
users test01:CL:test01
users test03:CL:test03
users "test04:CR:$1$Kkyp7$qZgpu9h7vi9.raAZl..Fd/"
users "test05:CR:$1$Kkyp7$Z42v1BMb8dbN5Ou/mgVJa."

Обратите внимае у пользователей test04 и test05 использована одинаковая соль. Соль используется, чтобы получить разные результаты для одинаковых паролей. Для каждого пользователя нужно использовать разную соль.

Изменим параметр auth в /etc/3proxy/3proxy.cfg для активации. Возможные варианты:

  • none - без авторизации.
  • iponly - авторизация по IP-адресу клиента.
  • nbname - по Netbios имени.
  • strong - по логину и паролю.
1
2
# auth none
auth strong

Добавим ораничение скорости:

1
2
3
4
5
6
7
$ cat <<- EOF | sudo tee --append /etc/3proxy/3proxy.cfg

# ограничение скорости в 1 Мбит/с (1024 * 1024)
bandlimin 1048576 odpantus
# ограничение скорости в 5 Мбит/с (5 * 1024 * 1024)
# bandlimin 5242880 user1,user2
EOF

Перезапустим 3proxy

1
$ sudo systemctl restart 3proxy

SOCKS5 proxy (не заработал)

1
2
3
4
$ cat <<- EOF | sudo tee --append /etc/3proxy/3proxy.cfg

socks -p1080 -i192.168.8.1 -e91.122.226.82
EOF
  • -p1080 - 1080 стандартные порт для SOCKS5
  • -i192.168.8.1 - ip-address внутреннего интерфейса
  • -e91.122.226.82 - ip-address внешнего интерфейса