Не секрет, что своевременный доступ к информации, в том числе хранящейся внутри корпоративной сети компании, может оказаться решающим фактором успешной работы сотрудников. Речь о виртуальных частных сетях (VPN). Иногда предоставить доступ оказывается не так-то просто.


Доступ всегда и везде.
Обеспечивая удалённый доступ во внутреннюю сеть компании приходится учитывать множество факторов. Среди которых встречается и невозможность установления соединения между клиентом и серверном. Причина может быть проста – системные администраторы гостевой сети, из которой сотрудник фирмы пытается произвести подключение, закрыли возможность всех исходящих соединений, а доступ к веб ресурсам осуществляется через «прозрачный» прокси-сервер. В такой ситуации установить VPN соединение используя стандартные решения типа pptp и IPsec попросту не возможно.

Второй большой неприятностью для любого мобильного пользователя может оказаться банальная потеря(или кража) ноутбука. Излишне объяснять, чем обернётся для компании доступ чужого человека в корпоративную сеть, если нашедшему ноутбук вздумается воспользоваться этой возможностью. Разумеется, мобильные пользователи обязаны (как правило на уровне корпоративного стандарта) не ставить опцию хранения пароля на учётную запись доступа VPN, но… вы много таких пользователей видели? Мне пока не довелось ни одного. Поэтому предпочтительно ввести дополнительные средства безопасности доступа к внутренней сети компании. Другими словами, использовать двухфакторную авторизацию пользователей – программным и аппаратным способом. Речь идёт о ключах eToken, которые могут использоваться для безопасного хранения сертификатов для шифрования и дешифрования данных или авторизации в различных системах.

И последнее (по счёту, но не по важности), что хотелось бы упомянуть – возможность получения доступа не только к файлам на серверах компании, но и к другим ресурсам. Например, к почтовому серверу (во многих компаниях использование внешних соединений по pop3, imap и smtp протоколам запрещено). Проблема может заключаться в том, что почтовый сервер находится, например, вне локальной сети компании. Далее, мы рассмотрим комплексное решение всех обозначенных проблем.
Как мы будем решать задачу.
Мы воспользуемся следующими программными и аппаратными средствами:
• OpenVPN, работающим под Linux, в качестве поставщика защищённого частного канала связи;
• htc и hts программами для организации http тунеля через прокси сервера;
• eToken PRO от компании Alladin.
Вы можете использовать аналогичные ключи любых других производителей, ключ этой компании просто оказался у меня под рукой.

Итак, рассмотрим каждый пункт отдельно.

OpenVPN.
Система OpenVPN [1] выбрана для реализации решения не случайно. Это программное обеспечение весьма активно обновляется разработчиками. OpenVPN позволяет реализовать практически любые задачи по организации VPN каналов.

Среди достоинств системы:
• поддержка практически всех возможных операционных систем — Linux, Windows версий 2000/XP и выше, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris;
• возможность использовать все доступные OpenSSL методы шифрования, аутентификации и сертификатов для защиты вашего частного канала;
• возможность создавать целые фермы серверов с балансировкой нагрузки тысяч входящих VPN соединений;
• использование статического ключа для шифрования или систему открытых ключей;
• возможность создавать безопасное подключение типа «мост» (ethernet bridges);
• возможность использования как udp, так и tcp для VPN канала.

И это далеко не полное перечисление функционала OpenVPN. Система постоянно дорабатывается, количество возможностей увеличивается.

Туннель http с использованием htc и hts.
Это маленькие программки одна из которых запускается на сервере, а другая соответственно на клиенте. Они не нуждаются в особых настройках и запускаются простой командной строкой. Ниже мы рассмотрим их более подробно.

eToken ключ.
Для наших целей подойдёт любой аппаратный ключ, предназначенный для безопасного хранения цифровых сертификатов. eToken PRO представляет собой защищенное устройство, предназначенное для строгой аутентификации, безопасного хранения секретных данных, выполнения криптографических вычислений и работы с асимметричными ключами и цифровыми сертификатами. USB-ключ архитектурно реализован как USB карт-ридер с встроенной в него микросхемой (чипом) смарт-карты. Ключ выполнен в виде брелка и напрямую подключается к USB порту компьютера, при этом не требует для своей работы каких-либо дополнительных устройств.

