Thank you for reading this post, don't forget to subscribe!
OpenVPN очень успешная Open Source технология, которая применяется во многих компаниях для организации удаленного доступа сотрудникам. Для того, чтобы улушчить безопасность данного типа подключений, можно использовать утилиту stunnel, которая обеспечивает организацию дополнительного шифрования с помощью протокола ssl. . При добавлении к OpenVPN дополнительной защиты в виде stunnel приходится также использовать данное ПО и на клиентской части, что создает определенные неудобства и должно учитываться заранее.
Что делаем на сервере
Будем считать, что у нас уже есть работающий OpenVPN сервис на OS Ubuntu Linux, к которому мы хотим добавить дополнительную защиту в виде stunnel. Нам по сути надо поменять только конфигурационный файл stunnel.conf. Нужное содержимое этого файла приведено ниже.
1 2 3 4 5 6 7 8 9 10 11 12 |
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. Эти директивы как часть указанного файла будут выглядит следующим образом.
1 2 3 |
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 привожу ниже.
1 2 3 4 5 6 7 |
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. Пожалуй, это еще один из примеров, когда наличие знаний и нужных навыков позволяют достичь нужных результатов без покупки дорогущего программного обеспечения и оборудования.