OpenVPN через stunnel

28/11/2021

openvpn stunnel img

OpenVPN очень успешная Open Source технология, которая применяется во многих компаниях для организации удаленного доступа сотрудникам. Для того, чтобы улушчить безопасность данного типа подключений, можно использовать утилиту stunnel, которая обеспечивает организацию дополнительного шифрования с помощью протокола ssl. Ранее уже писал статью в блоге — «Stunnel как Socks сервер» о возможном применении данной утилиты. Однако, ее функционал позволяет найти ей место и в других ситуациях. При добавлении к OpenVPN дополнительной защиты в виде stunnel приходится также использовать данное ПО и на клиентской части, что созадет определенные неудобства и должно учитываться заранее.

Что делаем на сервере

Будем считать, что у нас уже есть работающий OpenVPN сервис на OS Ubuntu Linux, к которому мы хотим добавить дополнительную защиту в виде stunnel. О том, как установить данную утилиту в систему и запустить ее рассказано в моей статье — «Stunnel как Socks сервер«. Не буду повторять ранее изложенный материал. Нам по сути надо поменять только конфигурационный файл stunnel.conf. Нужное содержимое этого файла приведено ниже.

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

[openvpn]
accept = xx.xx.xx.xx:45678
connect = 127.0.0.1:1194
cert=/usr/local/etc/stunnel/cert.pem
key=/usr/local/etc/stunnel/key.pem

Так в данном примере сервис stunnel будет принимать входящие подключения на TCP:45678 порту на внешнем сетеовм интерфейсе и перенаправлять их на TCP:1194 порт интерфейса localhost. Именно на данном порту теперь должен слушать сервис OpenVPN. После сохранения файла проведем перезагрузку сервису stunnel с помощью следующей команды в шелле.

# sudo /etc/init.d/stunnel4 restart

Кроме этого необходимо обновить конфигурацию самого сервиса OpenVPN. Так, нужно подредактировать файл /etc/openvpn/server.conf таким образом, чтобы сервис работал на TCP 1194 порту интерфейса localhost. Эти дерективы как часть указанного файла будут выглядить следующим образом.

local 127.0.0.1
port 1194
proto tcp

После того, как нужные директивы будут внесены, проведем перезагрузку сервиса OpenVPN.

# sudo systemctl restart openvpn@server

И в завершении перенастройки сервера производится добавление правил iptables, которые разрешат трафик между приложениями на интерфейсе localhost.

# sudo iptables -A INPUT -i lo -j ACCEPT
# sudo iptables -A OUTPUT -o lo -j ACCEPT

Что делаем на клиенте

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

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

[openvpn]
cert = stunnel.pem
accept = 127.0.0.1:1194
connect = xx.xx.xx.xx:45678

В вышеприведенном файле мы указываем принимать соединения от клиента OpenVPN на интерфейсе localhost по порту TCP:1194 и перенаправлять их на внешний IP адрес сервера по порту TCP:45678. После внесения и сохранения нужных изменений проводим запуск stunnel на клиенте.

В клиентской части OpenVPN необходимо изменить конфигурационный файл .ovpn таким образом, чтобы подключение шло на localhost TCP:1194 порт. Это место настроек файла представлено ниже.

proto tcp
remote 127.0.0.1 1194

После применения измененного конфига, запускаем клиент OpenVPN и получаем двойную защиту в действии.

Резюме

Скрещивание двух Open Source технологий позволяет сделать удаленный доступ еще более безопасным и надежным. В каких-то аспектах данное решение выигрывает в конкуренции с платными продуктами от таких гигантов IT рынка как Cisco Systems и CheckPoint. Пожалуй, это еще один из примеров, когда наличие знаний и нужных навыков позволяют достичь нужных результатов без покупки дорогущего программного обеспечения и оборудования.

OpenVPN через stunnel: 2 комментария

  1. stunnel[]: [ ] Loading certificate from file: stunnel.pem
    stunnel[]: [!] error queue: ssl/ssl_rsa.c:596: error:140DC002:SSL routines:use_certificate_chain_file:system lib
    stunnel[]: [!] error queue: crypto/bio/bss_file.c:290: error:20074002:BIO routines:file_ctrl:system lib
    stunnel[]: [!] SSL_CTX_use_certificate_chain_file: crypto/bio/bss_file.c:288: error:02001002:system library:fopen:No such file or directory
    stunnel[]: [!] Service [openvpn]: Failed to initialize TLS context
    stunnel[]: [!] Configuration failed

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *