В этой статье нас ждет установка и настройка на нашем 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.
В этом нам поможет замечательная утилита командной строки для создания и управления PKI — easy-rsa
.
Создание пользователя
Итак, приступим. Сначала создадим пользователя под которым мы будем вести работу с ключами.
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
А вот этим мы займемся в следующей части.