В этой статье мы обсудим VPN систему, которая предоставляет одновременно грамотные технические решения для администраторов, и простой, привлекательный интерфейс для пользователя. Решение основывается на использовании нескольких утилит с открытым кодом, таких как: OpenVPN, OpenVPN GUI, Nullsoft Scriptable Install System (NSIS) и TightVNC.
Перевод: Войновича Андрея
Проблема установки канала связи между корпоративной сетью и удаленными пользователями.
В этой статье мы обсудим VPN систему, которая предоставляет одновременно грамотные технические решения для администраторов и простой, привлекательный интерфейс для пользователя. Решение основывается на использовании нескольких утилит с открытым кодом, таких как: OpenVPN, OpenVPN GUI, Nullsoft Scriptable Install System (NSIS) и TightVNC. TightVNC будет использоваться для прозрачного удаленного управления, а сама по себе программа не использует VPN технологии.
В результате мы получим корпоративный Windows 2000/XP инсталлятор, который включает не только клиентские настройки VPN и ключевую информацию, но также содержит интегрированный VNC сервер для удаленного управления и технической поддержки при подключении к VPN серверу.
Утилиты с Открытым Кодом
OpenVPN – надежное и гибкое решение для VPN, позволяющее большинству платформам семейства Unix/Linux, Windows 2000/XP, и Mac OSX безопасно устанавливать зашифрованные каналы связи между собой. Эти каналы могут быть настроены разными способами, но в этой статье мы остановимся на сети типа точка-точка (РР), которая будет одним малым или большим хабом.
OpenVPN GUI - очень удобная утилита для управления VPN для Windows 2000/XP. Пожалуй, она является самым удобным решением для конечного пользователя (например, простая в использовании иконка в панели задач). OpenVPN GUI предоставляет быстрый и простой доступ к VPN настройкам для большинства пользователей.
Nullsoft Scriptable Install System (NSIS) – open source-проект, позволяющий создавать корпоративные пакеты установки клиентского ПО.
Наверняка вы уже знакомы с термином Virtual Network Computing (VNC), а TightVNC – еще один пакет с открытым кодом, основанный на Real VNC. Пользуюсь TightVNC уже около 5 лет, и поэтому остановил свой выбор именно на этом пакете. Он очень надежен и оставил на моей работе некоторый отпечаток. Такой же результат вы сможете получить, используя любой другой VNC продукт, если захотите поэкспериментировать после прочтения этой статьи.
Требования к Центру Данных
В статье главным образом обращается внимание на сторону конечного пользователя, но она была бы неполной, если бы в ней не определялись требования к центру данных. Итак, вам понадобится защищенный выделенный сервер под управлением ОС Unix/Linux. Пожалуйста, обратите внимание на слова «выделенный» и «защищенный», так как это та машина, которая не должна быть компрометирована. Любой удаленный узел, требующий доступ к VPN, передает чувствительные данные, поэтому следует заострить внимание и здесь. Отключите все сетевые сервисы, кроме SSH и OpenVPN, если возможно, и определите строгие правила для брандмауэра. За дополнительной информацией по настройке безопасности сервера можно обратиться ко многим документам, доступным в Интернет.
Следующие примеры осуществлялись на системе под управлением Red Hat Fedora Core 2.
Чтобы скомпилировать OpenVPN, действуйте стандартным способом:
# gzip -d openvpn-2.0_rc6.tar.gz
# tar xf openvpn-2.0_rc6.tar
# cd openvpn-2.0_rc6
# ./configure
# make
# make install
Если у вас возникли какие-то проблемы с компиляцией, убедитесь, что у вас установлены библиотеки LZO сжатия. Просмотрите документацию по OpenVPN, где очень подробно описан процесс компиляции пакета.
Конфигурация OpenVPN Сервера
Для начала, создадим директорию для хранения конфигурационных файлов и VPN ключей:
# cd /etc
# mkdir openvpn
# chmod 700 openvpn
# cd openvpn
Ниже приведен полный конфигурационный файл для первого объекта сервера, который следует назвать port5023.conf:
В этом файле находятся всего несколько настроек, требующих изменения для каждого объекта, в основном туннельный интерфейс для связи, слушающий UDP порт, расположение файла с ключом и адресацию точка-точка для VPN соединения.
### Start Config File Port 5023 ###
# local tun device
dev tun23
# interface addresses
ifconfig 10.23.0.1 10.23.0.2
# key location
secret /etc/openvpn/port5023.key
# port to listen on
port 5023
# user to run as
user nobody
group nobody
# options
comp-lzo
ping 15
verb 1
### End Config File Port 5023 ###
Заметьте, что пример настроек, показанный выше, указывает OpenVPN переключить пользовательские и групповые ID на учетную запись "nobody". Это работает, если на вашем VPN сервере запущены только службы OpenVPN с правами nobody. Если же на этом сервере запущены другие службы под пользовательским и групповым ID nobody, следует запустить OpenVPN от других ID.
Чтобы создать статический ключ для этого VPN объекта, запустите следующую команду из /etc/openvpn:
# /usr/local/sbin/openvpn --genkey --secret port5023.key
Не забудьте добавить соответствующее правило, разрешающее UDP трафик на 5023 порт. Отмечу, что следует установить простой Perl скрипт, запускаемый через cron, для регистрации неудачных попыток соединений на этот порт в целях аудита безопасности.
Теперь вы можете запустить ваш VPN объект:
# /usr/local/sbin/openvpn --daemon --disable-occ --config \
/etc/openvpn/port5023.conf
Настройки, переданные OpenVPN:
--daemon – Запустить как демон.
--disable-occ – Этот параметр позволяет взаимодействовать двум разным версиям OpenVPN. Это очень удобно в том случае, если вы поддерживаете удаленных пользователей, которые по каким-либо причинам не получают обновления ПО.
--conf – Указание расположения конфигурационного файла.
Теперь вы должны получить основной объект VPN сервера, слушающий на 5023 порту. Если у вас возникли какие-то проблемы, читайте документацию по OpenVPN.
Сборка VPN Installer
VPN клиентам при такой настройке необходимо знать где расположен VPN сервер, на какой порт соединяться, какой статический ключ использовать и еще кое-что. Все это требует наличия полного конфигурационного файла и ключа с корпоративным VPN-установщиком. Конечным пользователям не потребуется дополнительная помощь в процессе получения удаленного доступа к ресурсам корпорации при использовании интуитивно понятного установщика.
В связи с тем, что мы создаем свой установщик для Windows 2000/XP, существует возможность включить независимые программы в процесс установки. Вместо простой установки VPN клиента с предопределенным ключом и конфигурационным файлом, мы также включим программу TightVNC для клиентского и серверного объекта VNC протокола.
Скачайте и установите пакет NSIS на систему под управлением Windows XP:
http://www.openvpn.se/files/nsis/nsis20b3.exe
С момента релиза этой статьи, стала доступна более новая версия NSIS. Удостоверьтесь, что вы используете версию, ссылка на которую дана выше в целях демонстрации, однако каждый шаг, описанный здесь, будет работать с более поздними версиями. Как бы то ни было, оказалось, что последняя версия NSIS требует некоторых подстроек со следующим установочным zip файлом, поэтому вам будет проще использовать версию NSIS, указанную выше.
Далее скачайте установщик на туже машину под управлением Windows XP:
Этот файл был собран Mathias Sundman и включает все необходимые файлы конфигурации OpenVPN, OpenVPN GUI, и NSIS для сборки стандартного Windows installer пакета. Распакуйте этот файл на рабочий стол в папку "VPN Sources”.
Чтобы предугадать, что мы получим в конечном итоге, откройте папку VPN Sources, правой кнопкой по файлу openvpn-gui.nsi, левой кнопкой по пункту меню "Compile NSI". Через пару мгновений вы увидите файл установщика OpenVPN в той же папке. Если вы попробуете запустить этот установщик, будет установлена стандартная версия OpenVPN. Если возникли проблемы с созданием установщика, обратитесь к следующей документации:
http://openvpn.se/files/howto/openvpn-howto_roll_your_own_installation_package.html
или
Сборка Корпоративного VPN Installer
В данный момент у нас имеется основной VPN сервер и стандартный Windows installer для OpenVPN, но нам важно собрать его таким образом, чтобы его можно было легко установить. Кроме того, мы хотим добавить в него программу TightVNC для удаленного администрирования и помощи.
Скачайте полный набор запускаемых файлов TightVNC 1.3dev6 без установщика с:
http://www.tightvnc.com/download.html
Теперь распакуйте вложенные файлы на рабочий стол. Нас будут интересовать следующие файлы: VNCHooks.dll, vncviewer.exe, WinVNC.exe и LICENCE.txt. Скопируйте эти файлы в папку openvpn, включающую в себя папку "VPN Sources".
Сохраните следующий пример конфигурационного файла в openvpn/config/VPN.ovpn в папке "VPN Sources":
### BEGIN CLIENT SIDE CONFIGURATION FILE ###
# vpn server to contact
remote 192.168.10.10
# port to establish connection on
port 5023
# local tunnel device
dev tun
# interface addresses
tun-mtu 1500
ifconfig 10.23.0.2 10.23.0.1
route 10.0.0.0 255.0.0.0 10.23.0.1
# key location
secret "c:\\program files\\company branded vpn\\config\\key.txt"
# enable LZO compression
comp-lzo
# moderate verbosity
verb 0
mute 10
;fragment 1300
;mssfix
; ping-restart 60
; ping-timer-rem
; persist-tun
; persist-key
; resolv-retry 86400
# keep-alive ping
ping 10
# enable LZO compression
comp-lzo
# moderate verbosity
verb 4
mute 10
### END CLIENT SIDE CONFIGURATION FILE ###
В этом примере множество параметров, и я советую вам поэкспериментировать с различными настройками. Сейчас задействованы необходимое число параметров, остальные – закомментированы при помощи «;». Самыми важными настройками будут: IP адрес вашего VPN сервера, номер порта VPN шлюза, расположение файла ключа и адрес VPN интерфейса. Также не стоит забывать о команде маршрута, указанной выше.
Перед тем, как продолжить, вам необходимо скопировать содержимое /etc/openvpn/port5023.key на ваш VPN сервер в openvpn/config/key.txt в папку "VPN Sources". В результате новый VPN installer получит правильный ключ, который будет использоваться при создании зашифрованного VPN туннеля.
Для завершения сборки корпоративного VPN installer, откройте папку "VPN Sources" и отредактируйте openvpn-gui.nsi. Удалите первый раздел кода с:
!include "MUI.nsh"
!include "setpath.nsi"
!define MASTER "x:\openvpn\exp\openvpn"
!define HOME "openvpn"
!define BIN "${HOME}\bin"
!define MUI_PRODUCT "Company Branded VPN"
!define OPENVPN_VERSION "2.0"
!define GUI_VERSION "2.0"
!define MYCERT_VERSION "0.3.2b"
!define MUI_VERSION "-"
;!define MUI_VERSION "${OPENVPN_VERSION}-gui-${GUI_VERSION}"
!define TAP "tap0801"
!define TAPDRV "${TAP}.sys"
Теперь найдите строку, которая начинается с "OutFile" и замените ее на:
OutFile "Company Branded VPN.exe"
Затем разместите строку:
File "${HOME}\openvpn.exe"
И добавьте строго под ней (перезаписывая одноименные разделы)
SetOutPath "c:\program files\TightVNC"
nsExec::ExecToLog '"c:\program files\TightVNC\winvnc.exe" -kill'
File "${HOME}\vncviewer.exe"
File "${HOME}\WinVNC.exe"
File "${HOME}\LICENCE.txt"
File "${HOME}\VNCHooks.dll"
nsExec::ExecToLog '"c:\program files\TightVNC\winvnc.exe" -reinstall'
nsExec::ExecToLog 'net start winvnc'
SectionEnd
Section "OpenVPN GUI" SecGUI
SetOverwrite on
SetOutPath "$INSTDIR\bin"
File "${HOME}\openvpn-gui.exe"
SetOutPath "$INSTDIR\config"
File "${HOME}\config\VPN.ovpn"
File "${HOME}\config\key.txt"
CreateDirectory "$INSTDIR\log"
SectionEnd
Далее расположите эти строки:
Delete "$INSTDIR\config\README.txt"
Delete "$INSTDIR\config\sample.${SERV_CONFIG_EXT}.txt"
and replace them with:
Delete "$INSTDIR\config\key.txt"
Delete "$INSTDIR\config\README.txt"
Delete "$INSTDIR\config\VPN.ovpn"
Это делается для того, чтобы при удалении VPN пакета был и удален закрытый ключ.
Наконец, в папке "VPN Sources\openvpn" переименуйте openvpn-2.0_rc6.zip в openvpn-2.0.zip, а openvpn-gui-1.0-beta26.zip в openvpn-gui-2.0.zip. Я рекомендую сделать это, так как это позволит сохранить версию основного OpenVPN приложения без внесенных нами изменений.
Вернитесь в папку "VPN Sources", кликните правой кнопкой по openvpn-gui.nsi и левой кнопкой по пункту меню compile NSI. Если вы правильно выполнили все шаги, то в папке "VPN Sources" появится файл "Company Branded VPN.exe". Он будет содержать полный пример конфигурации, правильный ключ и корпоративный вид. Кроме того, из этого файла будет установлен TightVNC, зарегистрирован как Windows Service, и будет запускаться по запросу пользователя для облегчения удаленного администрирования с использования безопасного удаленного доступа.
Ссылки
NSIS Web site -- http://nsis.sourceforge.net
OpenVPN Web site -- http://www.openvpn.net
OpenVPN GUI Web site -- http://openvpn.se
Real VNC Web site -- http://www.realvnc.com
TightVNC Web site -- http://www.tightvnc.com
Ладно, не доказали. Но мы работаем над этим