Протоколы для организации VPN. OpenVPN

OpenVPN – не менее замечательная технология, которая на порядок проще в понимании и настройке для конечного пользователя, чем IPSec. Как ясно из названия – у OpenVPN полностью открыты исходники (написана на языке C в 2002-м году Джеймсом Йонаном) и распространяется она по свободной лицензии GNU GPL, что упрощает её интеграцию в пользовательские системы. Среди других достоинств можно выделить огромную гибкость настройки, универсальность и мультиплатформенность. Вы можете использовать любой алгоритм шифрования из поддерживаемых технологией, клиент под Linux может выполнять одновременно роль сервера и клиента (настраивается правкой конфигов), имеется несколько типов аутентификации, а из поддерживаемых платформ - Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X, QNX, Microsoft Windows, Android.

Также, OpenVPN позволяет на ходу менять порты назначения в заголовке, а структура пакетов позволяет создавать полноценные VPN-туннели даже через DHCP, NAT и прокси, так как структура пакета в OpenVPN проще пакета IPSec.

В качестве транспорта OpenVPN использует TCP или UDP (UDP не проверяет пакеты на предмет доставки, что ускоряет скорость передачи), также поддерживается библиотека TUN/TAP для создания туннелей сетевого и канального уровней и передачи за NAT, и LZO для сжатия потока данных.

Для создания соединений и шифрования пакетов в OpenVPN используется весь спектр симметричных и асиметричных алгоритмов OpenSSL:

  • Симметричные - Blowfish, Camellia, DES, RC2, RC4, RC5, IDEA, AES.
  • Хеш-функции - MD5, MD2, SHA, MDC-2.
  • Асимметричные - RSA, DSA, Diffie-Hellman key exchange.

А также HMAC (описанный в разделе IPSec) для проверки целостности.

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

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

Для аутентификации клиента может использоваться 3 способа:

  1. Система открытых/закрытых ключей (аналогичная описана в статье по SSH выше).
  2. Система SSL-сертификатов и сертификатов X.509
  3. Система логина/пароля.

Или (как правило) смешанные.

Сертификаты (или цифровые подписи) – это отличная система создания доверительных отношений между сервером и хостом. Попросту говоря – сертификат удостоверяет, что такому-то ключу на таком-то компьютере можно доверять. В идеале – сертификаты должна выдавать третья сторона, репутация которой неоспорима, но можно создавать самоподписанные сертификаты, правда, доверие к ним будет только в пределах вашей сети. Хотя, для крупного сайта с поддержкой HTTPS, или создания публичного Jabber-сервера (или другого сервиса, с использованием шифрования), придется прибегнуть к услугам сертификационного центра, но и структура сертификатов там немного другая.

Используемый в OpenVPN x.509-сертификат содержит:

  1. Сведения о владельце.
  2. Открытый ключ (из системы открытых/закрытых ключей).
  3. Сведения о центре сертификации.
  4. Подпись сертификационного центра.
  5. Сведения о сертификате (серийный номер, версия, алгоритм).
  6. Дата начала и окончания действия сертификата.

А также различные зашифрованные цифровые подписи и прочее.

В OpenVPN это работает так:

Вы, владелец сети с несколькими компьютерами, на всех из них стоит ПО OpenVPN. Каждый хост должен сгенерировать запрос на получение сертификата и свой закрытый ключ для передачи. Запрос передается компьютеру с ПО для сертификации, им генерируется сертификат и передается узлу. Теперь на узле есть сертификат и собственный закрытый ключ (который ни в коем случае не должен передаваться по сети или копироваться на другие компьютеры) и открытый ключ. При начале сессии передачи данных, хост посылает серверу запрос, сервер проверяет у хоста наличие ключа и сертификата, если всё ок – начинается передача, а данные шифруются и расшифровываются согласно связанным друг с другом открытым и закрытым ключам (к которым, при создании, можно добавить пароль).

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

Советуем почитать

Компьютерный портал "Компаньон" © 2016.
В случае перепечатки материалов обязательна прямая ссылка на сайт cs-companion.ru.