Перейти к содержимому

Remote cert tls server что означает

  • автор:

Дополнительные возможности OpenVPN по обеспечению безопасности виртуальной частной сети

Консультация по продукту 1cloud

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

Услуги 1cloud

Частное облако от 1cloud.ru
  • Любые конфигурации виртуальных серверов
  • Бесплатные частные сети
  • Полная автоматизация управления

Примечание: данный материал подразумевает наличие у вас готовой к работе базовой конфигурации OpenVPN. Если такая конфигурация еще не развернута, вы можете воспользоваться одной из наших подробных инструкций по настройке OpenVPN-сервера:

  • Windows Server 2008 / 2012
  • Ubuntu 12 / Debian 7
  • CentOS 7

VPN

tls-auth

Параметр tls-auth добавляет использование еще одной подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Теперь пакет, не имеющий такой подписи, будет отбрасываться, не обрабатываясь. Это обеспечит дополнительный уровень безопасности протокола SSL/TLS, защищая систему от таких атак, как:

  • Сканирование прослушиваемых VPN-сервером портов
  • Инициация SSL/TLS-соединения несанкционированной машиной (хотя подобные рукопожатия не проходят и при стандартной конфигурации OpenVPN, tls-auth отсекает их на значительно более раннем этапе)
  • DoS-атаки и флуд на порты OpenVPN
  • Переполенение буфера SSL/TLS

Для активации tls-auth необходимо сгенерировать дополнительный секретный ключ, который будет использоваться совместно со стандартной парой ключей RSA.Сделать это можно с помощью следующей команды:

openvpn —genkey —secret ta.key

Теперь в стандартной директории, в которой хранятся сгенерированные ключи (easy-rsa) появится еще один файл ta.key, который нужно перенести на все устройства сети OpenVPN через защищенный канал (в те же директории, в которых хранятся пользовательские ключи .crt и .key. Затем следует добавить или расскоментировать в файле конфигурации сервера (server.conf) следующую строку:

tls-auth ta.key 0

Также нужно в файле настроек клиента (client.ovpn) добавить/расскоментировать аналогичную строку:

tls-auth ta.key 1

proto udp

Несмотря на то, что OpenVPN предусматривает использование как TCP, так и UDP-протокола для подключения, рекомендуем использовать UDP, так как он обеспечивает более высокий уровень защиты от DoS-атак и сканирования портов сравнительно с протоколом TCP. Выбор протокола устанавливается опцией proto в файле конфигурации сервера. Установите proto udp.

Внимание! Если вы сменили протокол на уже работающем сервере, не забудьте сделать это также в файлах конфигурации клиентов, а затем проверить разрешение для используемого порта UDP (по-умолчанию 1194) в вашем Firewall и перезапустить VPN-сервер.

user/group (не работает на Windows)

Сброс привилегий суперпользователя сразу после активации VPN — хороший способ сделать сервер менее привлекательной целью для различных атак. Рекомендуем всегда использовать эту опцию на серверах под управлением Linux/BSD. Этот параметр устанавливается в следующих строках файлов конфигурации сервера/клиента:

user nobody
group nobody

Работа VPN в непривилегированном режиме (только для Linux)

OpenVPN может работать вовсе без привелегий на машинах под управлением Linux. Такая конфигурация является более сложной в развертывании, но обеспечивает повышенный уровень безопасности. Для ее реализации нужно настроить OpenVPN на использование интерфейса iproute. Для этого укажите —enable-iproute2 в параметрах скрипта configure. Для настройки вам также понадобится установленный на машине пакет sudo.

Такая конфигурация основана на возможности Linux-систем устанавливать разрешения на создаваемый демоном OpenVPN виртуальный сетевой адаптер tun так, чтобы непривилегированный пользователь мог получить доступ к нему. Для изменения параметров сетевого интерфейса и таблицы маршрутизации обычным (не «super») пользователем при запуске iproute следует использовать параметр sudo.

Настройка OpenVPN на работу в непривилегированном режиме:

Добавьте представленный ниже скрипт в файл /usr/local/sbin/unpriv-ip (не забудьте указать этому файлу права на исполнение):

Чтобы разрешить для пользователя (в нашем примере ‘1cloud’) выполнение /sbin/ip откройте visudo и добавьте следующую строку:

1cloud ALL=(ALL) NOPASSWD: /sbin/ip

Вы можете дать разрешения также и для группы пользователей:

%users ALL=(ALL) NOPASSWD: /sbin/ip

Теперь необходимо добавить в файл конфигурации OpenVPN следующие строки:

dev tunX/tapX
iproute /usr/local/sbin/unpriv-ip
(Необходимо выбрать один из интерфейсов (tun или tap) и заменить X на номер вашего интерефейса.

От имени пользователя root активируйте сетевой адаптер и дайте разрешение на управление им для пользователя и/или группы. Команда, приведенная ниже, создаст интерфейс tunX (необходимо заменить на название вашего адаптера) и даст требуемые разрешения для пользователя 1cloud и группы users.

openvpn —mktun —dev tunX —type tun —user 1cloud —group users

Теперь вы можете запустить OpenVPN от имени указанного выше рядового пользователя.

chroot (не работает на Windows)

Параметр chroot обеспечивает блокировку сервиса OpenVPN в условно обозначаемой «тюрьме» (chroot jail), из которой приложение не сможет иметь доступ к какой-либо части файловой системы, кроме определенной директории, указанной в опциях для параметра chroot (для получения подробной информации изучите man 1 chroot и man 2 chroot).

Будет означать, что OpenVPN-демон при инициализации попадет в директорию jail и переориентируется на эту папку так, чтобы в дальнейшем для службы OpenVPN не было возможности получить доступ к каким-либо файлам, кроме каталога jail и его подкаталогов. Это имеет существенное значение с точки зрения безопасности, поскольку если злоумышленнику и удастся скомпрометировать VPN-сервер инъекцией кода, «пойманный» эксплойт останется заблокированным в каталоге, полностью изолированном от основной части файловой системы.

Внимание: т.к. опция chroot изменяет домашнюю директорию для сервиса OpenVPN, следует перенести в jail-каталог все используемые при инициализации OpenVPN файлы.

Увеличение размера RSA-ключа

Размер RSA-ключа шифрования устанавливается директивой KEY_SIZE файла easy-rsa/vars, значение которой должно быть установлено до создания любых ключей OpenVPN. По-умолчанию этот параметр имеет значение 1024 bit , но может быть увеличен до 2048 bit без заметного влияния на производительность виртуальной частной сети, за исключением едва заметного увеличения времени рукопожатия (handshake).

Увеличение размера симметричных ключей

При стандартной конфигурации OpenVPN использует Blowfish — 128-битный симметричный ключ шифрования, но при этом может принимать все виды ключей, поддерживаемых библиотекой OpenSSL. Например, вы можете использовать 256-битный шифр AES (Advanced Encryption Standard), добавив в файлы настроек сервера и клиентов OpenVPN параметр:

Хранение закрытого ключа CA на отдельной машине

Перенос файла секретного ключа Центра Сертификации (ca.key) на отдельный компьютер, не подключенный к сети интернет, или на другое безопасное внешнее хранилище — хороший способ исключить компрометацию существующих и генерацию новых, но не санкционированных ключей X509.

Дело в том, что корневой CA-сертификат не обязательно должен находиться на сервере OpenVPN. Вы вполне можете использовать отдельную машину для подписи ключей, держа ее физически изолированной, и перенося ключи с использованием отличных от интернет каналов, например съемных дисков. Это существенно осложнит потенциальному злоумышленнику задачу кражи ключа Центра Сертификации.

Отзыв сертификатов

Процедура отзыва сертификата подразумевает досрочное прекращение активности ранее созданного и заверенного сертификата пользователя во избежание его дальнейшего использования . Ниже представлены самые распространенные предпосылки для отзыва:

  • Закрытый клиентский ключ (.key), связанный с отзываемым сертификатом (.crt), скомпрометирован или украден
  • Пользователь забыл пароль пароль для своего ключа
  • Вы хотите по собственной инициативе прекратить доступ пользователя к виртуальной частной сети

В рамках данного примера, мы отзовем сертификат пользователя client1.

Войдите в терминал (Linux) или командную строку (Windows) и откройте директорию easy-rsa, аналогично тому, как вы делали это при первичной генерации ключей сервера и клиентов OpenVPN. Введите следующие команды:

./vars
./revoke-full client1

vars
revoke-full client1

Вы должны увидеть результат, похожий на этот:

Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf DEBUG[load_index]: unique_subject = «yes» Revoking Certificate
04. Data Base Updated Using configuration from /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = «yes»
client2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/emailAddress=me@myhost.mydomain
error 23 at 0 depth lookup:certificate revoked

Пусть вас не смущает «error 23» в последней строке, т.к. именно этот ответ означает, что отозванный сертификат больше не проходит проверку действительности. Выполнение revoke-full генерирует CRL-файл (certificate revocation list) под именем crl.pem в подкаталоге keys. Этот файл необходимо перенести в рабочую директорию OpenVPN-сервера. Проверка CRL должна быть активирована в файле конфигурации сервера добавлением/расскоментированием строки: crl-verify crl.pem.

Валидация серверного сертификата

Для исключения атак типа Man-in-the-Middle, когда машина злоумышленника выдает себя за VPN-сервер для клиента, следует указать пользователям на необходимость проверки серверного сертификата. Для этого существует несколько способов. В данном примере мы рассмотрим метод, применимый для OpenVPN версий 2.1 и выше:

При генерации сертификата сервера укажите значения полей key usage и extended key usage (см. документацию easy-rsa для получения более подробных сведений). Затем добавьте/расскоментируйте следующую строку в файле параметров клиента:
remote-cert-tls server

Используйте перечисленные выше инструменты для повышения уровня безопасности вашей виртуальной частной сети и обращайте внимание на сохранность других элементов: используемых каналов передачи ключей и сертификатов, физическая сохранность узлов сети VPN, настройки Firewall и антивирусного ПО, права доступа пользователей к рабочим директориям. Надеемся, этот материал поможет вам в достижении ваших задач.

Тестирование сервера

P. S. Другие инструкции:

  • Сравнительный обзор реализаций технологии VPN: что выбрать?
  • Настройка Point-to-site VPN с помощью OpenVPN Remote Access Server на pfSense 2.3
  • Настройка Site-to-Site VPN с помощью pfSense 2.3

Руководство по установке и настройке OpenVPN

Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.

По соображениям безопасности доступ к этим ресурсам ограничен при помощи межсетевого экрана (файервола) по портам и адресам IP. Ежедневную перенастройку доступа при изменении динамических IP сотрудников едва ли можно назвать разумным решением.

Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.

В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.

Теме OpenVPN посвящены многочисленные статьи и сообщения на форумах. Тем не менее, нужную информацию мне пришлось собирать по частям из разных мест. Попутно приходилось разбираться с многочисленными терминами и технологиями. В качестве серверов OpenVPN были использованы VDS на базе FreeBSD и Debian Linux, в качестве клиентов — рабочие станции FreeBSD, Debian Linux, Ubuntu и Microsoft Windows.

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

С благодарностью приму замечания и предложения по содержимому статьи.

Оглавление

  • Немного теории
  • Компоненты сети OpenVPN
  • Готовим оборудование для установки OpenVPN
  • Создание удостоверяющего центра CA
  • Установка утилиты Easy-RSA
  • Создание сервера OpenVPN
  • Установка и запуск ПО клиента OpenVPN
  • Установка прокси-сервера Squid
  • Особенности установки на FreeBSD
  • Особенности установки клиента OpenVPN в Microsoft Windows
  • Полезные ссылки

Немного теории

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

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

Почему сеть VPN называется виртуальной и частной?

Виртуальная она потому, что узлы сети объединяются не физическими линиями, а виртуальными соединениями, которые создаются программным обеспечением (ПО) VPN.

Сеть VPN частная, так как к ней могут подключаться только узлы компании, создавшей эту сеть, а не все желающие. На каждом узле сети VPN должно работать ПО VPN. Еще там должны находиться ключи и сертификаты, обеспечивающие узлам доступ к сети VPN и криптографическую защиту передаваемых данных.

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

Обмен данными по сети

ПО OpenVPN передает данные по сети с помощью протоколов UDP или TCP с применением драйвера TUN/TAP. Протокол UDP и драйвер TUN позволяет подключаться к серверу OpenVPN клиентам, расположенным за NAT.

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

Безопасность и шифрование

Безопасность и шифрование в OpenVPN обеспечивается библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).

Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.

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

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой «атаки посредника» (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

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

Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.

Сертификаты и удостоверяющий центр CA

Как мы уже сказали, при ассиметричной криптографии открытый ключ используется для зашифрования данных, а закрытый — для расшифрования. Чтобы избежать подделки открытого ключа, какая-то третья сторона должна его заверить. В результате этой процедуры создается так называемый сертификат открытого ключа.

Сертификат должна заверить организация, которой доверяют. Эта организация играет роль удостоверяющего центра (Certification authority, CA).

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

Существует немало коммерческих организаций, выпускающих сертификаты, пригодные, например, для создания HTTPS-сайтов, для цифровой подписи сообщений электронной почты или документов, для систем мгновенного обмена сообщениями, такими как Jabber. Эти сертификаты выдаются на ограниченный срок и стоят денег.

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

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

Сертификаты создаются в соответствии со стандартом X.509. Этот стандарт определяет форматы данных и процедуры распределения открытых ключей с помощью сертификатов, снабженных электронными подписями.

Сертификат X.509 — это публичный ключ, содержащий такие данные, как субъект, владеющий сертификатом, имя узла, период действия, алгоритм и значение подписи сертификата, и т.д. Сертификат должен быть подписан приватным ключом удостоверяющего центра (Certification authority, CA).

Когда наш узел рабочей станции подключается к удаленному узлу (серверу) с использованием протокола TLS, сервер отправляет ему сертификат X.509. На нашем узле есть публичный ключ удостоверяющего центра CA, который подписал этот сертификат. Этот ключ используется для проверки подписи.

Таким образом, имеется способ проверки удаленного узла (сервера), к которому наш узел собирается подключиться, чтобы исключить «атаки посредника» MITM.

Список отзыва сертификатов

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

Для упрощения этой процедуры в OpenVPN предусмотрен список отзыва сертификатов (Сertificate Revocation List, CRL) и простые средства для управления этим списком.

Список CRL создается в удостоверяющем центре CA и потом копируется на сервер OpenVPN. После внесения изменений в список CRL его необходимо повторно скопировать на сервер OpenVPN.

Файл Диффи-Хелмана

Файл Диффи-Хелмана (Diffie-Hellman) необходим для реализации одноименного протокола, позволяющего использовать небезопасный канал для получения общего секретного ключа. Этот ключ будет в дальнейшем использоваться для защищенного обмена данными с помощью алгоритмов симметричного шифрования.

В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Здесь имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей.

Файл Диффи-Хелмана создается на сервере OpenVPN.

Статический ключ HMAC

Статический ключ (хэш-код) аутентификации сообщений (Hash-based Message Authentication Code, HMAC) обеспечивает проверку подлинности информации, передаваемой между сторонами. Этот ключ создается на сервере OpenVPN с целью дополнительной защиты от DoS-атак и флуда.

Компоненты сети OpenVPN

Прежде чем мы перейдем от теории к практике, перечислим основные компоненты сети OpenVPN и объекты, с которыми нам придется иметь дело.

Удостоверяющий центр CA

Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.

Сервер OpenVPN

ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.

Клиент OpenVPN

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

Сертификаты (публичные ключи) X.509

Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные.

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

Приватные ключи

Приватные ключи секретные. Они должны создаваться и храниться на каждом узле сети OpenVPN, предназначены для расшифрования данных и никогда не должны передаваться по сети.

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

Список отзыва сертификатов CRL

Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL.

После создания и каждого изменения список CRL переносится на серверы OpenVPN.

Файл Диффи-Хелмана

Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.

Статический ключ HMAC

Служит для проверки подлинности передаваемой информации. Обеспечивает защиту от DoS-атак и флуда. Создается на сервере OpenVPN.

Готовим оборудование для установки OpenVPN

Если вы впервые настраиваете сеть VPN, лучше всего экспериментировать на виртуальных машинах VDS. Это могут быть VDS, созданные локально на вашем компьютере или на сервере в вашей сети, либо арендованные у провайдера. Перед арендой VDS поинтересуйтесь, поддерживается ли драйвер TUN/TAP. Некоторые провайдеры требуют дополнительной оплаты для подключения TUN/TAP.

На рис. 1. мы показали схему стенда, на котором будем устанавливать компоненты и узлы OpenVPN (имена и адреса IP хостов могут быть другими).

Рис. 1. Стенд для изучения OpenVPN.

Здесь изображены три узла (хоста), для каждого из которых потребуется отдельный VDS:

  • сервер OpenVPN (vpnsrv, 192.168.0.54);
  • клиент OpenVPN (vpnclient, 192.168.0.55);
  • удостоверяющий центр CA (ca, 192.168.0.53)

Хосты клиента и сервера VPN соединены обычным, небезопасным каналом. В случае макета это может быть локальная сеть, в реальной жизни — канал сети Интернет. ПО OpenVPN создает в этой сети канал, обозначенный на рис. 1 красным цветом, внутри которого устанавливается безопасный шифрованный канал (обозначен зеленым цветом).

В макете хост удостоверяющего центра CA можно подключить к вашей локальной сети. Для реальной работы хост CA нужно отсоединить от сети, а обмен сертификатами и ключами осуществлять с помощью, например, USB флэш-диска.

Если к безопасности предъявляются повышенные требования, хост CA необходимо поместить в охраняемое помещение — расположенная на этой машине информация позволяет создавать ключи доступа к вашей сети VPN.

Мы проводили установку серверов OpenVPN в среде ОС Debian Linux и FreeBSD, клиентов OpenVPN в ОС Debian Linux, FreeBSD и Microsoft Windows.

Основная часть статьи посвящена установке компонентов OpenVPN для Debian Linux. Далее мы рассмотрим особенности установки для FreeBSD и Microsoft Windows.

По возможности на узлах сети OpenVPN используйте новые версии ОС. Перед тем как приступить к работе с OpenVPN, обновите пакеты Linux:

# apt-get update # apt-get upgrade 

Установите на всех узлах пакет пакет zip, если он не был установлен ранее:

# aptitude install zip 

Этот пакет будет нужен для распаковки архива утилиты Easy-RSA, с помощью которой мы будем создавать ключи и сертификаты.

На всех узлах настройте обновление и синхронизацию времени.

# apt-get install ntpdate # apt-get install -y ntp # /etc/init.d/ntp stop # ntpdate pool.ntp.org # /etc/init.d/ntp start 

Синхронизация времени необходима, т.к. сертификаты имеют период действия. Если часы, например, на хосте удостоверяющего центра CA и сервера OpenVPN не синхронны, может получиться так, что выданный удостоверяющим центром сертификат не будет действителен на узлах сети OpenVPN из-за ограничений по дате или времени.

Дальнейшие работы мы начнем с подготовки хоста удостоверяющего центра CA. Затем установим хосты сервера и клиента OpenVPN.

Создание удостоверяющего центра CA

Как мы уже говорили, задача удостоверяющего центра CA — выдача подписанных сертификатов для сервера и клиентов OpenVPN.

Чтобы получить сертификат, сервер или клиент на своем хосте генерирует файл запроса на сертификат. Этот файл запроса передается на хост CA, который создает сертификат и подписывает его. Далее подписанный сертификат передается на запросивший хост.

Одновременно с запросом сертификата создается приватный ключ. Приватные ключи создаются для всех узлов сети OpenVPN: для удостоверяющего центра CA, для сервера и всех клиентов OpenVPN.

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

На рис. 2 показан процесс получения подписанного сертификата для сервера OpenVPN.

Рис. 2. Получение сертификата для сервера OpenVPN

Сервер OpenVPN создает свой приватный ключ и файл запроса на получение сертификата. Файл запроса передается в удостоверяющий центр, например, на USB флеш-диске.

Удостоверяющий центр на основе запроса создает подписанный сертификат, который затем требуется перенести на сервер OpenVPN, также на USB флэш-диске.

Если к безопасности не предъявляется особых требований или вы только изучаете OpenVPN, можно подключить машину удостоверяющего центра к сети и передавать запросы и сертификаты, например, с помощью утилит SFTP или SCP. Можно даже совместить функции CA и, например, сервера OpenVPN в одном хосте.

Аналогичным образом необходимо получить сертификаты для всех клиентских узлов (рис. 3).

Рис. 3. Получение сертификата для клиента OpenVPN

Установка утилиты Easy-RSA

Все операции по созданию ключей и сертификатов можно выполнить с помощью утилиты openssl. Однако проще воспользоваться специально созданной для этого программой Easy-RSA, которая использует openssl для выполнения действий с ключами и сертификатами.

Ранее утилита Easy-RSA поставлялась вместе с OpenVPN, но теперь это отдельный проект.

Все операции с удостоверяющим центром и сертификатами можно (и нужно) проводить от имени непривилегированного пользователя.

Создайте пользователя с именем, например, ca и перейдите в его домашний каталог:

# adduser ca # su ca $ cd 

Загрузите дистрибутив программы утилитой wget.

$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip 

После загрузки распакуйте архив master.zip:

$ unzip master.zip 

В табл. 1 перечислены файлы и каталоги, входящие в дистрибутив Easy-RSA.

Таблица 1. Состав дистрибутива Easy-RSA.

Файл или каталог

Как создать и настроить свой VPN-сервер

Сейчас на рынке существует множество готовых VPN-сервисов, но не все они достаточно надежны и стабильны. К тому же большинство из них имеют низкую скорость передачи данных, из-за чего страницы загружаются очень долго. Решить эти проблемы легко — для этого достаточно создать собственный VPN-сервер. О том, как поднять свой VPN на сервере, расскажем ниже.

Зачем нужен VPN

VPN (виртуальная частная сеть) — это технология, которая обеспечивает безопасное и защищенное подключение к интернету. Она создает виртуальный туннель между вашим устройством и глобальной сетью, шифрует все данные и направляет их через удаленный сервер. VPN используется для шифрования трафика, изменения IP-адреса и местоположения пользователя. С помощью VPN вы можете безопасно работать в незащищенной сети (такой, как Wi-Fi в кафе или отеле) и не бояться, что ваши данные перехватят злоумышленники. Также VPN помогает обойти блокировки различных ресурсов.

Что такое OpenVPN

OpenVPN — популярная реализация технологии VPN с открытым исходным кодом. С его помощью вы можете создать собственный VPN-сервер с высоким уровнем безопасности гибкими настройками. OpenVPN поддерживает Windows, MacOS, Linux, Android, iOS и ChromeOS, поэтому вы сможете использовать его на разных устройствах.

Как арендовать и настроить свой ВПН-сервер

Чтобы обзавестись собственным VPN, вам необходимо арендовать облачный сервер VPS и развернуть на нем OpenVPN. Конфигурация сервера может быть любой, поэтому подойдет даже минимальный тариф. При заказе сервера нужно выбрать операционную систему Ubuntu 20.04:

Создаем собственный VPN-сервер: установка OpenVPN

Мы производили установку на сервер с ОС Ubuntu 20.04 — для других версий процесс установки и настройки может отличаться. Чтобы начать установку, подключитесь к серверу по SSH.

Установка пакетов

  1. Обновите списки пакетов с помощью команды:

[ESR] Настройка OpenVPN на ESR

1) Для ОС Windows cкачаем с официального сайта дистрибутив клиента. Для ОС Linux устанавливаем пакет из репозитория разработчика дистрибутива.

Далее все примеры команд будут приведены для OC Windows, пути расположения файлов будут отличаться в зависимости от особенностей конкретного дистрибутива, информацию о расположении можно получить из соответствующих man страниц.

2) Устанавливаем программу. Нажимаем кнопку «Customize» и выбираем установку компонента.

EasyRSA Certificate Management Scripts (специально созданная программа по созданию ключей и сертификатов, которая использует openssl для выполнения действий с ключами и сертификатами) она нам понадобится для генерации ключей и сертификатов.

3) Указываем путь. В будущем он нам понадобится, поэтому запомните его. В нашем случае мы используем стандартный путь: C:\Program Files\OpenVPN.

4) После установки заходим в C:\Program files\OpenVPN\easy-rsa (путь, который указали в п. 3 \easy-rsa).

Открываем vars.example блокнотом и редактируем его (блокнот надо запустить с правами администратора, чтобы иметь права на запись в папку).

#set_var EASYRSA_REQ_COUNTRY «US»
#set_var EASYRSA_REQ_PROVINCE «California»
#set_var EASYRSA_REQ_CITY «San Francisco»
#set_var EASYRSA_REQ_ORG «Copyleft Certificate Co»
#set_var EASYRSA_REQ_EMAIL «me@example.net»
#set_var EASYRSA_REQ_OU «My Organizational Unit»
#set_var EASYRSA_CA_EXPIRE 3650
#set_var EASYRSA_CERT_EXPIRE 825
Убираем знак комментария в начале (#) и задаём требуемые значения:

  • страна
  • регион
  • город
  • организация
  • почта администратора
  • подразделение
  • время действия корневого и пользовательских сертификатов в днях

Строку #set_var EASYRSA_OPENSSL приводим к виду:
set_var EASYRSA_OPENSSL «..bin/openssl.exe»
Сохраняем файл как vars (без расширения!).

5) Запускаем командную строку от имени администратора, не закрываем окно до конца процесса генерации сертификатов.

