IPsec VPN на основе StrongSwan с использованием сертификатов и предварительного общего ключа в Ubuntu 16.04
На этой странице
- Установка Strongswan (двоичный код и исходный код)
- Компиляция Stronggswan с использованием исходного кода
- Виртуальная частная сеть типа сеть-сеть
- Туннель на основе предварительного общего ключа
- Туннель на основе сертификата 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.