Настраиваем L2TP VPN-сервер на платформе Linux (Debian / Ubuntu) – Записки IT специалиста

Openvpn. создаем сертификат сервера

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

sudo ./easyrsa gen-req server nopass

У вас будет запрошено Common Name – вводим имя вашего будущего сервера

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

sudo ./easyrsa sign-req server server

У вас будет запрошено подтверждение выпуска – вводим “yes” и нажимает ENTER, после чего вводим пароль от CA сертификата

OpenVPN. Подтверждение запроса на выпуск

Далее нам необходим TLS (transport layer security, или HMAC) ключ для безопасной авторизации клиентов. Генерируем его следующей командой

sudo openvpn --genkey --secret /opt/ovpn/easy-rsa/pki/ta.key

После создания TLS ключа также создаем ключ DH (Диффи Хеллмана)

sudo ./easyrsa gen-dh

Эта процедура займет от 1 до 5 минут, в зависимости от мощности ЦП вашего сервера

Сертификаты сервера успешно созданы, теперь для удобства копируем их в папку /opt/ovpn/keys

sudo mkdir -p /opt/ovpn/keyssudo cp -r pki/ /opt/ovpn/keys

Включение маршрутизации трафика на openvpn сервере

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

Для начала создаётся файл «vpn_route.sh» а каталоге «/root/bin/».

nano /root/bin/vpn_route.sh

Если папка отсутствует, её необходимо создать:

mkdir /root/bin/

Далее, в открывшийся файл, нужно внести конфигурацию:

#!/bin/sh

# укажите имя интерфейса, иначе скрипт попытается выбрать его автоматически
#DEV='eth0'
# проверить можно командой “ip a”
DEV='ens3'

# Значение подсети
# изменяется в соответствии с конфигурацией 
PRIVATE=10.8.0.0/24

if [ -z "$DEV" ]; then
DEV="$(ip route | grep default | head -n 1 | awk '{print $5}')"
fi
# Включаем маршрутизация транзитных IP–пакетов, чтобы 
# они уходили на внешний интерфейс
sysctl net.ipv4.ip_forward=1
# Проверка блокировки перенаправленного трафика iptables 
iptables -I FORWARD -j ACCEPT

# Преобразование адресов (NAT) 

iptables -t nat -I POSTROUTING -s $PRIVATE -o $DEV -j MASQUERADE

Параметр «PRIVATE» в приведённом примере не является константой и может изменяться, в зависимости от наличия свободных адресов подсетей. Eсли же один диапазон адресов (например, 10.x.0.0/24) уже занят локальными машинами, нужно выбрать другой (где переменная «x» будет задана в промежутке от 1 до 255). В случае изменения значения подсети в «vpn_route.sh» нужно обязательно соотнести новое значение с тем, что прописано в конфигурационном файле OpenVPN «/etc/openvpn/server.conf» (параметр «server»).

После сохранения нужно сделать файл исполняемым:

chmod 755 /root/bin/vpn_route.sh

Далее проводится пробный запуск скрипта для выявления ошибок:

bash /root/bin/vpn_route.sh

Если всё в порядке, то остаётся добавить добавить созданный скрипт в автозагрузку. Для этого нужно создать службу systemd:

nano /etc/systemd/system/openvpn-server-routing.service

В открывшийся файл вносятся следующие данные:

Встраивание сертификатов в файл .ovpn

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

Данные сертификатов заносятся в парные теги, которые имеют такое же наименование, как и стандартные опции (ca, cert, dh, tls–auth, key и т. д.). Далее это будет показано на примере ранее созданного конфигурационного файла client.conf.

Для начала нужно удалить из файла прописанные сертификаты и ключи:

ca "C:\Program Files\OpenVPN\certs\ca.crt"
cert "C:\Program Files\OpenVPN\certs\client1.crt"
key "C:\Program Files\OpenVPN\certs\client1.key"
tls–auth "C:\Program Files\OpenVPN\certs\ta.key" 1

Так как «tls–auth» – дополнительная опция, то её необходимо добавить отдельной строкой, введя:

key-direction 1

Далее нужно создать парные теги, как ниже, и перенести данные о ключах:

Вместо многоточия указывается содержание публичного или приватного ключа между заголовками «BEGIN» и «END».

После сохранения настроек файл можно передать клиентам OpenVPN.

Настраиваем ipsec

Именно с устаревшими настройками IPsec вам придется столкнуться в большинстве опубликованных инструкций. Нет, все даже будет работать, но вот безопасность такого решения окажется довольно низкой, не соответствующей современным требованиям. Поэтому, если у вас уже имеется настроенный экземпляр L2TP-сервера мы настоятельно советуем обновить его настройки.

Для работы с IPsec мы будем использовать пакет strongSwan, установим его:

apt install strongswan

Затем откроем файл настроек /etc/ipsec.conf и добавим в его конец следующие две секции:

conn rw-base
fragmentation=yes
dpdaction=clear
dpdtimeout=90s
dpddelay=30s
conn l2tp-vpn
also=rw-base
ike=aes128-sha256-modp3072
esp=aes128-sha256-modp3072
leftsubnet=%dynamic[/1701]
rightsubnet=%dynamic
mark=%unique
leftauth=psk
rightauth=psk
type=transport
auto=add

Первая секция задает общие параметры: включает фрагментацию IKE и настраивает протокол обнаружения мертвых узлов (Dead Peer Detection, DPD), отвечающий за обнаружение неактивных клиентов. Вторая относится уже к L2TP-соединениям, указывая использовать транспортный режим IPsec, аутентификацию по общему ключу и задает используемые шифры. Приведенные значения являются рекомендуемыми и взяты из официальной документации strongSwan.

Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:

%any %any : PSK "mySharedKey"

Где mySharedKey – общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. Для этого можно воспользоваться командой:

openssl rand -base64 18

Результатом ее выполнения станет случайная строка длинной в 18 символов.

l2tp-vpn-server-debian-ubuntu-001.png

systemctl restart strongswan

В Ubuntu имя службы несколько иное – strongswan-starter, поэтому команда будет иметь вид:

systemctl restart strongswan-starter

Настройка

Проверьте, включен ли в ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf:

  1. ls /etc/openvpn
update-resolv-conf

Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:

  1. nanoclient1.ovpn

Если вы нашли файл update-resolv-conf, уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

group nobody

Сохраните и закройте файл.

Теперь для подключения к VPN вы можете просто указать команде openvpn файл конфигурации клиента:

  1. sudo openvpn --config client1.ovpn

Эта команда должна установить подключение к вашей VPN.

Перенос ключей и сертификатов

На данном этапе настройки конфигурации OpenVPN необходимо разместить ранее созданные файлы на клиентском компьютере.

Если клиент OpenVPN на Windows, создается папка по пути «C:Program FilesOpenVPNcerts». В нее перемещаются следующие элементы:

  • Файлы ca.crt и ta.key из папки /etc/openvpn/certs.
  • Файл client1.crt из папки /etc/openvpn/easy-rsa/pki/issued.
  • Файл client1.key из папки /etc/openvpn/easy-rsa/pki/private/.

Кстати. Выполнить перенос данных можно с помощью FTP-клиента WinSCP.

Если клиент работает на Ubuntu, файлы переносятся следующим образом:

  1. С сервера из папки /etc/openvpn/certs файлы ca.crt и ta.key, копируются в папку /etc/openvpn/certs.
  2. С сервера из папки /etc/openvpn/easy-rsa/pki/issued/ файл client1.crt, копируются в папку /etc/openvpn/certs.
  3. С сервера из папки /etc/openvpn/easy-rsa/pki/private/ файл client1.key, копируется в папку /etc/openvpn/certs.

Отправить файлы на устройство под управлением Linux можно с помощью FTP-клиента FileZilla.

Подключение из windows

Вначале импортировать сертификат root, выполнив следующие шаги:

  1. Нажмите WINDOWS R, чтобы открыть диалоговое окно Выполнить и введите mmc.exe, чтобы открыть консоль управления Windows.

  2. Из меню Файл перейдите в раздел Добавить или удалить оснастку, выберите Сертификаты из списка доступных оснасток и нажмите Добавить.

  3. Чтобы разрешить VPN работать для любых пользователей, выберите Учетная запись компьютера и нажмите Далее.

  4. Поскольку мы выполняем настройку на локальном компьютере, выберите пункт Локальный компьютер и нажмите Готово.

  5. Под узлом Корень консоли откройте запись Сертификаты (локальный компьютер), раскройте Доверенные корневые центры сертификации и выберите запись Сертификаты:Просмотр сертификатов

  6. В меню Действие выберите пункт Все задачи и нажмите Импорт, чтобы открыть мастер импорта сертификатов. Нажмите Далее, чтобы пролистать вводное окно.

  7. На экране Импортируемый файл нажмите кнопку Обзор и выберите сохраненный файл сертификата. Затем нажмите Далее.

  8. Убедитесь, что Хранилище сертификатов имеет значение Доверенные корневые центры сертификации и нажмите Далее.

  9. Нажмите Готово, чтобы импортировать сертификат.

