|
strongSwan – это программное обеспечение для создания VPN-соединений на основе IPsec-протокола. Домашняя страница ПО: https://strongswan.org/.
Используется двухфакторная аутентификации клиента:
На серверном и клиентском узлах:
cat << EOF | sudo tee /etc/sysctl.d/10-net-forward.conf >/dev/null |
Все сертификаты создаются и хранятся в удостоверяющем центре (УЦ), в качестве которого может использоваться любой компьютер.
Вначале создаётся самоподписанный корневой сертификат УЦ. Затем с помощью сертификата УЦ создаются сертификаты для сервера и клиента. Созданные сертификаты и ключи копируются в определённые каталоги на сервере и клиенте.
Далее рассматривается вариант создания УЦ непосредственно на сервере в подкаталогах каталога /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 pki --self --ca --in /etc/ipsec.d/private/ca.key.pem --type rsa --dn "CN=CA" --lifetime 3650 --outform pem \ |
server.key.pem и сертификат server.cert.pem:pki --gen --size 4096 --type rsa --outform pem \ sudo pki --pub --in /etc/ipsec.d/private/server.key.pem --type rsa \ |
client.key.pem и сертификат client.cert.pem:pki --gen --size 4096 --type rsa --outform pem \ sudo pki --pub --in /etc/ipsec.d/private/client.key.pem --type rsa \ |
На серверном узле:
sudo apt install strongswan libstrongswan-extra-plugins |
server.cert.pem (сертификат сервера) в каталог /etc/ipsec.d/certs/;server.key.pem (закрытый ключ сервера) в каталог /etc/ipsec.d/private/./etc/ipsec.secrets указать строку с закрытым ключом сервера:: RSA server.key.pem |
/etc/ipsec.conf:config setup
charondebug= ike 4, cfg 2
conn server
type=tunnel
auto=add
keyexchange=ikev2
keyingtries=%forever
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
dpdaction=hold
dpddelay=300s
forceencaps=yes
leftid=<IP-адрес_сервера> # Например: 10.192.6.108
leftauth=pubkey
leftcert=server.cert.pem # Сертификат сервера
leftsendcert=always
leftsubnet=<виртуальная_сеть__предоставляемая_сервером> # Например: 10.1.1.0/24
rightauth=pubkey
rightid=%any
rightsourceip=<диапазон_виртуальных_адресов_для_выдачи_клиентам> # Например: 10.1.1.0/24
rightdns=<IP-адреса_DNS-серверов__передаваемые_клиентам> # Например: 10.1.1.250,10.1.1.240 |
sudo ipsec restart |
На клиентском узле:
sudo apt install strongswan libstrongswan-extra-plugins |
ca.cert.pem (сертификат УЦ) в каталог /etc/ipsec.d/cacerts/;client.cert.pem (сертификат пользователя) и client.key.pem (закрытый ключ пользователя) в домашний каталог пользователя./etc/ipsec.conf:config setup
charondebug= ike 4, cfg 2
conn client
type=tunnel
auto=start
keyexchange=ikev2
keyingtries=%forever
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
dpdaction=restart
forceencaps=yes
leftauth=pubkey
leftcert=%smartcard0@rutoken:45 # сертификат клиента находится на токене
leftsendcert=always
leftsourceip=%config
right=<IP-адрес_сервера> # Например: 10.192.6.108
rightid=<IP-адрес_сервера> # Например: 10.192.6.108
rightauth=pubkey
rightsubnet=<виртуальная_сеть__предоставляемая_сервером> # Например: 10.1.1.0/24
# Если указать 0.0.0.0/0, то весь сетевой траффик клиента
# будет "заворачиваться" в VPN-соединение (туннель).
# Тогда на сервере параметру leftsubnet тоже
# необходимо задать значение 0.0.0.0/0. |
Предполагается, что на клиентском узле настроен единый доступ к ключевым носителям разных производителей (см. статью).
Общая информация по работе с ключевыми носителями дана в статье "Ключевые носители (токены) PKCS в Astra Linux".
p11tool --login --write --load-certificate="<путь_к_клиентскому_сертификату>" --id=<идентификатор_объекта> --label="<название_объекта>" p11tool --login --write --load-privkey="<путь_к_клиентскому_закрытому_ключу>" --id=<идентификатор_объекта> --label="<название_объекта>" |
p11tool --login --write --load-certificate="client.cert.pem" --id=45 --label="mykey" p11tool --login --write --load-privkey="client.key.pem" --id=45 --label="mykey" |
/etc/strongswan.d/charon/pkcs11.conf в секции modules указать произвольное название модуля и путь до интерфейсной библиотеки используемого токена:pkcs11 {
# Whether to load the plugin. Can also be an integer to increase the
# priority of this plugin.
load = yes
...
# List of available PKCS#11 modules.
modules {
<название_модуля> {
path = <путь_к_интерфейсной_библиотеке_токена>
}
}
} |
/etc/strongswan.d/charon/pkcs11.conf может выглядеть так:pkcs11 {
load = yes
modules {
rutoken {
path = /usr/lib/librtpkcs11ecp.so
}
}
} |
/etc/ipsec.secrets указать строку с описанием токена и закрытого ключа:: PIN <токен_и_закрытый_ключ> <pin-код_токена> |
: PIN %smartcard0@rutoken:45 12345678 |
sudo ipsec restart |
Для просмотра состояния установленного VPN-соединения используется команда:
sudo ipsec status |
|
Либо для вывода более подробной информации о соединении:
sudo ipsec statusall |
|