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

Что делаем на сервере
Будем считать, что у нас уже есть работающий OpenVPN сервис на OS Ubuntu Linux, к которому мы хотим добавить дополнительную защиту в виде stunnel. О том, как установить данную утилиту в систему и запустить ее рассказано ранее. Не будем повторять ранее изложенный материал. Нам по сути надо поменять только конфигурационный файл 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 (но конечно не является полноценной заменой, и конкурентом этим продуктам). Пожалуй, это еще один из примеров, когда наличие знаний и нужных навыков позволяют достичь нужных результатов без покупки дорогущего программного обеспечения и оборудования.