Подобных аппаратных средств на рынке представлено огромное множество и каждый может выбрать наиболее оптимальное для своих целей устройство. Приятная особенность ключей состоит в том, что вы не обязаны использовать их для решения только одной задачи. Один и тот же ключ может позволять производить авторизацию для доступа по Wi-Fi в сеть, для установления VPN соединения и для шифрования данных на жёстком диске.

Вам потребуется только сам ключ и свободно распространяющаяся утилита для работы с ним.

Итак, перейдём к решению поставленной задачи.

Установка OpenVPN сервера.
Воспользуемся Gentoo Linux для установки системы OpenVPN. Но прежде, чем мы приступим к установке, убедимся, что ядро Linux содержит все необходимые модули. Для этого зайдём в конфигуратор нашего ядра и обратим внимание на запись, относящуюся к TUN/TAP драйверам.

Device Drivers --->
Network device support --->
<*> Universal TUN/TAP device driver support

Если поддержка установлена, то всё в порядке и можно продолжать. Если нет –установите необходимое значение и перекомпилируйте ядро вашей системы.

Если вы не планируете в дальнейшем использовать аппаратные ключи для двухфакторной аутентификации, то установка самой системы OpenVPN крайне проста и выполняется одной командой.

# USE='ssl examples' emerge openvpn


С текущей версией ebuild'а система установит вам OpenVPN версии 2.0.6 Для использования eToken придётся пройти по дереву портов и принудительно установить более новую версию (на данный момент 2.1_beta14).

# echo net-misc/openvpn >> /etc/portage/package.keywords
# USE=«ssl example» emerge openvpn


Кроме того, может потребоваться установка необходимых дополнительных пакетов. Поэтому я рекомендую на время установки системы просто раскомментировать в вашем /etc/make.conf опцию ACCEPT_KEYWORDS нужной архитектуры (в моём случае это «~x86»), позволив системе установить всё необходимое.
Опция SSL необходима для поддержки OpenSSL, а examples установит примеры конфигурационных файлов OpenVPN. В противном случае, никаких примеров не будет и файлы настроек прийдётся писать, что называется, с чистого листа.

Создание ключей сервера и клиентов.
После того, как скомпилируется система потребуется (для удобства) скопировать примеры конфигурационных файлов в /etc/openvpn и туда же скопировать скрипты, для формирования ключей и сертификатов.

И то, и другое находится в директории /usr/share/openvpn. В поддиректории easy-rsa содержатся скрипты на все случаи жизни, позволяющие создавать:

корневой сертификат (build-ca);
ключ и сертификат сервера (build-key-server);
простые ключи для клиентов (build-key);
ключи для клиентов, защищённые паролем (build-key-pass);
ключи PKCS для необходимой нам возможности использовать eToken (build-key-pkcs12).

Первоначально создадим все необходимые сертификаты и ключи для сервера.

# cd /etc/openvpn/easy-rsa
# source ./vars
# ./clean-all
# ./build-ca
# ./build-key-pkcs12 --server server
# ./build-dh
# ./build-key-pkcs12 –-pkcs12 client1


Последняя команда создаёт PKCS12 ключи для пользователя. Где client1, это пример имени пользователя. Команда должна быть выполнена для каждого предполагаемого клиента. Обратите внимание, что при создании ключа вы можете защитить его дополнительно паролем.

Настройка OpenVPN.
Конфигурационный файл OpenVPN (называющийся по-умолчанию server.conf) снабжён весьма подробными комментариями и позволяет без проблем выставить все необходимые настройки практически без использования какой-либо дополнительной документации.

Сначала укажем по какому адресу и на каком порту будет работать наш сервер:

local Х.Х.Х.Х
port 443

Выбор порта не случаен почему, я поясню позже когда будем настраивать клиентскую и серверную часть http тунеля.

Второе, что надо выбрать — по tcp или udp будет работать наш VPN. Для этого есть соответствующая опция:

proto tcp
или
proto udp

Так как мы собираемся сделать возможным доступ через веб прокси сервер гостевой системы, то выберем proto tcp.

Далее, выберите тип сетевого устройства, которое будет использоваться.

dev tun0 – в случае организации обычного VPN, или
dev tap0 – если вы хотите использовать подключение типа «мост».

Используя второй вариант помните о необходимости достаточного пула свободных сетевых адресов в вашей локальной сети, которые будут время от времени заниматься удалёнными пользователями при подключении по VPN.

В секции описания ключей напишем полный путь до нашего ключа:

pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

Обратите внимание, что одновременно может использоваться только либо ключ pkcs12, либо «стандартные» ca, cert и key. Если будут выставлены пересекающиеся опции, система откажется запускаться.

Если вы решили использовать обычный VPN, укажите адресное пространство, в котором он будет работать и из которого будет назначать их клиентам.
server 192.168.4.0 255.255.255.0

Если вы собираетесь использовать подключение типа «мост», то потребуется другая опция (параметр server необходимо закомментировать, так как сервер может единовременно работать только в одном качестве):

server-bridge 192.168.1.73 255.255.255.0 192.168.1.61 192.168.1.63

Где:

• первый и второй параметры — адрес и маска локальной сетевой карты сервера;
• третий и четвёртый параметры – пул адресов для выдачи внешним клиентам.

Опция, которую мы пропустили

ifconfig-pool-persist /etc/openvpn/ipp.txt

содержит имя файла, в котором будут храниться соответствия клиентов (по именам их ключей) и их внутренним адресам, которые им выдаёт система OpenVPN.

Следующие весьма важные опции указывают, какие адресные пространства будут доступны для клиентов и при подключении автоматически добавятся в таблицу маршрутизации.

push «route 192.168.1.0 255.255.255.0»
push «route Х.Х.Х.Х 255.255.255.255»

Первая опция добавляет возможность использовать нашу локальную сеть, а вторая добавляет один внешний адрес, на котором находится наш почтовый сервер, куда клиенты так же должны иметь доступ при любых обстоятельствах.

Большинство опций, которые следуют дальше необходимы для реализации возможностей, выходящих за рамки данного материала.

Опции
push «dhcp-option DNS 192.168.1.1»
client-to-client

Указывают какой DNS использовать клиентам для преобразования имён в ip адреса внутри нашей локальной сети, а так же позволять ли клиентам VPN взаимодействовать между собой. Это может быть полезно, если есть необходимость обмена файлами между двумя пользователями.

Если вам по какой-то причине необходимо позволить двум независимым клиентам VPN использовать одновременно идентичные сертификаты — раскомментируйте опцию duplicate-cn.
Последнее, на что сейчас стоит обратить внимание – это название файла и путь к нему, куда будет писать журнальный файл OpenVPN, а так же на количество допустимых пользователей системы одновременно.

Настройка шлюза локальной сети.
Если ваш сервер OpenVPN не является основным шлюзом локальной сети – потребуется добавить маршрутизацию для VPN подсети. Так как в моей сети используется Cisco 2621 в качестве основного шлюза, я добавил маршрут на ней следующей командой:
ip route 192.168.4.0 255.255.255.0 192.168.1.73

где первый и второй параметр — адрес и маска виртуальной подсети, а последний — адрес внутреннего интерфейса OpenVPN сервера. (Не забывайте о необходимости включения интерактивного режима на cisco перед вводом команды, а так же записи изменений в память устройства после добавления маршрута.)

Добавление маршрута на Linux шлюзе производится командой:

# route add -net 192.168.4.0/24 gw 192.168.1.73


где первый адрес, это наша виртуальная подсеть, а второй – адрес внутреннего интерфейса сервера OpenVPN.

Если не сделать вышеописанных действий, пакеты из локальной сети не смогут найти «дорогу» до VPN клиента.

Обеспечение доступа к внешнему ресурсу для VPN клиентов.
Для того, чтобы позволить VPN клиентам попадать на наш почтовый сервер, находящийся во внешнем мире относительно нашей рабочей сети, воспользуемся услугами iptables.

Я, создавая правило, не стал указывать допустимые порты соединения по той простой причине, что на внешнем сервере помимо почтового сервиса находятся другие сервисы, работающие на нестандартных портах, которые часто закрыты в гостевых системах для соединения. Вы можете указать, какие порты будут доступны для соединений клиентам VPN.

Кроме того, если правила на вашем файрволе настроены по принципу «всё запретить, нужное разрешить», то не забудьте добавить разрешения на пересылку пакетов с интерфейса tun0.

Запускаем сервер
После того, как были произведены все необходимые настройки, пришло время запустить OpenVPN сервер и посмотреть, что будет в журнальном файле. Обратите внимание, что по-умолчанию скрипт /etc/init.d/openvpn настроен на работу с конфигурационным файлом /etc/openvpn/openvpn.conf, а вовсе не server.conf, который идёт в примерах. Итак, запускаем наш сервер:

# /etc/init.d/openvpn start


В журнальном файле вы должны увидеть нечто вроде:

Sat Jun 17 22:54:42 2006 us=295361 OpenVPN 2.0.6 i686-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jun 15 2006
Sat Jun 17 22:54:42 2006 us=569088 Diffie-Hellman initialized with 1024 bit key
Sat Jun 17 22:54:42 2006 us=798824 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Sat Jun 17 22:54:42 2006 us=799346 TUN/TAP device tun0 opened
Sat Jun 17 22:54:42 2006 us=799376 TUN/TAP TX queue length set to 100
Sat Jun 17 22:54:42 2006 us=799409 /sbin/ifconfig tun0 192.168.4.1 pointopoint 192.168.4.2 mtu 1500
Sat Jun 17 22:54:42 2006 us=824310 /sbin/route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.4.2
Sat Jun 17 22:54:42 2006 us=827291 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Jun 17 22:54:42 2006 us=912828 GID set to nobody
Sat Jun 17 22:54:42 2006 us=912911 UID set to nobody
Sat Jun 17 22:54:42 2006 us=912950 Listening for incoming TCP connection on Х.Х.Х.Х:443
Sat Jun 17 22:54:42 2006 us=913000 Socket Buffers: R=[87380->131072] S=[16384->131072]
Sat Jun 17 22:54:42 2006 us=913028 TCPv4_SERVER link local (bound): X.X.X.X:443
Sat Jun 17 22:54:42 2006 us=913042 TCPv4_SERVER link remote: [undef]
Sat Jun 17 22:54:42 2006 us=913072 MULTI: multi_init called, r=256 v=256
Sat Jun 17 22:54:42 2006 us=913136 IFCONFIG POOL: base=192.168.4.4 size=62
Sat Jun 17 22:54:42 2006 us=913348 MULTI: TCP INIT maxclients=10 maxevents=14
Sat Jun 17 22:54:42 2006 us=913382 Initialization Sequence Completed


Так же стоит обратить внимание на вывод команды ifconfig, который должен показать, что в системе появилось новое сетевое устройство tun0.

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.4.1 P-t-P:192.168.4.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

Если устройство не появилось, то внимательно просмотрите журнал и файл конфигурации.

Не забудьте добавить сервис OpenVPN в список автоматически запускаемых, а так же сохранить новые правила iptables в вашем списке.

Установка и настройка клиента OpenVPN.
Теперь, когда первая половина настройки нашей системы завершена, самое время приступить к установке клиентской части программы. Я рассмотрю клиентов для Linux и Windows систем.

Установка Linux VPN клиента.
Клиент на Linux системе может потребоваться вот в каком случае. Допустим, у вас есть удалённые интранет сервера, ресурсы которых вы хотели бы использовать в своей локальной сети. Нет ничего проще! Мы просто подключаем эти системы к нашей VPN и пользуемся. Особенно это может оказаться полезным, если сервер является локальным для какой-нибудь удалённой сети.

Как и в случае с настройкой серверной системы убедитесь в наличии необходимых модулей в ядре.

В Linux клиентская часть от серверной отличается только конфигурационным файлом. Этот файл значительно короче и так же снабжён весьма подробными комментариями.

Первые же параметры указывают сервису OpenVPN, что в системе он является клиентом. Какое сетевое устройство и протокол используются, а так же какой ip адрес у сервера и какой порт используется сервисом OpenVPN.

client
dev tun
proto tcp
remote openvpn.domain.ru 443

