Описание стенда
Операционная система сервера = Ubuntu 20.04
Доменное имя сервера сервера = server.astradomain.ad
Операционная система клиента = Ubuntu 20.04
Имя VPN клиента = user
Настройка сервера
Установка пакетов для работы
За основу инструкции по настройки настройке сервера была взята следующая инструкция.
...
Code Block |
---|
language | bash |
---|
title | Установка пакетов |
---|
|
sudo apt update
# пакеты для работы StrongswanstrongSwan VPN сервера
sudo apt-get install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins
# пакеты для работы со смарт-картами и токенами (чтобы создать ключевую пару и сертификаты на Рутокене)
sudo apt install opensc libengine-pkcs11-openssl1.1 |
Генерация ключевых пар и сертификатов УЦ и сервера:
Code Block |
---|
language | bash |
---|
title | Создание ключевых пар и сертификатов УЦ и сервера |
---|
|
# инициализируем директорию для хранения ключей и сертификатов
mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki
# создание ключевой пары УЦ
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
# создание корневого сертификата
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
# создание ключевой пары сервера
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
# получение сертификата сервера
# обратите внимание, что аргументы --dn и --san нужно будет заменить на свои
pki --pub --in ~/pki/private/server-key.pem --type rsa \
| pki --issue --lifetime 1825 \
--cacert ~/pki/cacerts/ca-cert.pem \
--cakey ~/pki/private/ca-key.pem \
--dn "CN=server.astradomomain.ad" --san server.astradomain.ad \
--flag serverAuth --flag ikeIntermediate --outform pem \
> ~/pki/certs/server-cert.pem
# копируем полученные сертификаты в директорию strongswanstrongSwan
sudo cp -r ~/pki/* /etc/ipsec.d/ |
Настройка
...
strongSwan
Сохраним предыдущую конфигурацию:
...
Code Block |
---|
language | bash |
---|
title | /etc/ipsec.secrets |
---|
|
: RSA "server-key.pem" |
Настройка firewall
Code Block |
---|
language | bash |
---|
title | Настройка firewall |
---|
|
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 500,4500/udp |
...
Узнаем имя интерфейса, к которому подключен сервер. Данное имя нам потребуется в дальнейшей при настройке firewall. Это можно сделать с помощью команды:
Code Block |
---|
language | bash |
---|
title | Узнаем имя интерфейса |
---|
|
ip route show default
# вывод данноеданной команды будет примерно следующим:
# default via your_server_ip dev eth0 proto static
# Имя интерфейса -- eth0 |
...
Code Block |
---|
language | bash |
---|
title | Перезагрузка firewall |
---|
|
sudo ufw disable
sudo ufw enable |
Запуск VPN сервера
Code Block |
---|
language | bash |
---|
title | Запуск сервера |
---|
|
sudo systemctl restart strongswan-starter |
Добавление нового клиента со смарт-картой
Проверить, что сервер поднялся успешно, можно, например, с помощью команды:
Code Block |
---|
language | bash |
---|
title | Проверка запуска сервера |
---|
|
sudo systemctl status strongswan-starter |
Image Added
Добавление нового клиента со смарт-картой
Info |
---|
title | Модуль pkcs11 для работы со смарт-картами |
---|
|
Необходимо использовать |
Info |
---|
title | Модуль pkcs11 для работы со смарт-картами |
---|
|
В настоящий момент смарт-карта отформатированная для работы с librtpkcs11ecp.so модулем не подходит для аутентификации внутри VPN strongswan т.к. не поддерживает необходимые механизмы для проверки подписи. К счастью, модуль opensc-pkcs11.so поддерживает ихиз состава OpenSC. |
Отформатируем смарт-карту, сгенерируем на ней ключи и получим сертификат.
Code Block |
---|
language | bash |
---|
title | Подготовка смарт-карты |
---|
|
# форматирование и инициализация
pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize
# генерация ключей
ID=45
pkcs15-init -G rsa/2048 --auth-id 02 --label "My Private Key" --public-key-label "My Public Key" --id $ID
# генерация заявки на сертификат
openssl
> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
# не забудьте заменить идентификатор сертификата
> req -engine pkcs11 -new -key 45 -keyform engine -out req.csr -subj "/C=RU/CN=user"
> exit
# выдадим сертификат по заявке
pki --issue --lifetime 1825 \
--cacert ~/pki/cacerts/ca-cert.pem \
--cakey ~/pki/private/ca-key.pem \
--in req.csr --type pkcs10 --outform pem \
> ~/pki/certs/client-cert.pem
# загрузим сертификат на токен
pkcs15-init --store-certificate ~/pki/certs/client-cert.pem --auth-id 02 --id $ID --format pem |
...
Теперь Рутокен готов к работе и его можно отдать клиенту.
Настройка клиента
Проверка доступности сервера
Проверим, что сервер доступен доступен.
Code Block |
---|
language | bash |
---|
title | проверка доступности сервера |
---|
|
ping server.astradomain.ad |
Установка пакетов
Установим необходимые пакеты для работы:
Code Block |
---|
language | bash |
---|
title | Установка пакетов |
---|
|
sudo apt update
# пакеты для работы StrongswanstrongSwan VPN сервера
sudo apt-get install strongswan libstrongswan-extra-plugins libcharon-extra-plugins
# пакеты для работы со смарт-картами (чтобы создать ключевую пару и сертификаты на токене)
sudo apt install opensc libengine-pkcs11-openssl1.1 |
...
Настройка strongSwan
Корневой сертификат сервера положим в дирректорию директорию /etc/ipsec.d/cacerts:
Code Block |
---|
language | bash |
---|
title | Установка корневого сертификата |
---|
|
sudo cp /path/to/ca-cert.pem /etc/ipsec.d/cacerts |
...
Настроим файл конфигурации strongswan strongSwan /etc/ipsec.conf:
Code Block |
---|
language | bash |
---|
title | /etc/ipsec.conf |
---|
|
config setup
conn ikev2-rw
# измените адрес сервера на свой
right=server.astradomain.ad
rightid=@server.astradomain.ad
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
# имя пользователя для которого выдан сертификат
leftid=user
leftcert=%smartcard:5045
leftauth=eap
eap_identity=%identity
auto=start |
...
Настроим файл паролей аутентфикации strongswan strongSwan /etc/ipsec.secrets и укажем, какой ключ нужно использовать для аутентфикации аутентификации по смарт-карте:
Code Block |
---|
language | bash |
---|
title | /etc/ipsec.secrets |
---|
|
# Формат следующий
#: PIN %smartcard:<keyid> <pin code>
: PIN %smartcard:45 "12345678" |
Более подробно о способах задания паролей смарт-карт можно почитать тут здесь.
Настройка модуля pkcs11
Настроим использование pkcs11 модулей в strongswanstrongSwan. Для этого откроем файл конфигурации /etc/strongswan.d/charon/pkcs11.conf и отредактируем настройки модулей pkcs11:
Code Block |
---|
language | bash |
---|
title | /etc/strongswan.d/charon/pkcs11.conf |
---|
|
modules {
opensc-pkcs11 {
# Whether to automatically load certificates from tokens.
# load_certs = yes
# Whether OS locking should be enabled for this module.
# os_locking = no
# Full path to the shared object file of this PKCS#11 module.
path = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
} |
Подключение к сети
Подключите смарт-карту и инициализируйте подключение c помощью команды:
Code Block |
---|
language | bash |
---|
title | Подключение к сети VPN |
---|
|
sudo systemctl stop strongswan-starter
sudo systemctl start strongswan-starter |
Проверить, что соединение прошло успешно, можно, например, выведя список своих ip адресов С помощью команды:
Code Block |
---|
language | bash |
---|
title | Проверка успешности подключения |
---|
|
ip addr show |
Среди них появится ваш виртуальный ip:
Image Added