Данная статья применима к:
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8).
Введение
strongSwan – это программное обеспечение для создания виртуальной частной сети (VPN) на основе IPsec-протокола. Домашняя страница ПО: https://strongswan.org/.
Используется двухфакторная аутентификации пользователя:
- первый фактор –
пара: открытый ключ (сертификат) изакрытый ключ; - второй фактор – токен, принадлежащий пользователю.
Сертификат изакрытый ключ пользователя хранятся на токене.
Общая статья по работе с токенами: Ключевые носители (токены) PKCS в Astra Linux.
Настройка сети
На серверном и клиентском узлах:
- Разрешить пересылку сетевых пакетов:cat << EOF | sudo tee /etc/sysctl.d/10-net-forward.conf >/dev/null
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.send_redirects = 0
EOF
sudo sysctl --system
Создание удостоверяющего центра и сертификатов
Все сертификаты создаются и хранятся в удостоверяющем центре (УЦ), в качестве которого может использоваться любой компьютер.
Первым создаётся самоподписанный сертификат УЦ. Затем с помощью сертификата УЦ создаются сертификаты для сервера и клиента. Созданные сертификаты и ключи копируются в определённые каталоги на сервере и клиенте.
Далее рассматривается вариант создания УЦ непосредственно на сервере в подкаталогах каталога /etc/ipsec.d/:
- Установить программы для работы с сертификатами:sudo apt install strongswan strongswan-pki libtss2-tcti-tabrmd0
- Создать для удостоверяющего центра закрытый ключ
ca.key.pemи самоподписанный сертификатca.cert.pem:pki --gen --size 4096 --type rsa --outform pem \
| sudo tee /etc/ipsec.d/private/ca.key.pemsudo pki --self --ca --in /etc/ipsec.d/private/ca.key.pem --type rsa --dn "CN=CA" --lifetime 3650 --outform pem \
| sudo tee /etc/ipsec.d/cacerts/ca.cert.pem - Создать для сервера закрытый ключ
server.key.pemи сертификатserver.cert.pem:где <IP-адрес_сервера> – IP-адрес strongSwan-сервера.pki --gen --size 4096 --type rsa --outform pem \
| sudo tee /etc/ipsec.d/private/server.key.pemsudo pki --pub --in /etc/ipsec.d/private/server.key.pem --type rsa \
| sudo pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
--dn "CN=<IP-адрес_сервера>" --san "<IP-адрес_сервера>" --flag serverAuth --flag ikeIntermediate --outform pem \
| sudo tee /etc/ipsec.d/certs/server.cert.pem - Создать для клиента закрытый ключ
client.key.pemи сертификатclient.cert.pem:где <IP-адрес_клиента> – IP-адрес strongSwan-клиента.pki --gen --size 4096 --type rsa --outform pem \
| sudo tee /etc/ipsec.d/private/client.key.pemsudo pki --pub --in /etc/ipsec.d/private/client.key.pem --type rsa \
| sudo pki --issue --lifetime 3650 --cacert /etc/ipsec.d/cacerts/ca.cert.pem --cakey /etc/ipsec.d/private/ca.key.pem \
--dn "CN=<IP-адрес_клиента>" --san "<IP-адрес_клиента>" --flag clientAuth --flag ikeIntermediate --outform pem \
| sudo tee /etc/ipsec.d/certs/client.cert.pem
Настройка VPN-сервера
На серверном узле:
- Установить пакеты с strongSwan:sudo apt install strongswan libstrongswan-extra-plugins
- Если УЦ был создан на сервере с помощью команд из раздела "Создание удостоверяющего центра и сертификатов", то сертификаты уже расположены в нужном месте, и этот пункт не надо выполнять.
Скопировать из УЦ на серверный узел:
- ca.cert.pem (сертификат УЦ) в каталог /etc/ipsec.d/cacerts/;
-server.cert.pem(сертификат сервера) в каталог/etc/ipsec.d/certs/;
-server.key.pem(закрытый ключ сервера) в каталог/etc/ipsec.d/private/. - Настроить strongSwan-сервер на использование закрытого ключа сервера.
Для этого в файле/etc/ipsec.secretsуказать строку с путём до закрытого ключа сервера:: RSA "/etc/ipsec.d/private/server.key.pem"
- Задать настройки strongSwan-сервера в файле
/etc/ipsec.conf:гдеconfig setup #charondebug="all" charondebug= ike 4, cfg 2 ## uniqueids=no conn server type=tunnel auto=add keyexchange=ikev2 ike=aes256-sha1-modp1024! esp=aes256-sha1! # left=${MY_HOST_IP} left=%any leftid=${MY_HOST_IP} leftcert=server.cert.pem # # # leftsubnet=10.1.1.0/24 leftauth=pubkey # leftsendcert=always rightsourceip=10.1.1.0/24 rightauth=pubkey right=%any rightid=%any # rightdns=8.8.8.8,8.8.4.4 # rightsendcert=always keyingtries=%forever ikelifetime=28800s lifetime=3600s # dpddelay=30s dpdtimeout=120s # dpdaction=restart forceencaps=yes dpdaction=clear dpddelay=300s rekey=no eap_identity=%identity
- <IP-адрес_сервера> – IP-адрес серверного узла;
- <Подсеть_виртуальных_IP-адресов_для_клиентов> – . Например, 10.1.1.0/24 - Перезапустить strongSwan-сервер для применения настроек:sudo ipsec restart
Настройка VPN-клиента
Настройка strongSwan-клиента
На клиентском узле:
- Установить пакеты с strongSwan:sudo apt install strongswan libstrongswan-extra-plugins
- Скопировать из УЦ на клиентский узел:
-ca.cert.pem(сертификат УЦ) в каталог/etc/ipsec.d/cacerts/;
-client.cert.pem(сертификат пользователя) иclient.key.pem(закрытый ключ пользователя) в домашний каталог пользователя. - Задать настройки strongSwan-клиента в файле
/etc/ipsec.conf:гдеconfig setup #charondebug="all" charondebug= ike 4, cfg 2 ## uniqueids=no conn client type=tunnel auto=start keyexchange=ikev2 ike=aes256-sha1-modp1024! esp=aes256-sha1! # left=${MY_HOST_IP} leftsourceip=%config leftauth=pubkey leftcert=%smartcard0@rutoken:45 # leftcert=/home/user/client.cert.pem leftsubnet=10.1.1.0/24 right=${PEER_HOST_IP} rightid=${PEER_HOST_IP} ## rightsubnet=0.0.0.0/0 rightauth=pubkey rightsubnet=10.1.1.0/24 # keyingtries=%forever # ikelifetime=28800s # lifetime=3600s # dpddelay=30s # dpdtimeout=120s # dpdaction=restart eap_identity=%identity
- <IP-адрес_сервера> – IP-адрес серверного узла.
Настройка использования ключевого носителя (токена) в качестве второго фактора аутентификации
Предполагается, что настроен единый доступ к ключевым носителям разных производителей (см. статью).
- Подключить ключевой носитель к клиентскому узлу.
- Записать на ключевой носитель сертификат клиента:p11tool --login --write --load-certificate="client.cert.pem" --id=45 --label="mykey"
- Записать на ключевой носитель закрытый ключ клиента:p11tool --login --write --load-privkey="client.key.pem" --id=45 --label="mykey"
2) Настроить использование pkcs11 для RuToken ЭЦП на клиенте
В файл /etc/strongswan.d/charon/pkcs11.conf привести к виду:
pkcs11 {
load = yes
modules {
rutoken {
path = /usr/lib/librtpkcs11ecp.so
}
}
}
3)
Настроить доступ по закрытому ключу клиента, на который хранится на токене, в файле /etc/ipsec.secrets:
# : PIN <smartcard selector> <pin code> | %prompt # <smartcard selector> format: %smartcard[<slotnr>[@<module>]]:<keyid> : PIN %smartcard0@rutoken:45 12345678