Скопируем на клиентскую систему необходимые для работы ключи и сертификаты:

ca.crt, client1.crt, client1.key

и укажем их в конфигурационном файле

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client1.crt
key /etc/openvpn/easy-rsa/keys/client1.key

На этом настройка нашей клиентской системы завершена и мы можем её использовать. Запускать можно просто переименовав файл из client.conf в openvpn.conf или же командной сторокой

# openvpn /etc/openvpn/client.conf


Первый раз я рекомендовал бы запустить из командной строки. Так как протокол будет выводиться непосредственно на экран, это поможет убедиться, что всё нормально.
Если всё прошло нормально, то в конце вывода вы увидите что-то вроде:

Sun Jun 18 20:32:02 2006 TUN/TAP device tun0 opened
Sun Jun 18 20:32:02 2006 /sbin/ifconfig tun0 192.168.4.30 pointopoint 192.168.4.29 mtu 1500
Sun Jun 18 20:32:02 2006 /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.4.29
Sun Jun 18 20:32:02 2006 /sbin/route add -net Х.Х.Х.Х netmask 255.255.255.255 gw 192.168.4.29
Sun Jun 18 20:32:02 2006 /sbin/route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.4.29
Sun Jun 18 20:32:02 2006 GID set to nobody
Sun Jun 18 20:32:02 2006 UID set to nobody
Sun Jun 18 20:32:02 2006 Initialization Sequence Completed


Не забудьте добавить сервис в список автоматически запускаемых.

Установка Windows OpenVPN клиента.
OpenVPN в Windows системе обладает графическим интерфейсом (GUI), что значительно упрощает работу с ним для пользователей. По адресу [2] всегда можно найти свежую версию программы. Рекомендую хотя бы первый раз скачать полный инсталяционный пакет (на данный момент это openvpn-2.0.7-gui-1.0.3-install.exe), так как в нём содержатся драйвера для TUN/TAP интерфейсов. В последствии, можно скачивать обновления только самой программы. (Application only по ссылке.)

Среди достоинств и удобств клиента можно выделить:

• отображение иконки программы в системном трее;
• свертывание окна журнала соединения сразу после установления сессии;
• просмотр журнал соединения (вызов из контектстного меню);
• изменение настроек конфигурационного файла (вызов из контекстного меню);
• использование OpenVPN в качестве системного сервиса;
• окно ввода пароля на цифровой сертификат для аутентификации на сервере;
• дополнительная защита программы на операцию соединения (свой собственный пароль);
• изменение пароля на защищённый ключ (в том числе PKCS # 12);
• настройка используемого прокси сервера;
• использование настроек прокси сервера из опций Internet Explorer;
• выполнение скрипта (bat) перед и/или после соединения с сервером OpenVPN;
• индикация статуса соединения в системном трее.

Помните, что в версиях Windows младше 2000/XP OpenVPN клиент работать не будет. Но думаю в наше время такие версии операционных встречаются редко.

После установки клиента в меню программ появляется пункт OpenVPN с богатым выбором:
• ссылка на папку с конфигурационными файлами;
• на папку с примерами;
• программа формирования статического ключа;
• программа создания сертификата и формирования запроса на его подпись;
• собственно программа клиент OpenVPN;
• ссылки на различную документацию.

Конфигурационный файл, как и все предыдущие, снабжен комментариями и ничем не отличается от файла для клиента Linux системы. Разница только в расширении файла. Если в Linux оно было «conf», то в Windows – opvpn. Поэтому описывать настройки смысла не имеет, можно смело заимствовать их из предыдущего примера.

Остановимся только на описании ключей и сертификатов. Как вы помните, мы решили использовать двухфакторную аутентификацию мобильных пользователей. Для этого скопируем на клиентскую систему с серверной только два файла – ca.crt и сертификат соответствующий (по имени) данному клиенту с раширением p12.

Теперь нам необходимо импортировать наш сертификат в имеющийся в нашем расположении Alladin eToken. Для этого скачаем (если ещё не установлено) программное обеспечение по работе с ключом RTE по ссылке [3].

После установки полученной программы, у нас в меню программ появится папка eToken с единственной ссылкой на программу eToken properties.


Рис 1. Программа для работы с ключом.

Вставив наш ключ в USB порт, мы увидим его в окне программы. Перейдя на иконку ключа и выбрав «Дополнительно», введем PIN код для доступа к ключу. Это даст возможность импортировать сертификат.


Рис 2. Окно импорта сертификата.

Если при создании сертификата на сервере был использован пароль (сразу после его подписывания), то здесь нас попросят ввести его еще раз и можете распоряжаться данным сертификатом.

Теперь мы можем убедиться, что сертификат известен нашей Windows системе, а заодно узнать, как к нему будет обращаться клиент OpenVPN. Для этого проследуем в «Панель управления», где выберем «Свойства обозревателя». В этом окне нас интересует только вкладка «Содержание» и кнопка «Сертификаты».


Рис 3. Список доступных сертификатов.

Выделим наш сертфикат и кликнем на «Просмотр», в открывшемся окне выбирем «Состав». Здесь нас интересует поле «Отпечаток», которое скопируем в буфер обмена.

Полученную информацию об отпечатке сертификата внесём в конфигурационный файл нашего OpenVPN клиента.

cryptoapicert «THUMB:ed 38 ac 63 …»
ca ca.crt

Теперь, когда первоначальное конфигурирование клиента завершено пришло время опробовать его в действии. Для этого достаточно в контекстном меню выбрать коннект. Если обращение к eToken прошло корректно, появится окно ввода PIN кода для доступа к ключу.


Рис 4, 5. Удача и поражение.

В случае ошибки, убедитесь, что ключ вставлен в USB порт, а предыдущие шаги выполнены верно.

После подтверждения доступа к ключу в том же окне ввода будет отображаться журнал соединения с сервером. Окно автоматически скроется, как только соединение будет успешно установлено. Вернуться к журналу всегда можно, выбрав в контекстном меню «View log». Осталось попробовать выполнить ping до какого-нибудь из компьютеров удалённой локальной сети и убедиться, что всё работает правильно.

Теперь, когда всё уже настроено и работает пора вернуться к ситуации, когда доступ во внешний мир ограничен веб ресурсами. А для его предоставления используется прозрачное проксирование.

hts и htc.
Как уже было сказано выше, эти две программки легко устанавливаются и ещё проще используются. Суть их работы состоит в том, что первая «слушает» указанный ей порт (в нашем случае это будет 80, доступ к которому есть везде) и в случае инициации соединения создаёт http тунель.

Вторая же наоборот слушает 443 порт и инициирует с удалённой htc соединение через 80 порт.

Установка htc в Gentoo Linux на сервере выполняется простой командой:

# emerge httptunnel


Для Windows систем скачать httptunnel можно с страницы проекта по ссылке [4].

Использовать httptunnel весьма и весьма просто. Для запуска на сервере достаточно команды:

# hts --forward-port Х.Х.Х.Х:443 80


Где указан ip адрес и порт, на которые должен быть установлен туннель в случае обращение на порт 80. Команда выполняется без какого-либо вывода на экран. О результатах её выполнения можно узнать только из системного журнала. (Например, /var/log/messages.)

Jun 18 01:47:28 admin hts[27389]: hts (httptunnel) 3.3 started with arguments:
Jun 18 01:47:28 admin hts[27389]: me = hts
Jun 18 01:47:28 admin hts[27389]: device = (null)
Jun 18 01:47:28 admin hts[27389]: port = 80
Jun 18 01:47:28 admin hts[27389]: forward_port = 443
Jun 18 01:47:28 admin hts[27389]: forward_host = Х.Х.Х.Х
Jun 18 01:47:28 admin hts[27389]: content_length = 102400
Jun 18 01:47:28 admin hts[27389]: strict_content_length = 0
Jun 18 01:47:28 admin hts[27389]: use_std = 0
Jun 18 01:47:28 admin hts[27389]: debug_level = 0
Jun 18 01:47:28 admin hts[27389]: pid_filename = (null)


Команда netstat подтверждает нам, что hts действительно работает и «слушает» 80 порт.

# netstat -napl |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 27389/hts


Осталось сделать windows скрипт (bat) для запуска клиентской части httptunnel. Этот файл мы создадим в папке c:\program files\openvpn\config и назовём hts_pre.bat. А в сам файл добавим только одну строку:

C:\httptunnel\htc.exe -F 443 -P 192.168.1.1:3128 X.X.X.X:80


Где:
-F 443 указывает порт, являющийся итоговым получаетелем.
-P 192.168.1.1:3128 ip адрес и порт прокси сервера гостевой системы.
X.X.X.X:80 собственно адрес серверной части httptunnel.

Выбор места создания и имени файла для скрипта не случаен. Как было уже сказано выше, OpenVPN для Windows умеет выполнять bat файлы до соединения, сразу после соединения и после завершения сессии. Для этого достаточно выполнить всего два условия. Создать bat файл в директории конфигурационных файлов OpenVPN и назвать файл по следующей схеме:

• Назвать файл xxx_pre.bat для выполнения скрипта непосредственно перед соединением.
• Назвать xxx_up.bat для выполнения сразу после установления соединения.
• Назвать ххх_down.bat для завершающего сессию скрипта.

Нас интересует первый тип скрипта. К слову сказать, выполнив команду из нашего bat файла, система не закроет окно и это прийдётся сделать вручную. Это не остановит наш туннель, но избавит от лишнего открытого окна на рабочем столе. Предполагаю, есть средство, позволяющее избежать этого «вечно открытого» окна, но сходу я его не обнаружил (может быть потому что не силён в написании скриптов для Windows). Если вам способ известен – тем лучше.

Как вы заметили, для установления тунеля нам потребовалось знать ip адрес и порт, на которых работает прокси сервер гостевой системы. Эта информация, конечно, не написана крупным шрифтом при входе в здание, но тем не менее (обычно) легко узнаётся у системного администратора. Случаев, когда сисадмин отказывался сообщать параметры прокси мне (возможно пока) не известны.

Теперь наша система полностью настроена и готова работать в практически любых условиях. Этакий максимально защищённый «вседорожник» на просторах интернета!

Насколько мобильным может быть OpenVPN.
Как уже было сказано выше, система OpenVPN позволяет использовать удалённую локальную сеть практически в любых условиях. Но помимо компьютеров (в том числе и ноутбуков), как вам известно, существуют ещё более «мобильные» устройства. Я говорю о коммуникаторах и наладонниках (КПК). В большинстве из них (например, в устройствах на базе Windows Mobile или Symbian) есть либо встроенное средство установления VPN соединения, либо можно установить программное обеспечение стороннего производителя.

Однако, из-за использования в системе OpenVPN TUN/TAP простые средства соединения не подойдут. И найти их для устройств данного класса, увы, пока не возможно. Изыскания в интернете дали только информацию о ведущихся разработках реализации возможности использования OpenVPN. (Сейчас ссылка на информацию об этом есть уже и на главной странице проекта. [5])

Правда, есть одно исключение. Если вы обладатель КПК Sharp Zaurus и давно собирались установить на него Linux, то вполне сможете использовать ваш VPN. Драйвера и необходимый софт для этого можно найти на просторах интернета. Он используется многими людьми. Необходимые файлы можно взять, например, здесь [6].

Заключительное слово.
Устанавливая и настраивая клиент OpenVPN помните, что средства встроенной защиты уже самой Windows программы никто не отменял и ввод ещё одного пароля не будет лишним, если того требует строгая политика информационной безопасности вашей компании. Использование же сертификатов без eToken, как мы помним, так же нам доступно. Например, на домашних компьютерах аппаратные ключи использовать совершенно не обязательно. А вот мобильным пользователям ПК eToken явно не будет лишним. Особенно, если вспомнить, что этот же ключ можно использовать для авторизации в самой Windows системе (и не только).

Ссылки:
[1] — openvpn.net
[2] — openvpn.se/files/install_packages
[3] — www.alladin.ru/support/download/category177
[4] — userpages.umbc.edu/~tmoses1/hypertunnelNT.zip
[5] — www.ziggurat29.com/OVPNPPCAlpha/OVPNPPCAlpha.htm
[6] — users.skynet.be/isa-et-pep/pep/zaurus/feed

(с) akeeperКоршунов Алексей.
Впервые опубликовано в журнале «Системный администратор.