VPS на Ubuntu. Часть 5 — установка и настройка OpenVPN

В этой статье нас ждет установка и настройка на нашем VPS на Ubuntu своего сервера OpenVPN.

Содержание

  • О технологии VPN
  • Установка необходимого ПО
  • Настройка PKI
    • Создание пользователя
    • Установка easy-rsa
    • Настройка параметров easy-rsa
    • Настройка инфраструктуры PKI
    • Создание центра сертификации CA
    • Создание ключа DH
  • Создание ключа и сертификата для сервера OpenVPN
  • Создание ключа и сертификата для клиента
  • Настройка сервера OpenVPN

О технологии VPN

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

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

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

Установка необходимого ПО

Итак, давайте соединимся под нашим пользователем «user» к нашему серверу по ssh или войдем на сервер через VNC и установим необходимый софт:

sudo apt-get install openvpn git -y

Настройка PKI

Перед тем как начать настраивать сервер OpenVPN нам необходимо разобраться с шифрованием, как необходимым компонентом инфраструктуры VPN.

В этом нам поможет замечательная утилита командной строки для создания и управления PKIeasy-rsa.

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

Создание пользователя

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

sudo useradd -m -c 'CA user' ca

Все дальнейшие действия будем выполнять от имени созданной учетной записи пользователя «ca».

sudo su ca

Установка easy-rsa

Следующий шаг — это установка самой утилиты easy-rsa. Для этого мы клонируем Git-репозиторий и установим ссылку на каталог /home/ca/easy-rsa/easyrsa3.

cd
git clone https://github.com/OpenVPN/easy-rsa.git
ln -s easy-rsa/easyrsa3/ easyrsa

Настройка параметров easy-rsa

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

cp vars.exmaple vars
vim vars

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

Опция EASYRSA_DN определяет режим DN X509 (какие элементы включаются): упрощенный — cn_only, при котором сертификат содержит только CN (имя того, кому выдан сертификат) и традиционный — org, при котором заполняются все реквизиты организации.

Для OpenVPN можно использовать любой режим. Но если вы решили использовать режим org вам нужно убрать комментарии и изменить следующие строки:

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_REQ_COUNTRY	 "RU"
set_var EASYRSA_REQ_PROVINCE ""
set_var EASYRSA_REQ_CITY	 "Moscow"
set_var EASYRSA_REQ_ORG	     "My Sweet Home"
set_var EASYRSA_REQ_EMAIL	 "user@example.com"
set_var EASYRSA_REQ_OU       "Computers"

Из остальных настроек вас может заинтересовать срок действия сертификатов — корневого и выпускаемых. Я ставлю срок 10 лет.

set_var EASYRSA_CA_EXPIRE	3650
set_var EASYRSA_CERT_EXPIRE	3650

Настройка инфраструктуры PKI

После сохранения файла настроек подготовим инфраструктуру PKI, во время которой будет создана часть необходимых каталогов:

./easyrsa init-pki

Создание центра сертификации CA

Чтобы подписывать запросы на выпуск сертификатов, нам нужен центр сертификации и корневой сертификат. Создаём их при помощи следующей команды:

./easyrsa build-ca

В процессе создания задайте пароль секретного ключа и имя Common Name (CN) для центра сертификации CA. Имя можете выбрать любое. В результате выполнения вы получите публичный сертификат центра сертификации ./pki/ca.crt и закрытый ключ ./pki/private/ca.key.

Внимание! Команды init-pki и build-ca нужно выполнять только один раз, повторное выполнение указанных команд уничтожит существующий CA и потребует повторного создания ключей и сертификатов.

Создание ключа Диффи-Хеллмана

Для создания ключа Диффи-Хеллмана используйте следующую команду:

./easyrsa gen-dh

В результате выполнения вы получите ключ в файле ./pki/dh.pem.

Создание ключа и сертификата для сервера OpenVPN

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

./easyrsa gen-req vpn-server nopass

где vpn-server — имя вашего сервера, а параметр nopass означает, что закрытый ключ следует создать без пароля. В результате вы получите запрос на сертификат ./pki/reqs/vpn-server.req и закрытый ключ сервера ./pki/private/vpn-server.key.

Закрытый ключ является секретным и не должен передаваться по открытым каналам связи.

Для выпуска сертификата запрос на него нужно подписать. Обычно, чтобы получить подписанный сертификат, файл запроса должен быть отправлен в CA и импортирован. Очевидно, что нам этот шаг не требуется, так как для CA и генерации нашей пары ключей/запроса используется одна PKI. Таким образом сгенерированный нами запрос на сертификат уже «импортирован».

Каждый сертификат нуждается в «типе», который контролирует, какие расширения получает сертификат. В команде ниже параметр server — означает, что сертификат выпускается для TLS-сервера и подходит для VPN или веб-сервера.

Итак, давайте подпишем запрос для выпуска сертификата:

./easyrsa sign-req server vpn-server

Подтвердите ваше согласие на выпуск сертификата и введите пароль секретного ключа центра сертификации. В результате будет создан файл с сертификатом сервера — ./pki/issued/vpn-server.crt.

Создание ключа и сертификата для клиента

Как и в случае с сервером, начнем с создания запроса на сертификат:

./easyrsa gen-req mynotebook nopass

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

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

Подписав запрос, выпустим клиентский сертификат, указав параметр «client«:

./easyrsa sign-req client mynotebook

На этом наша работа под пользователем «са» завершена. Дальнейшие настройки будем выполнять под нашим обычным пользователем «user«. Создадим папку keys в каталоге настроек OpenVPN и скопируем туда необходимые ключи.

exit
sudo mkdir /etc/openvpn/keys
sudo cp /home/ca/easyrsa/pki/{ca.crt,dh.pem} /etc/openvpn/keys
sudo cp /home/ca/easyrsa/pki/private/vpn-server.key /etc/openvpn/keys 
sudo cp /home/ca/easyrsa/pki/issued/vpn-server.crt /etc/openvpn/keys

Затем скопируем сертификат CA и ключи клиента в домашнюю папку нашего пользователя и изменим владельца:

sudo cp /home/ca/easyrsa/pki/ca.crt /home/user
sudo cp /home/ca/easyrsa/pki/private/mynotebook.key /home/user
sudo cp /home/ca/easyrsa/pki/issued/mynotebook.crt /home/user
sudo chown user:user ca.crt mynotebook.key mynotebook.crt

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

А вот этим мы займемся в следующей части.

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

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