Установим пакет для компиляции программ:
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 внешнего интерфейса