Затем выполните следующие шаги по настройке VPN:

  1. Откройте Панель управления и перейдите в Центр управления сетями и общим доступом.
  2. Нажмите Создание и настройка нового подключения или сети и выберите пункт Подключение к рабочем месту.
  3. Выберите пункт Использовать мое подключение к Интернету (VPN).
  4. Введите данные сервера VPN. Введите доменное имя сервера или IP-адрес в поле Адрес в Интернете, затем введите в поле Имя пункта назначения описание своего соединения VPN. Затем нажмите Готово.

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

Предварительные требования

Чтобы пройти этот обучающий модуль вам потребуется доступ к серверу Ubuntu 18.04, где будет размещаться служба OpenVPN. Перед началом прохождения обучающего модуля вам нужно будет настроить пользователя без привилегий root с привилегиями sudo.

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

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

Согласно официальной документации OpenVPN, вы должны разместить CA на отдельном компьютер, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш CA располагается на отдельном сервере Ubuntu 18.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.

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

Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере CA, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 18.04.

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

Шаг 1 — установка openvpn и easyrsa

Для начала выполните обновление индекса пакетов вашего сервера VPN и установите OpenVPN. OpenVPN имеется в хранилищах Ubuntu по умолчанию, и поэтому вы можете использовать для установки apt:

  1. sudoapt update
  2. sudoaptinstall openvpn

OpenVPN — это VPN с TLS/SSL. Это означает, что она использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать собственный простой центр сертификации (CA). Для этого нужно загрузить последнюю версию EasyRSA, которую мы используем для создания инфраструктуры открытых ключей CA (PKI) из официального репозитория проекта на GitHub.

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

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

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

Шаг 2 — настройка переменных easyrsa и построение ca

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

Откройте на компьютере CA каталог EasyRSA:

  1. cd ~/EasyRSA-3.0.4/

В этом каталоге есть файл с именем vars.example. Создайте копию этого файла и присвойте ей имя vars без расширения:

  1. cp vars.example vars

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

  1. nano vars

Найдите настройки параметров по умолчанию для новых сертификатов. Он будет выглядеть примерно так:

. . .

#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      "[email protected]"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми:

Шаг 3 — создание сертификата сервера, ключа и файлов шифрования

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

Для начала откройте каталог EasyRSA на сервере OpenVPN:

  1. cd EasyRSA-3.0.4/

Запустите на сервере скрипт easyrsa с опцией init-pki. Хотя вы уже запускали эту команду в системе с CA, ее необходимо запустить здесь, потому что ваш сервер и центр сертификации используют разные каталоги PKI:

  1. ./easyrsa init-pki

Вызовите скрипт easyrsa еще раз и используйте опцию gen-req с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем модуле для сервера OpenVPN мы будем использовать обычное имя «сервер».

Примечание. Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам нужно будет указать правильные имена.

  1. ./easyrsa gen-req server nopass

В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в каталог /etc/openvpn/:

  1. sudocp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/

Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req на компьютер CA:

  1. scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp

Откройте на компьютере CA каталог EasyRSA:

  1. cd EasyRSA-3.0.4/

Снова запустите скрипт easyrsa и импортируйте файл server.req, добавив в путь к файлу обычное имя:

  1. ./easyrsa import-req /tmp/server.req server

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

  1. ./easyrsa sign-req server server

В результатах вам будет предложено убедиться, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Если вы зашифровали ключ CA, вам будет предложено ввести пароль.

Затем переместите подписанный сертификат на сервер VPN, используя защищенный метод:

  1. scp pki/issued/server.crt sammy@your_server_ip:/tmp

Прежде чем выполнять выход из системы на компьютере CA, переместите файл ca.crt на ваш сервер:

  1. scp pki/ca.crt sammy@your_server_ip:/tmp

Затем снова выполните вход в систему на сервере OpenVPN и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/:

  1. sudocp /tmp/{server.crt,ca.crt} /etc/openvpn/

После этого перейдите в каталог EasyRSA:

  1. cd EasyRSA-3.0.4/

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

  1. ./easyrsa gen-dh

Для этого может потребоваться несколько минут. После завершения сгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:

  1. openvpn --genkey --secret ta.key

Когда команда будет выполнена, скопируйте два новых файла в каталог /etc/openvpn/:

  1. sudocp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
  2. sudocp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

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

Шаг 4 — настройка strongswan

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

  1. sudomv /etc/ipsec.conf{,.original}

Создайте и откройте новый пустой файл конфигурации с помощью предпочитаемого текстового редактора. Мы будем использовать nano:

  1. sudonano /etc/ipsec.conf

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

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

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

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Затем мы создадим раздел конфигурации для сервера VPN. Также мы укажем StrongSwan создать туннели IKEv2 VPN и автоматически загружать этот раздел конфигурации при запуске. Добавьте в файл следующие строки:

. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

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

. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Затем мы настроим параметры IPSec «левой» стороны сервера. Каждый из следующих параметров обеспечивает конфигурацию сервера для приема соединений от клиентов и корректной идентификации себя. Вы добавите каждую из этих настроек в файл /etc/ipsec.conf после того, как вы изучите их и поймете, для чего они используются:

  • left=%any Значение %any гарантирует использование сервером сетевого интерфейса при получении входящих соединений для последующей связи с клиентами. Например, если вы подключаете клиента через частную сеть, сервер будет использовать частный IP-адрес, где он получает трафик для остальной части подключения.
  • leftid=@server_domain_or_IP Эта опция контролирует имя, которое сервер показывает клиентам. При совмещении со следующей опцией leftcert, опция leftid обеспечивает совпадение настроенного имени сервера и различимого имени (DN), содержащегося в публичном сертификате.
  • leftcert=server-cert.pem Эта опция — это путь к публичному сертификату для сервера, который вы настроили на шаге 3. Без него сервер не сможет аутентифицировать себя с клиентами или завершить переговоры по настройке IKEv2.
  • leftsendcert=always Значение always гарантирует, что любой клиент, который подключается к серверу, всегда будет получать копию публичного сертификата сервера в рамках настроек первоначального соединения.
  • leftsubnet=0.0.0.0/0 Последняя опция «слева», которую вы добавите, указывает клиентам на подсети, которые доступны за сервером. В этом случае 0.0.0.0/0 используется для представления всего набора адресов IPv4, что означает, что сервер будет указывать клиентам передавать весь свой трафик через VPN по умолчанию.

Теперь, когда вы ознакомились с каждой из соответствующих опций «слева», добавьте их в файл следующим образом:

. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

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

  • right=%any Опция %any для стороны соединения right предписывает серверу принимать входящие соединения от удаленных клиентов.
  • rightid=%any Эта опция гарантирует, что сервер не будет отклонять соединения от клиентов, которые предоставляют идентификатор до создания зашифрованного туннеля.
  • rightauth=eap-mschapv2 Эта опция настраивает метод аутентификации, который будут использовать клиенты для аутентификации на сервере. eap-mschapv2 используется здесь для расширения возможностей совместимости и поддержки таких клиентов, как устройства на базе Windows, macOS и Android.
  • rightsourceip=10.10.10.0/24 Эта опция предписывает серверу назначать частные IP-адреса клиентам из указанного пула IP-адресов 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 Эти IP-адреса являются публичными интерпретаторами DNS Google. Вместо них можно использовать другие публичные интерпретаторы, интерпретаторы сервера VPN или любые другие, к которым у клиента есть доступ.
  • rightsendcert=never Эта опция сообщает серверу, что клиентам не нужно отправлять сертификат для аутентификации себя.

Теперь, когда вы ознакомились с необходимыми опциями «справа», добавьте следующие строки в /etc/ipsec.conf:

. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Теперь мы укажем StrongSwan запрашивать у клиента учетные данные пользователя при подключении:

. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

И наконец, добавьте следующие строки для поддержки клиентов на базе Linux, Windows, macOS, iOS и Android. Эти строки определяют различные алгоритмы обмена ключами, хэширования, аутентификации и шифрования (обычно их называют набор шифров), которые StrongSwan разрешит использовать разным клиентам.

. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Каждый поддерживаемый набор шифров отделяется от других запятой. Например, chacha20poly1305-sha512-curve25519-prfsha512 — это один набор, а aes256gcm16-sha384-prfsha384-ecp384 — другой. Перечисленные здесь наборы шифров выбраны для обеспечения самых широких возможностей совместимости с клиентами на базе Windows, macOS, iOS, Android и Linux.

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

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Сохраните и закройте файл после того, как проверите, что все строки добавлены корректно. Если вы используете nano, нажмите CTRL X, Y, затем ENTER.

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

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

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

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

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

  1. mkdir -p ~/client-configs/keys

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

  1. chmod -R 700 ~/client-configs

Вернитесь в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:

  1. cd ~/EasyRSA-3.0.4/
  2. ./easyrsa gen-req client1 nopass

Нажмите ENTER, чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданный каталог /client-configs/keys/:

  1. cp pki/private/client1.key ~/client-configs/keys/

Затем переместите файл client1.req на компьютер CA, используя безопасный метод:

  1. scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

