"Centos, StrongSwan и сертификаты"

Oct 07, 2019 00:03

Задача:
Построить защищенный канал связи IPsec типа "route-based". С аутентификацией по сертификатам X.509 на CentOS.

Решение:


0) Устанавливаем StrongSwan
1) Заполучаем X.509-сертификат для хоста а также CA-сертификат.
Сертификат хоста должен быть в виде двух файлов: host-cert.crt host-key.key
Отдельно СА-сертификат: ca-cert.crt

2) Файлы сертификатов и ключа размещаем в соответствующие папки:
/etc/strongswan/ipsec.d/cacerts
/etc/strongswan/ipsec.d/certs
/etc/strongswan/ipsec.d/private

3) Правим файл ipsec.secrets, дописываем строку:
: RSA host-key.key

4) Перечитываем ключи командой:
strongswan rereadsecrets

5) Правим ipsec.conf. Записываем туда примерно следующее:

conn %default
ikelifetime=24h
keyingtries=%forever
ike=aes128-sha256-ecp384
esp=aes128-sha256-ecp384
keyexchange=ikev2
authby=pubkey
aggressive=no
compress=no
forceencaps=no
closeaction=restart

# LEFT - Local side
left=%any
leftauth=pubkey
leftid=centos1.hvostat.local
leftcert=host-cert.crt
leftsendcert=always
leftsubnet=0.0.0.0/0

# DPD
dpdaction=restart
dpddelay=10s
dpdtimeout=30s

conn SRX-MSK
# RIGHT - Remote side
right=%any
rightauth=pubkey
rightid="C=RU, L=Moscow, O=LongTail Security inc, OU=IT, CN=SRX-CAT.hvostat.local"
rightsubnet=0.0.0.0/0

lifetime=1h
auto=add
mark=42

Обратите внимание: в rightid надо добавлять всю строку "subject" целиком.

6) Правим strongswan.conf. Добавляем строку:
install_routes = no

9) Настраиваем роутинг и интерфейсы:
Для примера: локальный IP-адрес 1.2.3.4, удаленный 2.3.4.5. Удаленная подсеть 192.168.313.0/24.
Нюанс: безадресные тоннельные интерфейсы (в отличие от Juniper), насколько я смог выяснить после раскуривания мануалов и проведения экспериментов -
НЕ поддерживаются.
IP-адрес тоннельного интерфейса ip_vti1 может быть ЛЮБЫМ частным IP-адресом.

ip tunnel add ip_vti1 local 1.2.3.4 remote 2.3.4.5 mode vti key 42
ip link set mtu 1365 dev ip_vti1
sysctl -w net.ipv4.conf.ip_vti1.disable_policy=1
ip addr add 172.16.1.1/32 dev ip_vti1
ip link set ip_vti1 up
route add -net 192.168.313.0/24 dev ip_vti1

10) Стартуем:
systemctl start strongswan

11) "Прибиваем гвоздями":
systemctl enable strongswan

12) Настраиваем и стартуем IPsec с "противоположной" стороны.

13) Проверяем, как ходят пакеты.

14) На основе п.9 пишем юнит systemd:
...
[Unit]
Description=ip_vti1 tunnel if start.
After=network.target strongswan.service
...

15) ???

16) PROFIT !!!

__

ipsec, x.509, linux, strongswan, centos

Previous post Next post
Up