6) Поочерёдно выполняем следующие три команды
cd: C:\Program files\OpenVPN\easy-rsa (путь, который указали в п. 3 \easy-rsa).
EasyRSA-Start.bat

В итоге мы должны увидеть вот такое окно:

7) Инициализируем pki командой ./easyrsa init-pki

8) Генерируем ключ Диффи Хельмана — команда ./easyrsa gen-dh
Генерация займёт некоторое время. Дождитесь окончания.

9) Генерируем ключ центра сертификации (CA) — ./easyrsa build-ca nopass
На запросы ввода пароля
Enter PEM pass phrase:
Verifying — Enter PEM pass phrase:
придумываем и запоминаем пароль, затем вводим его. На запрос
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
вводим enter

10) Генерируем сертификат сервера — команда ./easyrsa build-server-full ESR nopass
На запросы
Enter PEM pass phrase:
Verifying — Enter PEM pass phrase:
придумываем и вводим пароль от сертификата, а на запрос

Enter pass phrase for c:/Program Files/OpenVPN/easy-rsa/pki/private/ca.key:

вводим пароль, использованный при генерации СА сертификата. При успешно выполнении увидим текст вида:

Write out database with 1 new entries

Data Base Updated

11) Генерируем сертификат клиента ./easyrsa build-client-full Alli nopass
Тут важно отметить, что имя сертификата (Alli в данном примере) должно совпадать с именем соответствующего пользователя в настройках OpenVPN сервера на ESR. Ответы на вопросы аналогичны предыдущему пункту. Если пользователей несколько — надо генерировать несколько клиентских сертификатов.

