Алексей Коршунов
OpenVPN: доступ повышенной проходимости
Не секрет, что своевременный доступ к информации, в том числе хранящейся внутри корпоративной сети компании, может оказаться решающим фактором успешной работы сотрудников. Речь о виртуальных частных сетях (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-туннеля.
Выберем, как будет работать наш VPN: по tcp или udp. Для этого есть соответствующая опция:
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.
Если правила на вашем firewall настроены по принципу «всё запретить, нужное разрешить», то не забудьте добавить разрешения на пересылку пакетов с интерфейса 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).
Рисунок 1. Программа для работы с ключом
Вставив наш ключ в USB-порт, мы увидим его в окне программы. Перейдя на иконку ключа и выбрав «Дополнительно», введем PIN-код для доступа к ключу. Это даст возможность импортировать сертификат (см. рис. 2).
Рисунок 2. Окно импорта сертификата
Если при создании сертификата на сервере был использован пароль (сразу после его подписывания), то здесь нас попросят ввести его еще раз и можете распоряжаться данным сертификатом.
Теперь мы можем убедиться, что сертификат известен нашей Windows-системе, а заодно узнать, как к нему будет обращаться клиент OpenVPN. Для этого проследуем в «Панель управления», где выберем «Свойства обозревателя». В этом окне нас интересует только вкладка «Содержание» и кнопка «Сертификаты» (см. рис. 3).
Рисунок 3. Список доступных сертификатов
Выделим наш сертфикат и кликнем на «Просмотр», в открывшемся окне выбирем «Состав». Здесь нас интересует поле «Отпечаток», которое скопируем в буфер обмена.
Полученную информацию об отпечатке сертификата внесём в конфигурационный файл нашего OpenVPN-клиента.
cryptoapicert "THUMB:ed 38 ac 63 …"
ca ca.crt
Теперь, когда первоначальное конфигурирование клиента завершено, пришло время опробовать его в действии. Для этого достаточно в контекстном меню выбрать коннект. Если обращение к eToken прошло корректно, появится окно ввода PIN-кода для доступа к ключу (см. рис. 4).
Рисунок 4. Удача и поражение
В случае ошибки убедитесь, что ключ вставлен в 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 filesopenvpnconfig и назовём hts_pre.bat. А в сам файл добавим только одну строку:
C:httptunnelhtc.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-системе (и не только).
- http://openvpn.net
- http://openvpn.se/files/install_packages
- http://www.alladin.ru/support/download/category177
- http://userpages.umbc.edu/~tmoses1/hypertunnelNT.zip
- http://www.ziggurat29.com/OVPNPPCAlpha/OVPNPPCAlpha.htm
- http://users.skynet.be/isa-et-pep/pep/zaurus/feed