Openvpn debian 10 настройка

Обновлено: 04.07.2024

Рассмотрим процесс установки OpenVPN на примере дистрибутива Debian 8.2. Задача состоит том, чтобы использовать сервер на базе OpenVPN в качестве шлюза для выхода в интернет. В результате мы получаем белый ip, можем обойти ограничения провайдера и дополнительно сжать и зашифровать весть трафик, который идет через сервер.

Установка сервера OpenVPN

Для работы OpenVPN необходима поддержка TUN/TAP интерфейса на сервере. Как правило, с этим не должно возникнуть проблем при использовании физической машины или виртуализации KVM.

А вот в случае использования OpenVZ, необходимо активировать поддержку TUN/TAP в настройках контейнера. Чтобы проверить, что система поддерживает TUN-интерфейс, необходимо выполнить команду:

Установим OpenVPN на сервере:

В качестве способа авторизации клиента на сервере мы будем использовать аутентификацию по ключу. Для этого создаём директорию в которую будут скопированы сгенерированные ключи:

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

Переходим в директорию:

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

Меняем следующие строки на свои значения:

После правки vars необходимо инициировать переменные:

Очищаем каталог keys/server от старых сертификатов и ключей:

Создаем корневой сертификат:

Далее генерируем сертификаты сервера и клиента:

Для каждого клиента нужно сгенерировать отдельные ключи.

Cоздаем ключ для tls-аутификации:

Все сгенерированные сертификаты и ключи находятся в директории:

Копируем сертификаты и ключи сервера в директорию OpenVPN:

Для настройки клиента OpenVPN, необходимо скопировать ключи и сертификаты из списка ниже:

На этом этапе установка OpenVPN закончена. Теперь выполним настройку сервера OpenVPN.

Настройка сервера OpenVPN

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

В зависимости от наших потребностей, изменяем настройки сервера OpenVPN:

Пример настройки OpenVPN:

Создадим директорию для клиентских настроек:

После завершения настройки OpenVPN, перезагружаем сервер:

В случае успешного запуска OpenVPN в системе должен появится новый tun0 интерфейс:

Это означает, что OpenVPN сервер запущен. В случае проблем с запуском OpenVPN, используем лог-файл:

Настройки маршрутизации для клиентов OpenVPN

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

Добавим в файл следующие параметры:

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

Включаем NAT на OpenVPN сервере

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

Включаем поддержку IP forwarding, открываем в файл:

В котором необходимо раскомментировать строку:

Загрузим переменные ядра:

Прописываем правила iptables. Нужно разрешить клиентам из подсети 10.8.0.0/24 доступ в интернет, разрешить принимать пакеты из интернета и пропустить трафик клиентов через NAT.

Замените eth0 на имя своего внешнего интерфейса. Следует отметить, правило MASQUERADE создает нагрузку на процессор. Поэтому, предпочтительнее использовать SNAT :

Сохраним и добавим правила в автозагрузку:

Настройка клиента OpenVPN

Если OpenVPN не установлен, для установки клиента в Debian или Ubuntu необходимо выполнить команду:

Копируем на компьютер клиента ключи и сертификаты из списка ниже:

Переносим ключи и сертификаты в директорию OpenVPN:

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

Открываем файл в текстовом редакторе:

Добавим в содержимое файла следующие параметры:

Для Windows необходимо положить файл client.ovpn в папку:

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

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


Этап 1 - Установка сервера OpenVPN

Выполните обновление индексов пакетов и установите OpenVPN:

Этап 2 - Развертывание ЦС (CA) и настройка инфраструктуры открытого ключа (PKI)

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

Для выполнения функций центра сертификации (ЦС) потребуется отдельный ПК или сервер (ресурс). Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном мануале предполагается, что ваш ЦС располагается на отдельном ресурсе.

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

Чтобы начать построение ЦС и инфраструктуры PKI перейдите в директорию где будет располагаться ЦС. Загрузите последнюю версию EasyRSA на проекте GitHub, скопировав ссылку для загрузки файла с расширением .tgz и выполнив команду wget:


Извлеките архив и перенесите директорию EasyRSA-3.0.7 в /usr/local/etc/ которая содержит файлы пользователя:
В этом каталоге есть файл с именем vars.example. Создайте копию этого файла и присвойте ей имя vars без расширения:
Найдите настройки параметров по умолчанию для новых сертификатов. Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми. Укажите значения следующих параметров (они будут использоваться по умолчанию при выпуске сертификатов):
Параметр EASYRSA_KEY_SIZE определяет размер генерируемых ключей. По умолчанию используется 2048 бит, чего во многих случаях достаточно. Ключи размерностью выше 4096 бит генерируются значительно дольше, поддерживаться не всеми клиентами и могут стать причиной замедления инициализации защищенных соединений.
Параметр EASYRSA_CA_EXPIRE устанавливает срок действия ключа удостоверяющего центра (3650 дней), EASYRSA_CERT_EXPIRE — для остальных выпускаемых сертификатов (1080 дней).
В каталоге easy-rsa имеется скрипт ./easyrsa, который вызывается для выполнения разнообразных задач, связанных с построением и управлением ЦС. Запустите этот скрипт с опцией init-pki, чтобы запустить настройку инфраструктуры открытых ключей:
Затем снова запустите скрипт easyrsa с опцией build-ca. В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.
Если вы не хотите вводить пароль при каждом взаимодействии с ЦС, вы можете запустить команду build-ca с опцией nopass:

После выполнения команды ./easyrsa build-ca вам будет предложено подтвердить обычное имя ЦС. Вы можете выбрать любое имя ЦС, но в данном случае проще всего нажать ENTER, чтобы принять имя по умолчанию.

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.


Этап 3 - Создание сертификата сервера, ключа и файлов шифрования
Выполните вход в систему на VPN-сервере.

Загрузите последнюю версию EasyRSA, как в первом этапе:


Извлеките архив и перенесите директорию EasyRSA-3.0.7 в /usr/local/etc/ которая содержит файлы пользователя:
Запустите в директории /opt/easy-rsa на сервере скрипт ./easyrsa с опцией init-pki:
Вызовите скрипт easyrsa еще раз и используйте опцию gen-req с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать стандартный вариант "server". Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf, чтобы он указывал на соответствующие файлы .crt и .key. Обязательно добавьте опцию nopass. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:
Cозданный закрытый ключ для VPN-сервера скопируйте в каталог /etc/openvpn/:
Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req на ресурс ЦС:
Запустите скрипт easyrsa и импортируйте файл server.req, добавив в путь к файлу обычное имя:
Подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и обычного имени. В результатах вам будет предложено убедиться, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER. Если вы зашифровали ключ CA, вам будет предложено ввести пароль. Запрос может относиться к типу клиента или сервера, и для запроса сертификата сервера OpenVPN следует использовать запрос типа сервера:
Переместите подписанный сертификат server.crt на VPN-сервер, используя защищенный метод:
Переместите файл ca.crt на VPN-сервер, используя защищенный метод:
Выполните вход в систему на VPN-сервере и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/:
Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:
Cгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:
Cкопируйте два новых файла ta.key и dh.pem в каталог /etc/openvpn/:

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


Этап 4 — Создание сертификата клиента и пары ключей

Выполните вход в систему на VPN-сервере. Создайте в каталоге /var/lib структуру каталогов, где будут храниться файлы сертификатов и ключей клиентской системы:


Поскольку в этом каталоге будут храниться пары сертификат/ключ ваших клиентов и файлы конфигурации, для него следует закрыть все разрешения:
Перейдите в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:
Скопируйте файл client.key в ранее созданный каталог /var/lib/openvpn/keys: Войдите в систему на ресурсе ЦС. Затем переместите файл client.req на ресурс, используя безопасный метод:
Откройте каталог EasyRSA и импортируйте запрос сертификата:
Затем подпишите запрос, как сделали это для сервера на предыдущем этапе. Если вы зашифровали свой ключ CA вам будет предложено ввести пароль. Однако в этот раз обязательно укажите тип запроса client:
В результате будет создан файл клиентского сертификата с именем client.crt. Переместите этот файл обратно на VPN-сервер:
Подключитесь к VPN-серверу и скопируйте клиентский сертификат в каталог /var/lib/openvpn/keys:
Затем скопируйте файлы ca.crt и ta.key в каталог /var/lib/openvpn/keys:

Теперь вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих каталогах на вашем сервере.


Этап 5 - Настройка сервиса OpenVPN

Скопируйте файл с образцом конфигурации OpenVPN в каталог configuration и извлеките его, чтобы использовать в качестве основы:

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

В файле server.conf имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway и удалите точку с запятой «;» в начале строки redirect-gateway, чтобы убрать режим комментария. В разделах dhcp-option удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария. Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила брандмауэра.

Если вы выбрали другое имя при использовании команды ./build-key-server, измените строки cert и key так, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию «server», ничего изменять не нужно.


Этап 6 - Настройка конфигурации сети VPN-сервера

Сохраните файл и закройте его после завершения.

Чтобы прочитать файл /etc/sysctl.conf и изменить значения для текущей сессии, введите команду:


Некоторые правила брандмауэра нужно изменить, чтобы включить маскарадинг (это концепция iptables, обеспечивающая динамическую трансляцию сетевых адресов (NAT) для правильной маршрутизации клиентских соединений. Для этого нужно предварительно найти публичный сетевой интерфейс компьютера:
Выполните команду для изменения правила брандмауэра, чтобы включить маскарадинг. Обязательно замените eth0 в строке на интерфейс, определенный с помощью предыдущей команды:

Теперь ваш сервер настроен для обработки трафика OpenVPN.

Для реализации автозагрузки конфигурации iptables при следующем перезапуске ресурса установите пакет iptables-persistent:

Правила сохранятся автоматически при установке пакета.


Этап 7 - Запуск и активация сервиса OpenVPN

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла systemd. Файл конфигурации сервера имеет имя «server»:


Убедитесь, что сервис успешно запущен, введя следующую команду:
Проверьте доступность интерфейса OpenVPN tun0 с помощью следующей команды:
Активируйте сервис, чтобы он автоматически запускался при загрузке:

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


Этап 7 - Создание инфраструктуры конфигурации клиентских систем и генерация конфигураций клиентов

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

Создайте новый каталог files для хранения файлов конфигурации клиентов в ранее созданном каталоге /var/lib/openvpn:

Затем скопируйте файл с образцом конфигурации клиента в каталог /var/lib/openvpn, чтобы использовать его как базовую конфигурацию:

Обязательно отредактируйте директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Найдите директивы, задающие ca, cert и key. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл. Также добавьте знак комментария в начале строки директивы tls-auth, поскольку вы добавите ключ ta.key непосредственно из файла конфигурации клиента.

Создайте исполняемый файл make-config.sh в директории /var/lib/openvpn и поставьте атрибут файла как исполняемый::

Этот скрипт создает копию созданного вами файла client.conf, собирает все созданные вами для клиента файлы сертификатов и ключей, извлекает их содержимое, добавляет их в копию базового файла конфигурации и экспортирует все это в новый файл конфигурации клиента.

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

Сгенерируйте файл конфигурации для этих учетных данных, перейдя в каталог /var/lib/openvpn/ и запустив скрипт, созданный в конце предыдущего шага:

Конфигурационный файл client.ovpn будет создан в каталоге /var/lib/openvpn/files. Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.


Этап 8 - Отзыв сертификатов

Для отзыва клиентского сертификата и предотвращения доступа к серверу OpenVPN перейдите в каталог EasyRSA на ресурсе ЦС:

В данной статье подробно описывается, как получить подключение на OpenVPN с использованием Debian Linux. Эти команды запускаются от рута.

Что такое OpenVPN?

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

Почему использовать OpenVPN?

Говоря «безопасные подключения» - подразумеваем OpenVPN. Если вы не хотите, чтобы кто-либо шпионил (занимался снупингом) за вашим интернет трафиком, используйте OpenVPN для маршрутизации всего вашего трафика через сильно зашифрованный, безопасный туннель.

Системные требования

Для работы OpenVPN нужны минимальные требования. Система с 64 MB оперативной памяти и 1 GB места на жёстком диске достаточно для OpenVPN. OpenVPN работает почти на всех основных системах.

Установка и настройка OpenVPN на Debian

Установка OpenVPN on Мастер-сервер

Запустите следующую команду для установки OpenVPN.

По умолчанию скрипты easy-rsa scripts устанавливаются в директорию ‘/usr/share/easy-rsa/‘. Поэтому нам нужно скопировать эти скрипты в нужное расположение, например /root/easy-rsa.

Генерируем CA сертификат и CA ключ

Откройте файл ‘vars‘ и сделайте следующие изменения, но перед внесением изменений я предлагаю сделать резервную копию.

Используя ваш текстовый редактор измените значения по умолчанию для easy-rsa.

Например, добавьте в самый низ:

Здесь я использую 4096 битный ключ. Вы можете по своему использовать 1024, 2048, 4096 или 8192 битный ключ.

Экспортируем величины по умолчанию выполнив.

Очистим все сертификаты, которые были сгенерированы ранее.

Далее запустите следующую команду для генерации сертификата CA и ключа CA.

Сгенерируйте сертификат сервера следующей командой. Вместо «server» можно подставить любое имя сервера.

Сгенерируйте PEM сертификат Diffie Hellman PEM.

Сгенерируйте клиентский сертификат. Вместо «client» можно подставить ваше имя клиента.

Сгенерируйте код HMAC.

Скопируйте сертификаты на машины клиента и сервера следующим образом.

  • Убедитесь, что ca.crt присутствует и на клиентской и на серверной машинах.
  • Ключ ca.key должен быть на машине, сгенерировавшей ключ.
  • Сервер требует server.crt, dh4096.pem, server.key и ta.key.
  • client.crt, client.key и ta.key должны быть на клиенте.

Для установки сертификатов на сервере запустите команды.

Настройка сервера OpenVPN

Теперь вам нужно настроить OpenVPN. Откройте фйл ‘/etc/openvpn/server.conf‘. Пожалуйста, сделайте изменения, как написано ниже.

Запустите следующую команду для настройки OpenVPN запускаться при загрузке.

Запустите службу OpenVPN.

Включение перенаправления и IPTABLES

Создайте файл vpn_firewall.sh

B этот файл скопируйте следующее содержимое, отредактировав его под свои нужды. Обратите внимание на:

  • PRIVATE=10.8.0.0/24 – измените подсеть в соответствии с вашими настройками. Если делали по этой инструкции, то менять ничего не нужно.
  • имя интерфейса - eth0, у вас может быть другое значение, измените его на своё везде, где оно встречается
  • в строке iptables -A INPUT -p tcp --dport 22 -j ACCEPT мы открываем доступ к порту 22, чтобы могли подключиться по SSH, если у вас нестандартный порт, то обязательно отредактируйте его, поскольку может получиться так, что после применения этого файла вы не сможете подключиться к вашему серверу по сети, добавьте нужно количество строк с необходимыми вам портами

Проверить работу файла:

ОБЯЗАТЕЛЬНО проверьте работу файла ДО добавления его в автозагрузку. Отключитесь и подключитесь по SSH чтобы убедиться, что всё действительно работает.

Установка OpenVPN на клиенте

Запустите следующую команду для установки OpenVPN на клиентской машине.

Настройки даны исходя из расположения файлов здесь:

  • /etc/openvpn/certs/ca.crt
  • /etc/openvpn/certs/client.crt
  • /etc/openvpn/certs/client.key
  • /etc/openvpn/certs/ta.key

Используя текстовый редактор, настройте конфигурацию OpenVPN клиента в ‘/etc/openvpn/client.conf‘ на клиенте. Пример конфигурации ниже:

Обратите внимание на строку remote 185.117.153.79 – вам обязательно нужно заменить это значение на IP вашего собственного VPN сервера!

Запустите следующую команду для настройки OpenVPN запускаться при загрузке.

Запустите службу OpenVPN на клиенте.

Как просматривать логи OpenVPN

Для наших настроек это делается так:

Ещё это можно делать, например, командой:

Настройка входа в OpenVPN по логину и паролю

Принцип работы с подключением по логину и паролю следующий:

  • OpenVPN не может проверять действительность логина и пароля;
  • вместо проверки OpenVPN сохраняет присланные ей логин и пароль в файл со случайным именем в директорию, которую мы указали в tmp-dir (в нашем случае это /tmp).
  • после этого OpenVPN запускает скрипт, который мы указали в auth-user-pass-verify (в нашем случае это /etc/openvpn/verify.sh), в качестве аргумента этому скрипту передаётся имя только что сохранённого файла с логином и паролем.
  • если от скрипта получен код выхода 0, то OpenVPN авторизует клиента, если 1, то считает, что логин или пароль неверны.
  • после этого OpenVPN удаляет временный файл.

Схема работы, мягко говоря, так себе. Поскольку предусматривает хранение паролей в открытом виде и на сервере и на клиенте…

Внесём изменения в конфигурационный файл сервера:

Добавим туда следующие строки:

копируем туда следующий код (можете придумать свой механизм аутентификации):

Делаем файл исполнимым:

Файл с паролями /etc/openvpn/user.pass выглядит так:

то есть идёт через пробел пара логин:пароль. Пароль находится в открытом виде!

В конфигурационный файл клиента добавляем такую строку:

и создаём соответственно файл pass.txt, где будет находится логин и пароль в таком виде:

Примечание: Если в параметре auth-user-pass убрать путь к файлу, будет запрашиваться логин/пароль.


Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков 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 к защищенным ресурсам компании.

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

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

Оглавление

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

Если раньше для создания безопасного канала передачи данных крупным компаниям и организациям приходилось прокладывать (либо арендовать) кабели и защищать их от физического доступа злоумышленников, то теперь в этом нет необходимости. С помощью 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).

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

Но для сети 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

Компоненты сети 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:

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

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

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

Синхронизация времени необходима, т.к. сертификаты имеют период действия. Если часы, например, на хосте удостоверяющего центра 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 и перейдите в его домашний каталог:

Читайте также: