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

by Anton Chernousov aka GITA-DEV


Опубликовано: 26 Фев 2018 (последние правки 1 месяц, 2 недели)


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

Фактически, мне требовалось настроить проксирование трафика для одного браузера через удаленный хост - это задача достаточно типовая, поэтому сразу перейдем к делу и рассмотрим практическую реализацию этого кейса. 3proxy не входит в штатные пакеты Debian/Ubuntu, поэтому мы соберем его из исходных кодов. Дополнительно расскажу как можно ограничить доступ к 3Proxy-серверу по IP-адресу, если ваш роутер не поддрживает полноценные ограничения по адресам источника (Source IP).

Официальная страничка проекта на 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

Обратите внимание на статьи:


Разработка собственного модуля авторизации для OpenVPN

Разработка собственного модуля авторизации для OpenVPN

Как вы наверное знаете помимо стандартной авторизации по ключам и сертификатам вы можете дополнительно использовать парольную защиту как дополняющий механизм к модели сертификатов или полностью перейти исключительно на парольную авторизацию. Стоит отметить, что защищенность OpenVPN с авторизацией с использованием Login/Password будет гораздо выше чем использование механизмов PPTP например.


OpenVPN-сеть для LXD-кластера без назначения адресов клиентов (использование стороннего DHCP для управления клиентами VPN-сети)

OpenVPN-сеть для LXD-кластера без назначения адресов клиентов (использование стороннего DHCP для управления клиентами VPN-сети)

Представляю вашему вниманию небольшой экскурс в активно используемую мной технологию построения распределенных виртуальных сетей на базе OpenVPN в немного непривычной реализации. Если вы работаете с OpenVPN технологиями, то наверное обратили внимание что практически все руководства описывают OpenVPN сеть где OpenVPN-сервер выступет в качестве DHCP-сервера и назначает адреса для своих клиентов, но я сегодня хотел бы предложить вам уйти от типовых реализаций.


Как сделать Double VPN - Подробная инструкция

Как сделать Double VPN - Подробная инструкция

В мире анонимайзеров нововведение, - Double VPN. Основной особенностью его является то, что сервер к которому мы подключаемся и сервер точкой выхода которого будет исходящий трафик, это два разных сервера, причем желательно расположенные в разных странах. Особой сложности реализация такого механизма не представляет, хотя некоторые интересные моменты там есть. Типовая схема реализации маршрутизации трафика через OpenVPN сервер использует механизм NAT и собственно сам OpenVPN в режиме изменения основного шлюза. В этом случае весь трафик клиента перенаправляется на сервер OpenVPN, где уже направляется далее в сеть Internet с подменой адреса источника.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.