Поиск по сайту:

IPsec VPN на основе StrongSwan с использованием сертификатов и предварительного общего ключа в Ubuntu 16.04


На этой странице

  1. Установка Strongswan (двоичный код и исходный код)
  2. Компиляция Stronggswan с использованием исходного кода
  3. Виртуальная частная сеть типа сеть-сеть
  4. Туннель на основе предварительного общего ключа
  5. Туннель на основе сертификата X.509

Вступление

В этой статье мы сосредоточимся на реализации протокола IPsec с открытым исходным кодом. Безопасность сетевого уровня обеспечивается использованием протокола IPsec, состоящего из следующих двух компонентов.

  • Заголовок аутентификации (AH)
  • Инкапсуляция полезной нагрузки безопасности (ESP)

Целостность пакетов и аутентификация обеспечиваются с помощью AH, компонент ESP обеспечивает функции конфиденциальности и безопасности. Реализация IPsec с открытым исходным кодом, StrongSwan (Strong Secure WAN), является хорошо известным инструментом, который поддерживает обе версии обмена ключами через Интернет (IKE v1/2)/. Совместное использование ключей или обмен ключами через Интернет является частью IPSec VPN (виртуальная частная сеть). Механизм IKE используется для обмена ключом между двумя сторонами для шифрования данных в протоколе ESP. Алгоритмы шифрования и целостности (такие как AES, SHA и т. д.) OpenSSL и криптографические библиотеки используются на этапе IKE. Однако реализация алгоритма безопасности в ядре Linux используется в основной части IPSec (ESP и AH). Стронгсван.

Особенности Стронгсван

  • Поддержка проверки подлинности на основе общего ключа.
  • Для аутентификации поддерживаются сертификаты в формате X.509.
  • Единый демон, поддерживающий IKE v1/v2.
  • Подключаемые модули и библиотеки сторонних производителей можно легко интегрировать.
  • Аппаратные токены поддерживаются при использовании проекта openSC.

Strongswan поддерживает протоколы Gateway-to-Gateway и RoadWarrior VPN. Сетевой трафик шифруется или расшифровывается на шлюзовых устройствах организации в режиме site-to-site vpn. Однако устанавливается второй безопасный канал от шлюза до конечного пользователя/клиентского компьютера.

В этой статье инструмент strongSwan будет установлен на Ubuntu 16.04 (LTS), я покажу интеграцию OpenSC для аппаратных токенов и, наконец, создание туннеля от шлюза к шлюзу с использованием предварительно общего ключа и сертификатов x.509. . Аппаратные токены или аппаратные модули безопасности (HSM), такие как USB и смарт-карты, могут использоваться с strongswan для хранения криптографических ключей (открытых и закрытых) и сертификатов. Поддержка аппаратных токенов в strongswan обеспечивается с помощью OpenSC (набор инструментов и библиотек), проекта с открытым исходным кодом. Файловая структура на основе PKCS#15 и доступ к смарт-карте с использованием API PKCS#11 также обеспечивается инструментом OpenSC. Следующие смарт-карты поддерживаются openSC.

  • ВестКоС
  • УстановитьCOS
  • Карты
  • СТАРКОС
  • АСЕПКОС

Установка Strongswan (бинарный и исходный код)

Двоичные пакеты (deb/rpm) strongswan доступны почти во всех широко используемых дистрибутивах Linux. Установка strongswan с использованием бинарного и исходного кода (с желаемыми функциями) будет подробно объяснена в этой статье.

Бинарный пакет strongswan можно установить с помощью следующей команды в Ubuntu 16.04 LTS.

aptitude install strongswan

Доступные плагины strongswan в репозитории Ubuntu показаны ниже.

После установки на платформу Ubuntu файлы и папки конфигурации (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) сохраняются в каталоге /etc.

Компиляция Strongswan с использованием исходников

  • Opensc (для поддержки HSM в strongswan).
  • ПК/ПК  (требуется для поддержки устройства чтения смарт-карт на платформе Ubuntu).
  • Библиотека GMP (необходима для математических операций в strongswan).
  • Инструмент OpenSSL (хорошо известная реализация криптографических алгоритмов, таких как AES, SHA1).
  • PKCS (стандарты шифрования с открытым ключом) 1,7,8,11,12.

В этой статье инструмент PCSC-Lite будет установлен вместе с opensc на платформе Ubuntu, чтобы добавить поддержку устройств чтения смарт-карт. PCSC-Lite рекомендуется для считывателей CCID.

Запустите следующие команды, чтобы установить предварительно необходимое программное обеспечение, прежде чем мы начнем компиляцию strongswan.

1. Установка OpenSc

aptitude install opensc

2. Установка библиотеки GMP

aptitude install libgmp10

Установите библиотеку разработки GMP.

aptitude install libgmp-dev

OpenSSL libcrypto устанавливается с помощью следующей команды.

apt-get install libssl-dev

Этапы компиляции

Перейдите в папку /usr/src/ и загрузите последний выпуск strongswan с помощью команды wget.

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

Извлеките сжатый файл и перейдите в извлеченную папку, чтобы запустить скрипт configure.

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

Запустите скрипт configure, чтобы проверить зависимости strongswan. Поддержка HSM уже включена в последней версии strongswan, как показано ниже.

Запустите скрипт configure, используйте префикс /usr/local и включите поддержку openssl.

./configure --prefix=/usr/local  --enable-openssl

На следующем снимке видно, что скрипт configure не сгенерировал никаких ошибок, поскольку все необходимые зависимости уже были установлены в системе.

Выполните следующие две команды, чтобы скомпилировать и установить strongswan в каталоге /usr/local.

make
make install

Компиляция и установка strongswan на платформу Ubuntu завершена, несколько конфигурационных файлов (strongswan.conf, ipsec.conf и ipsec.secrets) и папок (strongswan.d,ipsec.d) скопированы по пути /usr/local/etc . Конфигурация политики VPN помещается в файл ipsec.conf, а конфиденциальные секреты хранятся в файле ipsec.secrets. Конфигурация плагина Strongswan хранится в каталоге strongswan.d.

Strongswan поддерживает как транспортные, так и туннельные VPN. В туннельном режиме обеспечивается межсайтовая безопасность канала, и он работает с устройствами других производителей, таких как cisco, huawei и juniper.

Сеть-сеть VPN

На следующем рисунке показано размещение VPN-шлюза на основе Strongswan в сети. Между частными сетями организации 192.168.223.0/24 и 192.168.222.0/24 будет установлен безопасный канал связи.

Прежде чем использовать IPsec между частными сетями A и B, убедитесь, что маршрутизация между VPN-шлюзами организации работает, чтобы VPN-шлюз на стороне A мог отправлять эхо-запросы на удаленный VPN-компьютер (B), что обеспечивает нормальное сетевое подключение.

Как показано ниже, конфигурация инструмента strongswan по умолчанию находится в каталоге /usr/local/etc/.

Туннель на основе предварительного общего ключа

В первом случае между шлюзовыми устройствами будет создана VPN на основе общего секрета. Strongswan использует хорошо известный алгоритм совместного использования ключей Диффи-Хеллмана для взаимной аутентификации. Подробная информация о том, как работает протокол IPsec, доступна по следующей ссылке.

Конфигурация VPN:

(В сторону)

Основная конфигурация политики Strongswan VPN находится в файле ipsec.conf. Информация, такая как приведенная ниже, находится в этом файле конфигурации.

  • Версия IKE
  • Тип туннеля
  • исходный и конечный шлюзы
  • частные сети VPN

ipsec.conf стороны A приведен ниже.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

Секреты IPsec (общие ключи, пароль закрытого ключа, пин-код для разблокировки hsm) хранятся в файле ipsec.secrets . Как показано ниже, секреты осколков между обеими сторонами VPN — «test12345».

192.168.1.101 192.168.1.102 : PSK 'test12345'

(Б сторона)

Конфигурация в файлах ipsec.conf и ipsec.secrets на удаленной стороне будет обратной конфигурации локального сайта, как указано ниже.

Содержимое файла ipsec.conf приведено ниже.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

Файл ipsec.secrets содержит общий секрет на удаленной стороне.

192.168.1.102 192.168.1.101 : PSK 'test12345'

Запустите демон strongswan (charon) с помощью следующей команды после того, как вы настроите файл конфигурации с обеих сторон.

Следующая команда показывает статус созданной VPN на устройствах.

статус ipsecвсе

Статус туннеля с обеих сторон (локальный и удаленный) показан ниже.

Эта команда Linux показывает политики и состояния туннеля IPsec.

ip xfrm state
ip xfrm policy

Как показано в приведенном выше выводе команды, конфиденциальная информация esp/hmac (ключи) также отображается командой ip xfrm.

Туннель на основе сертификата X.509

В туннеле на основе сертификата X.509 (проверка подлинности с открытым ключом) необходимо создать сертификаты для центра сертификации (CA), клиента A и B.

Создание самозаверяющего сертификата ЦС с помощью утилиты PKI компании strongswan показано на следующих снимках экрана.

Войдите в путь /usr/local/etc/ipsec.d и выполните следующие команды.

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

Генерация сертификатов для клиента А показана ниже.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

Аналогично, пара открытого/закрытого ключа и сертификат, сгенерированные для клиента B.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

После успешного создания ЦС и клиентских сертификатов следующим шагом будет изменение конфигурации ipsec.conf и ipsec.secrets. Пожалуйста, обратитесь к документации strongswan для более подробной информации об изменениях в ipsec.conf и файле секретов.

Содержимое ipsec.conf и ipsec.secrets для стороны A приведено ниже.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"
#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

Конфигурация стороны B также приведена ниже.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"

#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

Запустите команду перезапуска ipsec, чтобы применить вышеуказанные изменения и проверить состояние туннеля, созданного с использованием сертификатов.

ipsec statusall    # at side A
ipsec statusall    # at side B

Наконец, VPN на основе сертификата была успешно создана с помощью инструмента strongswan.