Войдите в систему на компьютере CA, откройте каталог EasyRSA и импортируйте запрос сертификата:

  1. sshsammy@your_CA_ip
  2. cd EasyRSA-3.0.4/
  3. ./easyrsa import-req /tmp/client1.req client1

Затем подпишите запрос, как сделали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client:

  1. ./easyrsa sign-req client client1

В диалоге введите yes, чтобы подтвердить, что вы планируете подписать запрос сертификата, и что он поступил из доверенного источника:

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Если вы зашифровали свой ключ CA вам будет предложено ввести пароль.

В результате будет создан файл клиентского сертификата с именем client1.crt. Переместите этот файл обратно на сервер.

  1. scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Подключитесь к серверу OpenVPN через SSH и скопируйте клиентский сертификат в каталог /client-configs/keys/:

  1. cp /tmp/client1.crt ~/client-configs/keys/

Затем скопируйте файлы ca.crt и ta.key в каталог /client-configs/keys/:

  1. cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
  2. sudocp /etc/openvpn/ca.crt ~/client-configs/keys/

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

Шаг 6 — настройка брандмауэра и переадресации ip ядра

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

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

  1. sudo ufw allow OpenSSH

Затем активируйте брандмауэр с помощью следующей команды:

  1. sudo ufw enable

Теперь добавьте правило, которое будет разрешать трафик UDP на стандартных портах IPSec 500 и 4500:

  1. sudo ufw allow 500,4500/udp

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

  1. ip route show default

Ваш публичный интерфейс должен содержать слово «dev». Например, в этом результате показан интерфейс с именем eth0, который выделен ниже:

default via your_server_ip dev eth0 proto static

Шаг 8 — создание инфраструктуры конфигурации клиентских систем

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

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

Для начала создайте новый каталог для хранения файлов конфигурации клиентов в ранее созданном каталоге client-configs:

  1. mkdir -p ~/client-configs/files

Затем скопируйте файл с образцом конфигурации клиента в каталог client-configs, чтобы использовать его как базовую конфигурацию:

  1. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

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

  1. nano ~/client-configs/base.conf

Найдите в файле директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

~/client-configs/base.conf
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip1194
. . .

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

~/client-configs/base.conf
proto udp

Шаг 9 — создание конфигураций клиентов

Если вы следовали указаниям руководства, на шаге 4 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

  1. cd ~/client-configs
  2. sudo ./make_config.sh client1

При этом файл client1.ovpn будет создан в каталоге ~/client-configs/files:

  1. ls ~/client-configs/files
client1.ovpn

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

Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

Вот пример команды SFTP с использованием образца client1.ovpn, который можно запустить с локального компьютера (macOS или Linux). Он помещает файл .ovpn в домашний каталог:

  1. sftpsammy@your_server_ip:client-configs/files/client1.ovpn ~/

Вот несколько инструментов и обучающих модулей для безопасной передачи файлов с сервера на локальный компьютер:

Шаг 12 — отзыв сертификатов клиента

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

Для этого перейдите в каталог EasyRSA на компьютере CA:

  1. cd EasyRSA-3.0.4/

Затем запустите скрипт easyrsa с опцией revoke, а затем укажите имя клиента, у которого хотите отозвать сертификат:

  1. ./easyrsa revoke client2

Система предложит вам подтвердить отзыв сертификата. Введите yes:

Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

После подтверждения действия CA полностью отзовет сертификат клиента. Однако в текущий момент ваш сервер OpenVPN не может проверить, отозваны ли сертификаты каких-либо клиентов, и все клиенты будут иметь доступ к сети VPN. Чтобы устранить эту проблему, нужно создать на компьютере CA список отзыва сертификатов (CRL):

  1. ./easyrsa gen-crl

Эта команда генерирует файл crl.pem. Выполните защищенное перемещение этого файла на ваш сервер OpenVPN:

  1. scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

На сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/:

  1. sudocp /tmp/crl.pem /etc/openvpn

Затем откройте файл конфигурации сервера OpenVPN:

  1. sudonano /etc/openvpn/server.conf

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

crl-verify crl.pem

Сохраните и закройте файл.

Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

  1. sudo systemctl restart openvpn@server

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

Чтобы запретить доступ другим клиентам, повторите эту процедуру:

  1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
  2. Создайте новый список CRL
  3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в каталог /etc/openvpn, чтобы перезаписать старый список.
  4. Перезапустите службу OpenVPN.

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

Похожее:  Подключение MySQL в Delphi 7. Часть 1 | Готовые проекты по программированию и разработка программ на заказ

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

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