|
strongSwan – это программное обеспечение для создания виртуальной частной сети (VPN) на основе IPsec-протокола. Домашняя страница ПО: https://strongswan.org/.
Используется двухфакторная аутентификации пользователя:
Общая статья по работе с токенами: Ключевые носители (токены) PKCS в Astra Linux.
На серверном и клиентском узлах:
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 "/etc/ipsec.d/private/server.key.pem" |
/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 |
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="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 |
Предполагается, что настроен единый доступ к ключевым носителям разных производителей (см. статью).
Общая информация по работе с ключевыми носителями дана в статье "Ключевые носители (токены) PKCS в Astra Linux".
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
}
}
} |
3)
Настроить доступ по закрытому ключу клиента, на который хранится на токене, в файле /etc/ipsec.secrets:
# : PIN <smartcard selector> <pin code> | %prompt # <smartcard selector> format: %smartcard[<slotnr>[@<module>]]:<keyid> : PIN %smartcard0@rutoken:45 12345678 |