Шифрование SOCKS-трафика с помощью Stunnel
Протокол SOCKS позволяет пересылать пакеты между сервером и клиентом через промежуточный (прокси) узел. Главным минусом SOCKS является отсутствие шифрования. Частично это можно скомпенсировать использованием поверх SOCKS протоколов со встроенным шифрованием. Однако и тут не всё идеально: если используется SOCKS5 с авторизацией по логину и паролю то логин и пароль от прокси передаются по сети без шифрования.
Stunnel это программное обеспечение позволяющее «пробросить» tcp-соединение поверх другого tcp-соединения с использованием шифрования. При использовании Stunnel можно обеспечить безопасное соедиение с сервисами, не поддерживающими шифрование. Платой за безопасность будет некоторое усложнение конфигурации как сервера, так и клиента.
Далее будет показано как добавить шифрование с помощью Stunnel к SOCKS5-прокси, описанному некоторое время назад. Краткое описание схемы: клиент вместо прямого соединения с проски подключается к Stunnel, запущенному на локальной машине в режиме клиента, Stunnel-клиент подключается к Stunnel-серверу, и он уже подключается к прокси.
stunnel trad
Настройка сервера
Приступаем к настройке. Для начала установим Stunnel на нашу VPS с прокси-сервером:
apt-get install stunnel
Далее генерируем сертификат, с помощью которого будет обеспечиваться шифрование:
openssl req -new -x509 -days 3650 -nodes -out /etc/stunnel/stunnel.pem -keyout /etc/stunnel/stunnel.pem
Сразу создадим копию сертификата в формате PKCS12. На сервере она не нужна, но некоторым типам клиентов может понадобиться:
openssl pkcs12 -export -inkey /etc/stunnel/socks.pem -in /etc/stunnel/socks.pem -out /etc/stunnel/socks.p12
Закончив с сертификатами нужно создать файл конфигурации туннеля. В нашем случае это будет «/etc/stunnel/socks.conf» следующего содержания:
# Путь к сертификату cert = /etc/stunnel/socks.pem # Разрешаем использовать шифрование compression = deflate # Сюда будем писать лог output = /var/log/stunnel4/socks.log # Собственно описание сервиса [socks] # Режим сервера client = no # tcp-порт, на котором буду ожидаться входящие соединения accept = 8089 # Сервис, к которому будем пересылать трафик дальше connect = 45.67.78.90:8088 # Будем учитывать файлы /etc/hosts.allow и /etc/hosts.deny libwrap = yes
Здесь «45.67.78.90:8088» это IP и порт нашего SOCKS-прокси, который мы «оборачиваем» в Stunnel
После этого включаем сервис и запускаем его:
echo ENABLED=1 >> /etc/default/stunnel4 service stunnel4 restart
На этом настройка сервера заканчивается и можно приступать к настройке клиентов.
Настройка Linux-клиента
На клиентской машине под управлением Linux необходимо как и на сервере установить пакет «stunnel4», затем скопировать с сервера файл сертификата («/etc/stunnel/socks.pem») и сохранить его под именем «/etc/stunnel/socks.pem». Наконец создать файл конфигурации («/etc/stunnel/socks.conf»):
VPNTunnel: Stunnel + OpenVPN Installation Guide for Windows 10
# Путь к сертификату CAfile = /etc/stunnel/socks.pem # Сюда будем писать лог output = /var/log/stunnel4/socks.log # Будем проверять чтобы сертификат сервера совпал с нашим verify = 4 # Собственно наш сервис [socks] # Режим клиента client = yes # Здесь мы будем ждать входящие соединения accept = 127.0.0.1:8088 # Адрес нашего stunnel-сервера connect = 45.67.78.90:8089
Здесь «45.67.78.90:8088» это IP и порт нашего Stunnel-сервера. Закончив конфигурацию включаем сервис и запускаем его:
echo ENABLED=1 >> /etc/default/stunnel4 service stunnel4 restart
На этом настройка клиента заканчивается. Теперь в качестве SOCKS-прокси в приложениях можно указывать адрес «127.0.0.1» и порт «8088».
Настройка Windows-клиента
На Windows первым делом надо скачать стабильную версию stunnel для windows и установить на свой компьютер. В процессе установки будет предложено создать сертификат. Можно создавать с любыми данными, так как нам он не понадобится.
После установки необходимо скопировать файл «socks.pem» с сервера в директорию «C:Program Files (x86)Stunnelconfig». Затем кликнув правой кнопкой мыши по значку Stunnel в системном лотке в открывшемся меню выбрать «Edit Configuration».
Конфигурация для Windows практически не отличается от таковой для Linux и имеет вид:
# Путь к сертификату CAfile = socks.pem # Будем проверять чтобы сертификат сервера совпал с нашим verify = 4 # Собственно наш сервис [socks] # Режим клиента client = yes # Здесь мы будем ждать входящие соединения accept = 127.0.0.1:8088 # Адрес нашего stunnel-сервера connect = 45.67.78.90:8089
После сохранения новой конфигурации нужно в меню stunnel выбрать пункт «Reload Configuration» и можно начинать пользоваться.
Настройка Android-клиента
На смартфонах под управлением ОС Android есть несколько приложений реализующих возможности Stunnel. Автору этих строк больше всего приглянулся SSLDroid: простые настройки, стабильная работа на Android 7.0, поддержка одновременно нескольких туннелей.
Настройка очень проста: необходимо загрузить на устройство сертификат нашего Stunnel-сервера в формате PKCS12, запустить создание нового туннеля, указать имя туннеля, порт на котором будут ожидаться входящие соединения, хост и порт нашего Stunnel-сервера и путь к файлу сертификата. Примерно так:
Дальше надо сохранить настройки, и в меню приложения выбрать запуск сервиса. После этого можно смело подключаться к SOCKS-прокси с адресом «127.0.0.1» и портом, который был указан как локальный.
Настройка iOS-клиента
Очень хотелось написать этот раздел, однако не получилось: stunnel-клиентов для iOS в App Store нет. Есть сборки stunnel от энтузиастов, но они требуют устройства с JailBreak. Потому к сожалению использовать stunnel на iOS в настоящий момент невозможно.
Вместо заключения
Stunnel позволяет добавить шифрование туда, где оно не предусмотрено изначально. Однако не стоит забывать что stunnel можно сконфигурировать небезопасным образом (без верификации сертификатов), допускающим MITM-атаку. Потому настройку stunnel следует доверять только опытным и проверенным администраторам.
На этом всё. Приятной работы!
Источник: www.ylsoftware.com
Stunnel на сервере и клиенте
Обеспечить доступ из «везде где есть интернет» к некоему ПО. Шифровать траффик между клиентской и серверной частью приложения, которое не умеет работать через SSL. Так же нужно иметь возможность ограничивать доступ некоторым пользователям при необходимости. По различным причинам основные реализации VPN отпали. В процессе поиска решения наткнулся на Stunnel, который идеально подошел.
В данной статье постараюсь детально описать процесс настройки.
Статья по большей части составлена из рабочих заметок в довесок с претензиями на туториал, поэтому прошу спокойно относится к капитанству вида — «Первое, что мы сделаем — обновим систему».
Общее представление схемы работы:
ПО клиент (windows) > Stunnel > Интернет > Stunnel > ПО Сервер (linux)
Система: свежеустановленная ubuntu server 14.04 x64.
Приложение трафик которого нужно шифровать я называть не буду. Вместо него буду указывать ssh. Для теста подходит идеально, на мой взгляд.
Приступим
Первое, что мы сделаем — обновим систему:
sudo apt-get update sudo apt-get upgrade
Настроим и включим ufw:
sudo ufw allow 22/tcp sudo ufw allow 443/tcp sudo ufw enable
sudo apt-get install stunnel4
- /var/lib/stunnel4 здесь будет chroot окружение
- /etc/stunnel любой файл в этом каталоге оканчивающийся на .conf будет считаться конфигом
- /usr/share/doc/stunnel4/examples с примером конфига внутри
Проведем некоторые подготовительные мероприятия.
Разрешим автозапуск. В файле /etc/default/stunnel4 заменим ENABLED=0 на ENABLED=1:
sudo nano /etc/default/stunnel4
Создадим папки для клиентских сертификатов. certs — разрешенные, crls — запрещенные (отозванные). О самих сертификатах чуть позже.
sudo mkdir /var/lib/stunnel4/certs sudo mkdir /var/lib/stunnel4/crls
Создадим лог-файл и сменим владельца.
Я не считаю размещение логов в месте отличном от /var/log хорошей идеей, но заставить stunnel писать логи за пределы окружения мне не удалось.
sudo touch /var/lib/stunnel4/stunnel.log sudo chown stunnel4:stunnel4 /var/lib/stunnel4/stunnel.log
Я буду использовать свой конфиг, но если он вам не подходит можно взять пример в /usr/share/doc/stunnel4/examples
Создадим конфигурационный файл:
sudo nano /etc/stunnel/stunnel.conf
Со следующим содержимым:
; ************************************************************************** ; * Global options * ; ************************************************************************** ; Каталог chroot окружения. chroot = /var/lib/stunnel4/ setuid = stunnel4 setgid = stunnel4 ; Создается в окружении pid = /stunnel4.pid ; Уровень болтливости debug = 7 ; Лог-файл output = /stunnel.log ; Не использовать syslog syslog = no ; ************************************************************************** ; * Service defaults may also be specified in individual service sections * ; ************************************************************************** ; Сертификат/ключ сервера cert = /etc/stunnel/servercert.pem key = /etc/stunnel/serverkey.pem ; Проверка сертификата. 0 — не проверять, 1 — проверять при наличии, 2 — проверять всегда, . verify = 2 ; Каталог для разрешенных сертификатов. ; Находится в окружении.
Для каждого сертификата должна быть хэш-ссылка CApath = /certs ; Каталог для запрещенных (отозванных) сертификатов. ; Находится в окружении. Для каждого сертификата должна быть хэш-ссылка CRLpath = /crls ; Не использвать SSLv2 options = NO_SSLv2 ; ************************************************************************** ; * Service definitions (remove all services for inetd mode) * ; ************************************************************************** [ssh] ; Принимать соединения на интерфейс:порт или просто порт.
Например accept = 192.168.0.1:443 accept = 443 ; Отдавать приложению на интерфейс:порт или просто порт. Например connect = 127.0.0.1:22 connect = 22
Ключи и сертификаты
Не большое отступление. В нашем случае stunnel проверяет только корректность пары сертификат/ключ и наличие сертификата в разрешенных или запрещенных.
Самоподписанного сертификата более чем достаточно, и с технической стороны (stunnel) и со стороны поставленной задачи. Нет никакого смысла заморачиваться с собственным CA или с присутствием корневого сертификата в списке доверенных на клиенте или сервере.
Нам нужны пары сертификат/ключ для сервера и каждого клиента.
C помощью openssl создадим пару для сервера:
sudo openssl req -nodes -new -days 365 -newkey rsa:1024 -x509 -keyout serverkey.pem -out servercert.pem
Отвечаем на вопросы:
Generating a 1024 bit RSA private key . ++++++ . ++++++ writing new private key to ‘serverkey.pem’ —— You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —— Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:MyProvince Locality Name (eg, city) []:MyCity Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Organizational Unit Name (eg, section) []:IT dep Common Name (e.g. server FQDN or YOUR name) []:server Email Address []:
И переместим их по назначению:
sudo mv serverkey.pem /etc/stunnel/ sudo mv servercert.pem /etc/stunnel/
Как и где хранить клиентские сертификаты с ключами (за исключением каталогов certs и crls созданных ранее) решать вам. Я просто создам каталог clients в домашней директории своего пользователя и буду хранить их там на первых порах.
Создадим каталог и перейдем в него:
mkdir /home/myuser/clients cd /home/myuser/clients
Создадим пару для клиента:
sudo openssl req -nodes -new -days 365 -newkey rsa:1024 -x509 -keyout clientkey.pem -out clientcert.pem
Как и при создании сертификата для сервера отвечаем на вопросы. Common Name будет другим например client.
Создадим еще одну пару:
sudo openssl req -nodes -new -days 365 -newkey rsa:1024 -x509 -keyout dnclientkey.pem -out dnclientcert.pem
Предположим, что clientcert.pem сертификат клиента которому доступ разрешен, а dnclientcert.pem сертификат клиента которому доступ запрещен. Скопируем сертификаты по нужным директориям.
sudo cp clientcert.pem /var/lib/stunnel4/certs sudo cp dnclientcert.pem /var/lib/stunnel4/crls
Для каждого сертификата нужно создать хэш-ссылки (Возможно «хэш-ссылка» не корректное название, но оно очень точно передает суть). Это можно сделать с помощью утилиты c_rehash из пакета openssl. Мы же создадим небольшой скрипт для этих целей.
nano /home/myuser/certlink.sh
Со следующим содержимым:
Возможно будет более целесообразным разместить certlink.sh где нибудь в /usr/bin. Я пока не стал этого делать. Но выбор за вами.
Дадим права:
chmod +x /home/myuser/certlink.sh
cd /var/lib/stunnel4/certs sudo /home/myuser/certlink.sh clientcert.pem cd /var/lib/stunnel4/crls sudo /home/myuser/certlink.sh dnclientcert.pem
В результате в каталогах у нас должны появится ссылки вида 7469493f.0.
sudo /etc/init.d/stunnel4 start
Stunnel на клиенте
На клиенте будем использовать версию stunnel аналогичную серверной. На сервере у нас 4.53. Забираем с одного из зеркал.
Если прямая ссылка перестанет работать, найти нужную версию можно так:
- Идем на stunnel.org в Downloads;
- В разделе Code Repositories выбираем зеркало и переходим. Например usenix.org.uk;
- Переходим в archive;
- Затем в 4.x;
- Забираем нужную версию.
Редактируем файл stunnel.conf. У меня он имеет следующий вид:
debug = 7 ; Пара сертификат/ключ клиента cert = clientcert.pem key = clientkey.pem verify = 2 ; Сертификат сервера CAfile = servercert.pem options = NO_SSLv2 [ssh] client = yes accept = 127.0.0.1:22 connect = 192.168.0.1:443
Здесь debug = 7 только на момент отладки, потом можно понизить до 3 или 4. Также есть опции для «тихого режима» и сокрытия значка в трее все есть в man’e.
Запускаем stunnel.exe, и пробуем с помощью putty подключится к 127.0.0.1. Тестируем. Можно попробовать подключится с запрещенным сертификатом.
Полезные материалы
- stunnel(8) manual. Без комментариев;
- Защита сетевых сервисов с помощью stunnel на opennet.ru. Большая, полезная статья. Автор подробно разбирает несколько сценариев применения stunnel. Must read;
- OpenSSL xgu.ru. Много полезной информации об openssl. Скрипт certlink.sh взят из этого источника.
Приведенные здесь инструкции полностью работоспособны. Проверено 26.12.2014 ubuntu 14.04.01, stunnel 4.53.
В данный момент работаю над парсингом логов stunnel с выводом отчетов и автоматизацией создания/управления сертификатами. Так как в последнее время мне интересен golang, реализовано будет с помощью него. Если материал на эту тему интересен — дайте знать.
- Настройка Linux
- Системное администрирование
- *nix
- Сетевые технологии
Источник: habr.com
Записки IT специалиста
Говоря о защите сетевых служб, многие администраторы сразу вспоминают о VPN, нередко забывая об иных, не менее эффективных способах. Да, VPN позволяет эффективно решить эту задачу, но не всегда бывает удобен и очень часто избыточен. Особенно если нужно защитить одну — две сетевые службы. Поэтому давайте посмотрим на доступные альтернативы, одна из них — это stunnel, SSL-прокси с широкими возможностями, одна из них — создание защищенного соединения между двумя узлами. Подробности в нашей статье.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Чтобы понять для каких случаев предпочтительнее stunnel снова вернемся к VPN, при всех ее достоинствах некоторые из них могут обернуться недостатками. С помощью VPN легко предоставить доступ ко всем ресурсам внутренней сети, но если с той стороны находится неконтролируемый или внештатный сотрудник (скажем бухгалтер на аутсорсинге), то этот плюс моментально превращается в минус. И нам уже надо думать не о том, как доступ к сети предоставить, а о том, как бы его закрыть.
В то же время stunnel предусматривает совершенно иной принцип работы, он работает на уровне TCP-соединений и позволяет просто и эффективно защитить его при помощи современного шифрования. С его помощью клиент будет иметь доступ к одному единственному порту сетевой службы и никуда более. При необходимости можно настроить несколько таких соединений.
Для примера мы рассмотрим организацию доступа к веб-серверу с опубликованной на нем базой 1С:Предприятия, доступ к которой должен иметь удаленный сотрудник. Будем считать, что веб-сервер с модулем расширения 1С установлен на машине с Linux (Debian или Ubuntu) расположенной в локальной сети предприятия, веб-сервер принимает подключения по протоколу HTTP без шифрования. Задача — обеспечить доступ к 1С с рабочего места бухгалтера.
Все команды в ОС Linux следует выполнять от имени суперпользователя (root), если не указано иного.
Создание ключей и сертификатов
Каждый раз, когда мы говорим об SSL, начинать следует с ключей и сертификатов. Варианты тут могут быть самые разные, все зависит от решаемых задач. В нашем случае требуется связать между собой несколько хостов, которые будет настраивать один и тот же человек, поэтому вполне достаточно будет самоподписанных сертификатов.
Изменим маску системы, чтобы на создаваемые файлы сразу выдавались нужные права:
umask 077
Перейдем в корневую папку и создадим там директорию для хранения ключей и сертификатов:
cd ~
mkdir pki
Перейдем в нее и сразу создадим ключевую пару сервера:
cd pki
openssl req -new -x509 -days 3650 -newkey rsa:3072 -nodes -keyout server.key -out server.crt -subj «/O=Interface LLC/CN=stunnel»
Эта команда создает сертификат с длинной ключа 3072 бит и сроком на 10 лет, также мы указали дополнительный параметр subj, в котором по минимуму заполнили поля сертификата, чтобы в будущем можно было хотя бы понять, что это за сертификат и для чего он нужен.
Аналогичным образом создаем сертификат для клиента. Хотя если действовать правильно, то его следует формировать на ПК клиента и на сервер передавать только открытый ключ или сертфикат CA, но мы сами себе доверяем и поэтому будем формировать и хранить все в одном месте.
openssl req -new -x509 -days 365 -newkey rsa:3072 -nodes -keyout client1.key -out client1.crt -subj «/O=Interface LLC/CN=client1»
Единственный момент — срок действия сертификата, мы не рекомендуем выпускать клиентские сертификаты на большой срок, особенно если вы не контролируете устройство клиента. Лучше раз в год перевыпустить сертификат, чем где-то будет кочевать полностью неконтролируемое устройство с валидным сертификатом на 10 лет.
Теперь объединим сертификаты и ключи клиентов и сервера в один файл:
cat server.key server.crt > server.pem
cat client1.key client1.crt > client1.pem
Вернем маску к исходным значениям:
umask 022
Ключи клиентов нам нужно будет передать на целевые ПК, поэтому скопируем их в каталог обычного пользователя (в нашем случае это andrey) и сделаем его их владельцем:
cp client1.pem ~andrey
chown andrey:andrey ~andrey/client1.pem
Обратите внимание, что файлы содержат закрытый ключ и после того, как вы передадите их на клиента из каталога обычного пользователя, их следует удалить.
Настройка сервера stunnel
Обновим список пакетов в системе и установим stunnel:
apt update
apt install stunnel4
Конфигурационные файлы программы располагаются в /etc/stunnel, но сейчас там пусто, поэтому начнем с создания общего конфигурационного файла:
nano /etc/stunnel/stunnel.conf
В данном случае мы используем редактор nano, если вам больше по душе редактор от mc, то замените в команде nano на mcedit.
Затем внесем в него следующие строки:
pid = /var/run/stunnel4/stunnel.pid
debug = info
output = /var/log/stunnel.log
syslog = no
Затем плавно переходим к настройкам шифрования, так как у нас «театр одного актера», то нет необходимости поддерживать совместимость с различными типами клиентов, можно сразу задать требуемые настройки шифрования. Мы будем безальтернативно использовать последнюю версию протокола TLS 1.3:
sslVersion = TLSv1.3
В качестве эллиптической кривой для алгоритма Диффи-Хеллмана будем использовать быструю и эффективную Curve25519:
curves = X25519
Теперь зададим шифр. Здесь есть над чем подумать, так как большинство современных процессоров поддерживает аппаратное ускорение AES, то предпочтительно выбирать шифры на его основе, можно начать со 128 битного:
ciphersuites = TLS_AES_128_GCM_SHA256
Либо использовать более надежный, но и более тяжелый 256 битный шифр:
ciphersuites = TLS_AES_256_GCM_SHA384
Для систем без аппаратного ускорения AES предпочтительно использовать шифр ChaCha20, который применяется в WireGuard:
ciphersuites = TLS_CHACHA20_POLY1305_SHA256
Ниже добавим секцию для нашего сервиса, таких секций может быть множество.
[1C]
accept = 192.168.72.197:443
connect = 127.0.0.1:80
verifyPeer = yes
cert = /etc/stunnel/server.pem
CAfile = /etc/stunnel/clients.pem
Давайте разберем указанные опции:
- accept — адрес и порт, где сервер будет принимать подключения, указываем адрес в локальной сети и порт 443 (либо любой другой).
- connect — адрес и порт куда будем перенаправлять подключения, мы подключаемся к apache локально, можем вообще ограничить его только localhost.
- verifyPeer — необходимо ли проверять сертификат клиента, в нашем случае необходимо, так как сервис закрытый.
- cert — путь к ключевой паре сервера
- CAfile — путь к файлу для проверки сертификатов клиента, он должен содержать сертификаты CA, которым мы доверяем, а в случае с самоподписанными сертификатами — их самих.
Сохраним конфигурационный файл и снова вернемся в директорию с ключами и сертификатами, скопируем нужные файлы:
cd ~/pki
cp server.pem /etc/stunnel
Теперь создадим и заполним файл доверенных сертификатов, допустим у нас есть сертификаты двух клиентов:
cat client1.crt client2.crt >> /etc/stunnel/clients.pem
Если у нас появляется еще один клиент, то добавить его сертификат в файл можно командой:
cat client3.crt >> /etc/stunnel/clients.pem
Теперь можно перезапустить сервис:
systemctl restart stunnel4
И проверить его состояние:
systemctl status stunnel4
Также не забудем добавить сервис в автозагрузку:
systemctl enable stunnel4
Перезагрузим компьютер и убедимся, что все работает и служба stunnel запускается без ошибок.
Настройка клиента stunnel
Скорее всего в качестве клиента будет выступать ПК с операционной системой Windows, поэтому дальнейшие действия мы будем рассматривать в ней, хотя файлы конфигурации, с поправкой на пути, остаются едиными для всех поддерживаемых ОС.
В первую очередь скачаем stunnel c официального сайта. Установка стандартная, единственный момент — измените расположение по умолчанию так, чтобы в пути не было пробелов, например C:stunnel:
После установки мы рекомендуем запустить GUI-приложение stunnel, которое позволяет удобно редактировать конфигурацию, перечитывать ее и здесь же выводить подробный лог. Для настройки и отладки самое то, что нужно.
При установке будет создан конфигурационный файл C:stunnelconfigstunnel.conf, он содержит большое количество комментариев и примеры подключения к стандартным сервисам, вроде почтовых служб, поэтому смело удаляем его содержимое и вносим следующий текст:
[1C]
client = yes
accept = localhost:80
connect = 192.168.3.116:443
cert = client1.pem
- client — флаг указывающий работать в режиме клиента.
- accept — адрес и порт, на котором будет доступен сервис, так как светить им наружу не нужно, то используем localhost.
- connect — адрес и порт сервера.
- cert -путь к файлу с ключевой парой.
Сохраняем конфигурацию и копируем в C:stunnelconfig файл сертификата клиента client1.pem. Перезапускаем сервис и пытаемся соединиться веб-клиентом 1С с localhost, если все сделано правильно, то подключение будет успешным.
Убедившись, что все работает как надо, полностью выходим из GUI-приложения. Для установки stunnel как службы откроем Командную строку от имени Администратора и выполним в ней команду:
C:stunnelbinstunnel.exe -install
Для запуска службы выполните:
C:stunnelbinstunnel.exe -start
Как видим, настроить stunnel совсем несложно, поэтому надеемся, что данная статья будет вам полезна и вы возьмете на вооружение еще один способ безопасного использования сетевых служб.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Источник: interface31.ru
Применяем stunnel для защиты сервисов
Очень часто возникает потребность защитить от различных систем мониторинга работу SSH, VPN, либо других сервисов. С этим отлично справится stunnel, который мы и рассмотрим в данной статье.
Введение
Stunnel — это мощный прокси, который добавляет внешний слой шифрования TLS поверх любого из существующих протоколов без необходимости изменения их конфигурации, либо программного кода.
Мы рассмотрим работу с данным программным продуктом на примере дистрибутива Fedora (и CentOS с подключённым репозиторием EPEL7) и будем защищать OVN сервер.
Установка stunnel
Пакет доступен в главном репозитории Fedora. Установим его:
sudo dnf install stunnel
Настройка сервера stunnel
Все файлы конфигурации сервера должны находиться в каталоге /etc/stunnel, поэтому создадим главный конфиг stunnel.conf и укажем правильные права доступа:
sudo touch /etc/stunnel/stunnel.conf sudo chmod 0644 /etc/stunnel/stunnel.conf
Листинг файла /etc/stunnel/stunnel.conf:
; Указываем имя и группу, от имени которых будет запущен сервис. setuid = nobody setgid = nobody ; Указываем PID файл работающего сервиса. pid = /var/run/stunnel.pid ; Отключим отладочные режимы. debug = 0 output = /var/log/stunnel.log ; Для удобства отделим основной файл конфигурации от настроек сервисов. include = /etc/stunnel/conf.d ; Зададим настройки шифрования и версию TLS. curves = prime256v1 sslVersion = TLSv1.2:TLSv1.3 ; Полностью отключим уязвимые протоколы SSL версии 2 и 3. options = NO_SSLv2 options = NO_SSLv3
Создадим каталог для индивидуальных конфигов защищаемых сервисов:
sudo mkdir -p /etc/stunnel/conf.d sudo chmod 0755 /etc/stunnel/conf.d
Листинг файла /etc/stunnel/conf.d/ovn.conf:
[ovn] accept = 443 connect = 127.0.0.1:1194 renegotiation = no verifyPeer = yes ciphers = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-SHA cert = /etc/stunnel/certs/server.crt key = /etc/stunnel/certs/server.key CAfile = /etc/stunnel/certs/clients.pem
Здесь 127.0.0.1:1194 — это IP-адрес и порт, который слушает OVN сервер (для максимальной безопасности рекомендуется в настройках VPN сервера разрешить ему работать исключительно на 127.0.0.1, чтобы никто не мог подключиться к нему в обход stunnel), а 443 — порт, на котором stunnel будет ожидать входящие подключения.
Создание сертификатов
Stunnel будет осуществлять аутентификацию клиентов при помощи сертификатов.
Создадим каталог для их хранения:
sudo mkdir -p /etc/stunnel/certs sudo chmod 0755 /etc/stunnel/certs
Сгенерируем сертификат для нашего сервера:
openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 3650 -subj «/CN=stunnel» -out server.crt
На выходе мы получим файлы server.crt (открытый ключ) и server.key (секретный ключ). Загрузим их на сервер в каталог /etc/stunnel/certs любым удобным для нас способом и установим chmod 0600:
sudo chmod 0600 /etc/stunnel/certs/server.
Сгенерируем сертификаты для клиентов (каждый клиент должен выполнять этот шаг самостоятельно, а затем лишь передать свой открытый ключ (файл client.crt) на сервер):
openssl req -newkey rsa:2048 -nodes -keyout client1.key -x509 -days 720 -subj «/CN=client1» -out client1.crt openssl req -newkey rsa:2048 -nodes -keyout client2.key -x509 -days 720 -subj «/CN=client2» -out client2.crt
Объединим все открытые ключи клиентов в единый бандл:
cat client*.crt > clients.pem
Скопируем полученный clients.pem на сервер любым способом и установим chmod 0644:
sudo chmod 0644 /etc/stunnel/certs/clients.pem
При появлении нового клиента его публичный ключ должен быть добавлен в бандл, а сервис stunnel перезапущен.
Запуск сервера
Теперь мы наконец готовы запустить наш сервер:
Настройка клиентов
Создадим каталог для хранения пользовательских сертификатов:
sudo mkdir -p /etc/stunnel/certs sudo chmod 0755 /etc/stunnel/certs
Создадим конфиг клиента client.conf и установим ему корректные права доступа:
sudo touch /etc/stunnel/client.conf sudo chmod 0644 /etc/stunnel/client.conf
Листинг файла /etc/stunnel/client.conf:
; Общие настройки клиента. setuid = nobody setgid = nobody pid = /var/run/stunnel.pid debug = 0 curves = prime256v1 sslVersion = TLSv1.2 ; Настройки подключения к сервису. [ovn] client = yes accept = 127.0.0.1:1194 connect = IP_СЕРВЕРА:443 verifyPeer = yes cert = /etc/stunnel/certs/client1.crt key = /etc/stunnel/certs/client1.key CAfile = /etc/stunnel/certs/server.crt
Скопируем публичный ключ сервера server.crt, а также клиентский сертификат (открытый (client1.crt) и закрытый (client1.key) ключи) в /etc/stunnel/certs и установим им правильный chmod:
sudo chmod 0644 /etc/stunnel/certs/server.crt sudo chmod 0600 /etc/stunnel/certs/client*.
Теперь изменим OVN подключение так, чтобы в качестве IP-адреса сервера использовался 127.0.0.1:1194.
Источник: www.easycoding.org