12) Выходим из оболочкие EasyRSA командой exit
Генерируем ключ для tls аутентификации:
..\bin\openvpn.exe —genkey secret ta.key

13) Генерация сертификатов окончена.
Сертификат СА.crt, ключ Диффи Хельмана dh.pem будут находиться в папке C:\Program files\OpenVPN\easy-rsa\pki. Сертификаты сервера и клиентов будут в папке C:\Program Files\OpenVPN\easy-rsa\pki\issued. А ключи — в папке C:\Program Files\OpenVPN\easy-rsa\pki\private. Ключ tls-auth ta.key в папке C:\Program Files\OpenVPN\easy-rsa.

14) Переходим к настройке ESR.

Загрузим сертификаты в маршрутизатор. Для этого воспользуемся TFTP сервером (также можно загружать сертификаты и через FTP/SCP либо USB/SD, 192.168.16.10 в данном примере—адрес АРМ с tftp сервером).

esr-200# copy tftp://192.168.16.10:/ca.crt certificate:ca/ca.crt
esr-200# copy tftp://192.168.16.10:/dh.pem certificate:dh/dh.pem
esr-200# copy tftp://192.168.16.10:/ESR.key certificate:server-key/ESR.key
esr-200# copy tftp://192.168.16.10:/ESR.crt certificate:server-crt/ESR.crt
esr-200# copy tftp://192.168.16.10:/ta.key certificate:ta/ta.key

Проверить, что загрузка прошла успешно можно командой

esr-200# sh crypto certificates
Type Total
———— ——-
ca 1
dh 1
server-key 2
server-crt 1
client-key 1
client-crt 1
ta 1
crl 0

Далее выполняем настройку:

esr-200# config
esr-200(config)# remote-access openvpn GenOffice // Создаем сервер и даем ему имя
esr-200(config-openvpn-server)# network 10.10.100.0/24 // Определяем сеть из которой будут выделяться адреса клиентам
esr-200(config-openvpn-server)# protocol tcp // Выбираем протокол по которому будет работать сервер (tcp/udp)
esr-200(config-openvpn-server)# tunnel ip // Выбираем на каком уровне будет работать (l2 ethetnet/l3 ip)
esr-200(config-openvpn-server)# encryption algorithm aes128 //Выбираем алгоритм шифрования
esr-200(config-openvpn-server)# authentication algorithm sha-256 //Алгоритм аутентификации
esr-200(config-openvpn-server)# certificate ca ca.crt //
esr-200(config-openvpn-server)# certificate dh dh.pem //
esr-200(config-openvpn-server)# certificate server-key ESR.key //Указываем загруженные ранее сертификаты
esr-200(config-openvpn-server)# certificate server-crt ESR.crt //
esr-200(config-openvpn-server)# certificate ta ta.key //
esr-200(config-openvpn-server)# security-zone trusted // Указываем зону безопасности
esr-200(config-openvpn-server)# route 192.168.1.0/24, 192.168.3.0/24
// Добавляем маршруты к сетям, которые будут доступны клиентам через удалённое соединение
esr-200(config-openvpn-server)# enable // Включаем сервер

