Настройка простого SOCKS5-прокси сервера в Debian Linux


Официальная страничка проекта на GitHub расположена по адресу https://github.com/z3APA3A/3proxy.git, нам понадобится подготовить окружение для сборки и собрать приложение из исходных кодов (в общем, ничего нового):

# apt-get install -y build-essential git tar gzip
# cd /usr/src/
# git clone https://github.com/z3APA3A/3proxy.git
# cd ./3proxy/
# make -f Makefile.Linux

Собирается бинарный файл без скриптов установки и нам придется самостоятельно скопировать бинарный файл proxy-сервера и его каталог конфигурации:

# cp ./src/3proxy /usr/local/bin/
# cp ./cfg/3proxy.cfg.sample /etc/3proxy.cfg

Естественно, что запускать это приложение от имени супер-пользователя root не стоит, поэтому создадим группу и пользователя 3proxy:

# useradd 3proxy
# passwd 3proxy

Пароль пользователя я задал для тестирования на период отладки, вы можете не задавать ему пароль или вообще сделать пользователя системным. Конфигурационный файл довольно простой и мы его еще больше упростим и 3proxy будет у нас работать только как SOCKS5-прокси без авторизации, а удаленный доступ к прокси-серверу мы ограничим средствами роутера.

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

В конфигурации прокси-сервера setgid и setuid - это ID-пользователя 3proxy полученные командой:

# id 3proxy

Не забываем сменить владельца на каталоге с логами и конфигурационном файле:

# mkdir /var/log/3proxy
# chown 3proxy:3proxy /var/log/3proxy
# chown 3proxy:3proxy /etc/3proxy.cf

Тестовый запуск можно провести командой:

# 3proxy /etc/3proxy.cfg

Проверьте, что SOCKS5-прокси сервер принимает соединения и, в случае ошибки, проверьте лог-файлы в каталоге /var/log/3proxy. Если тестирование прошло успешно, можно остановить демон и создать сервис SystemD для автоматического запуска при старте сервера:

# killall 3proxy

Файл описания сервиса (файл /lib/systemd/system/3proxy.service) содержит следующие записи:

[Unit]
Description=3Proxy SOCKS5 Daemon
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/bin/3proxy /etc/3proxy.cfg

[Install]
WantedBy=multi-user.target

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

# systemctl enable 3proxy
# systemctl start 3proxy

Для проверки того, что автозапуск проходит корректно можно перезапустить весь сервер, если там ничего важного не запущено. Дополнительно расскажу как можно ограничить доступ к 3Proxy-серверу по IP-адресу, если ваш роутер не поддерживает полноценные ограничения по адресам источника (Source IP).

В этом случае, вам потребуется привести конфигурацию 3proxy к следующему виду:

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"
auth iponly
allow * 178.49.118.251
socks -p3128 -a