Stunnel как Socks сервер

26/11/2021

stunnel img

Небольшая утилита stunnel позволяет обеспечить ssl шифрование для трафика, который изначально не обладает такой защитой. Однако, использование данной программы не ограничивается обозначенной задачей. Недавно наткнулся на один интересный способ использования данной утилиты. С помощью только stunnel можно организовать Socks прокси без использования дополнительного ПО. При этом это будет простейший вариант для частного применения. Подключать сторонних пользователей будет крайне не разумно при таком варианте. Как это настроить и запустить постараюсь показать в оной статье. В этом процессе также важно понимать, что stunnel устанавливается и настраивается как со стороны серверной части, так и с клиентской. То есть, если вы решили использовать эту утилиту, придется заморачиваться на конфигурацию также и клиентской стороны.

Настройка серверной части

Для конфигурации сервера нам необходимо скачать и установить утилиту stunnel на хост. Так в Ubuntu это можно сделать с помощью следующей команды (сразу оговорюсь, что в Ubuntu 18.04 пакет stunnel из общего репозитария имеет баг, поэтому необходимо воспользоваться установкой из исходников):

# sudo apt-get update
# sudo apt install stunnel4

Для аутентификации при работе туннеля мы будем использовать сертификаты x.509. Для этого перейдем в папку /etc/stunnel и создадим необходимые файлы с помощью утилиты openssl.

# cd /etc/stunnel
# sudo openssl genrsa -out key.pem 2048
# sudo openssl req -new -x509 -key key.pem -out cert.pem -days 3650
# cat key.pem cert.pem >> stunnel.pem

Теперь необходимо создать файл конфигурации /etc/stunnel/stunnel.conf, в котором будет указано как stunnel будет работать на сервере. В частности, в нашем текущем примере мы настроим глобальные переменные, такие как рабочая директория, пользователь и группа, от которых будет запускаться stunnel. Кроме этого в конфигурационном файле указывается сервсис socks, который будет использоваться нами в данном примере. Так соединения на сервер будут приниматься на TCP порт 23456 на всех интерфейсах.

chroot = /var/lib/stunnel4
pid = /stunnel.pid
output = /stunnel.log
setuid = stunnel4
setgid = stunnel4
socket = l:TCP_NODELAY=1

[socks]
protocol = socks
accept = 23456
cert=/etc/stunnel/cert.pem
key=/etc/stunnel/key.pem

Для того, чтобы сервис stunnel стартовал автоматически нам необходимо отредактировать файл /etc/default/stunnel4. Строка с параметром ENABLED должна выглядеть следующим образом.

ENABLED=1

После редактирования файла необходимо сохранить его.

Теперь перезапустим службу stunnel в операционной системе с помощью следующей команды и сервис должен полноценно заработать и начать принимать входящие соединения.

# sudo /etc/init.d/stunnel4 restart

После настройки и запуска stunnel в работу, в случае использования фаервола на сервере, нужно будет сконфигурировать соответствующие правила для приема входящих соединений. Как это сделать, оставлю за рамками данной статьи.

Настройка клиентской части

Для того, чтобы туннель заработал, нам необходимо установить и настроить stunnel на клиентской стороне. Это можно сделать на операционной системе MS Windows, различных дистрибутивах Linux или Mac OS. К пример, для техники Apple установка stunnel производится через менеджер пакетов Homebrew следующим образом в консоли.

# brew install stunnel

После того, как пакет будет установлен на Mac OS, создадим директорию, где будут находиться конфигурационные файлы. Перейдем в нее и скопируем с помощью команды scp файл stunnel.pem с сервера. Также создадим в этой директории конфигурационный файл stunnel.conf, со следующим содержимым.

output = /var/log/stunnel4/stunnel.log
client = yes

[socks]
cert = stunnel.pem
accept = 127.0.0.1:1178
connect = xx.xx.xx.xx:23456

В данном файле мы указываем stunnel работать в качестве клиента. При этом обозначается сервис socks, который будет принимать подключения на интерфейсе localhost TCP:1178 порту клиентского компьютера и перенаправлять их на удаленный сервер на TCP:23456 порт.

Чтобы клиентская часть заработала, запустим сервис следующим образом.

# sudo stunnel ./stunnel.conf

Теперь достаточно указать в настройках браузера на клиентском компьютере SOCKS прокси сервер — localhost:1178 и вуаля трафик пойдет через сконфигурированный ssl туннель.

Напоследок ниже покажу команду, с помощью которой можно остановить stunnel на клиентском компьютере в случае необходимости.

# sudo pkill stunnel

Резюме

Для многих администраторов создание SOCKS прокси сервера ограничивается возможностями SSH. Да, это наиболее простой и легкий способ его реализации. С помощью stunnel эту задачу можно также решить без лишних сложностей, что будет полезно при невозможности использования ssh туннелей по тем или иным причинам. Вообщем, stunnel — это дополнительный полезный инструмент, который способен решать разнообразные задачи в системном администрировании.

Добавить комментарий

Ваш адрес email не будет опубликован.