Предположим что клиенту необходимо дать статический IP. Тогда для данного клиента (в примере используется имя сертификата Alli) необходимо произвести следующие настройки:

esr-200(config-openvpn-server)# username Alli
esr-200(config-openvpn-user)# ip address 10.10.100.202
esr-200(config-openvpn-user)# exit

Также, можно указать какую-либо удалённую сеть, находящуюся «за» удалённым клиентом, это делается командой:

esr-200(config-openvpn-user)# subnet 192.168.3.0/24

Даже если никаких специфических настроек для клиента не требуется, его всё равно необходимо завести в настройках сервера!

esr-200(config-openvpn-server)# username Alli
esr-200(config-openvpn-user)# exit

Если необходимо, что бы несколько клиентов подключались через один сертификат, то используем опцию duplicate-cn в настройках сервера:

esr-200(config-openvpn-server)# duplicate-cn
esr-200(config-openvpn-server)# exit

В случае, если на внешнем интерфейсе используется межсетевой экран, необходимо разрешить прохождение трафика из зоны внешнего интерфейса (пусть это будет untrusted) к зоне self, в нашем примере — протокол tcp и порт по умолчанию 1194:

esr-200(config)# object-group service OpenVPN
esr-200(config-object-group-service)# port-range 1194
esr-200(config-object-group-service)# exit
esr-200(config)# security zone-pair untrusted self
esr-200(config-zone-pair)# rule 100
esr-200(config-zone-pair-rule)# action permit
esr-200(config-zone-pair-rule)# match protocol tcp
esr-200(config-zone-pair-rule)# match destination-port OpenVPN
esr-200(config-zone-pair-rule)# enable
esr-200(config-zone-pair-rule)# end
esr-200# commit
esr-200# confirm

Для настройки клиента надо поместить файлы ca.crt, ta.key, и сертификат/ключ пользователя (в нашем примере Alli.crt, Alli.key) в папку OpenVPN\config\client, которая в windows по умолчанию находится в домашней папке пользователя (например для пользователя 123 путь будет C:\Users\123\OpenVPN\config\client) и создать там конфигурационный файл, например ESR-200.ovpn следующего содержания (в строчке remote X.X.X.X заменить на реальный адрес ESR:

client
dev tun
proto tcp
remote X.X.X.X
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
remote-cert-tls server
tls-auth ta.key 1
data-ciphers-fallback AES-128-CBC
data-ciphers AES-128-CBC
auth SHA256
cert Alli.crt
key Alli.key

После сохранения файла настроек в доке панели задач Windows найти значок OpenVPN, щёлкнув правой кнопкой мышки, выбрать нужный сервер (по имени конфигурационного файла, ESR-200 в нашем примере) и нажать подключиться.

Для настройки openvpn клиента на мобильных устройствах, например iOS, надо скачать клиента из AppStore, а конфигурационный файл привести к так называемому унифицированному формату, добавив в конец строки


##


####


####

key-direction 1

###

вставив вместо ### содержимое соответствующих сертификатов — ca.crt, Alli.crt, Alli.key, ta.key в нашем примере.

Также необходимо закомментировать (или убрать) строки с указанием сертификатов:

ca ca.crt
cert Alli.crt
key Alli.key
tls-auth ta.key 1

После этого, полученный файл надо передать на мобильное устройство (проще всего как почтовое вложение, или через iTunes) и открыть установленным OpenVPN клиентом.

Унифицированный формат файла можно использовать и для конфигурации настольного клиента.

На маршрутизаторе проверить, что клиент успешно подключен можно командой:

esr-200# sh remote-access status
User IP-address Server
—————- ————— —————————————
Alli 192.168.86.2 openvpn(TulOffice)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *