Проект strongSwan (сильный Лебедь) - это комплексная реализация протоколов Internet Key Exchange (IKE), которая позволяет защищать IP-трафик в сценариях IPsec на основе политик и маршрутов — от простых до очень сложных.
Компания strongSwan уделяет особое внимание
- простота настройки
- надежные методы шифрования и аутентификации
- мощные политики IPsec, поддерживающие большие и сложные VPN-сети
- модульная конструкция с широкими возможностями расширения и переноса
История проекта
strongSwan был запущен в 2005 году как ответвление от закрытого проекта с открытым исходным кодом FreeS/WAN, в который был интегрирован отдельный патч X.509, над которым мы работали для FreeS/WAN с 2000 года.
С тех пор новый демон IKE был написан с нуля в современном объектно-ориентированном стиле программирования, так что нынешняя кодовая база больше не имеет общих элементов с предшественником. Модульная структура этого демона позволяет настраивать его с помощью растущего числа плагинов.
Изначально новый демон поддерживал только протокол IKEv2, а IKEv1 обрабатывался расширенной версией демона pluto из FreeS/WAN. Но поскольку внедрение IKEv2 другими поставщиками заняло больше времени, чем ожидалось, в 2012 году в новый демон strongSwan 5.0 была добавлена поддержка IKEv1, в результате чего pluto и многие другие устаревшие компоненты были удалены.
В течение нескольких лет проект поддерживали исследователи из Университета прикладных наук Рапперсвиль, Швейцария, а именно Андреас Штеффен, Мартин Вилли и Тобиас Бруннер. В июне 2022 года права на интеллектуальную собственность проекта strongSwan были приобретены компанией secunet Security Networks AG.
В настоящее время проект strongSwan поддерживают:
- Андреас Штеффен, почетный профессор в области безопасности коммуникаций и президент консалтинговой фирмы strongSec GmbH
- Тобиас Бруннер, инженер-программист в codelabs GmbH
- secunet Security Networks AG
Описание возможностей
Интернет-обмен ключами (IKE)
- Реализует протокол обмена ключами IKEv2 (RFC 7296) (также поддерживается IKEv1)
- Полностью протестирована поддержка туннелей IPv6 IPSec и подключений в транспортном режиме
- Динамическое обновление IP-адреса и интерфейса с помощью MOBIKE (RFC 4555)
- Автоматическая вставка и удаление правил брандмауэра на основе политики IPSec
- Обход NAT с помощью UDP-инкапсуляции и плавающего порта (RFC 3947)
- Поддержка фрагментации сообщений IKEv2 (RFC 7383) для предотвращения проблем с фрагментацией IP
- Обнаружение мертвых узлов (DPD, RFC 3706) устраняет зависшие туннели
- Пул виртуальных IP-адресов, управляемый IKE daemon, DHCP, RADIUS или базой данных SQL
- IKEv2 SAS может быть перенаправлен на другой шлюз (RFC 5685)
- Поддерживается бездетная инициализация IKEv2 SA (RFC 6023)
- Реализованные RFC и интернет-проекты
Модульность
- Модульная система плагинов обеспечивает широкие возможности расширения и гибкость
- Плагины могут предоставлять криптографические алгоритмы, учетные данные, методы аутентификации, конфигурации, доступ к IPsec и сетевым стекам и многое другое
- Встроенные тесты целостности и криптографии для плагинов и библиотек
Аутентификация / Криптография
- Безопасная аутентификация пользователя IKEv2 EAP (EAP-SIM, EAP-AKA, EAP-TLS, EAP-TTLS, EAP-PEAP, EAP-MSCHAPv2 и т.д.)
- Дополнительная ретрансляция сообщений EAP на сервер AAA через плагин EAP-RADIUS
- Поддержка обмена несколькими аутентификациями IKEv2 (RFC 4739)
- Аутентификация на основе сертификатов X.509 или предварительно совместно используемых ключей
- Использование алгоритмов надежной подписи с аутентификацией подписи в IKEv2 (RFC 7427)
- Поддержка CRLS и OCSP (RFC 6960)
- Хранение закрытых ключей и сертификатов на смарт-карте (интерфейс PKCS #11) или защищено TPM 2.0.
- Поддержка групп DH эллиптической кривой NIST, подписей и сертификатов ECDSA
- Поддержка подписей и сертификатов X25519 elliptic curve DH group (RFC 8031) и Ed25519 (RFC 8420)
- Поддержка нескольких классических и постквантовых обменов ключами (RFC 9370), включая ML-KEM (FIPS 203)
- Trusted Network Connect совместим с PB-TNC (RFC 5793), PA-TNC (RFC 5792), PT-TLS (RFC 6876), PT-EAP (RFC 7171) и SWIMA для PA-TNC (RFC 8412)
Переносимость
- Работает на ядрах Linux 2.6, 3.x, 4.x, 5.x и 6.x
- Переносится на Android, FreeBSD, macOS, iOS и Windows
- Интегрируется в рабочие столы Linux через плагин NetworkManager
- Доступно приложение для Android
Описание последней версии программы
Текущая версия программы 6.0.7
Уязвимости
- CVE-2026-47895 — устранена уязвимость в
libstrongswan, связанная с клонированием определенных идентификаторов, которая могла привести к двойному освобождению памяти и потенциально к удаленному выполнению кода. Уязвимость устранена в версиях 4.3.3 и новее.
Усовершенствования и оптимизация
- Теперь проверяется срок действия (notBefore/notAfter) последнего сертификата в неполной цепочке доверия для предварительно доверенного сертификата. Ранее срок действия проверялся только в том случае, если был найден сертификат эмитента. Это особенно актуально для несамоподписанных сертификатов, которые настроены явно (например, в
remote.certsв файле swanctl.conf), но сертификат центра сертификации для которых не загружен (0d17838). - Как и в случае с описанным выше изменением, теперь также проверяется действительность предварительно доверенных самоподписанных сертификатов (f0a489f).
- Включите смешанные конфигурации IPComp для ядра Linux версии 6.3 и выше (a904f91).
Изменения в плагине и конфигурации
- Событие
list-connв VICI теперь включает предложения по протоколам IKE и IPsec. Пронумерованный (начиная с нуля) раздел для каждого предложения содержит списки идентификаторов алгоритмов для каждого типа преобразования, описанного в предложении. Поскольку предложения могут быть довольно объемными, командаswanctl --list-connsв настоящее время не выводит их, чтобы сохранить компактность вывода, но для их просмотра можно использовать--raw(#3067, 5b56e56). - Команда
swanctl --list-connsтеперь принимает параметр--ikeдля фильтрации подключений по имени (5185b6f). charon-cmdбольше не использует IPv4 по умолчанию (64e01e2) и позволяет настраивать локальную конечную точку с помощью параметра--host-local(74fd259).- Правильно настройте (или, скорее, отключите) параметр
--with-plugins-packaged-separately, добавленный в версии 6.0.5 (172c2a3).
Исправления
- Исправлена ошибка при получении ключа, возникавшая при сбросе IKE SA после повторной передачи IKE_INTERMEDIATE (dc8b479). Ранее это приводило к сбою шифрования при следующей попытке.
- Исправлена ошибка обработки, возникавшая, если запрос IKE_INTERMEDIATE не содержал полезную нагрузку KE (ac703e4).
- Исправлена совместимость плагина
opensslс OpenSSL 4 (528e5f0, 374b17f, 8ff3238). - Устранена потенциальная ошибка чтения вне стека в плагине
dhcpпри чтении сообщений DHCP (8f22345). - Устранена потенциальная ошибка чтения вне стека на стороне клиента в плагине
eap-akaпри слишком коротком значенииAT_RAND(4df5310). - Устранена потенциальная ошибка разыменования нулевого указателя в плагине
pkcs7после проверки подписанных атрибутов (531de4d). - Устранена потенциальная возможность внедрения команд при создании тегов SWID в нерекомендуемых конфигурациях (9ac3db8).
- Исправлена настройка IPv6-адресов на устройствах TUN в Linux, хотя в настоящее время эта функция не используется (ea56986).
Для разработчиков
- Методы
ike_cfg_t::get_proposalsиchild_cfg_t::get_proposalsполучили аргументlogдля подавления сообщенийconfigured proposals: ...журнала уровня 2, которые они обычно генерируют. - Идентификаторы OID для эллиптических кривых NIST SECP были переименованы с заменой сбивающего с толку префикса SECT (bff405c).
- Улучшена обработка кэша при выполнении GitHub CI, чтобы сократить объем хранилища и избежать удаления кэша базовой ветки при работе с несколькими функциональными ветками.
Список всех закрытых проблем и запросов на включение изменений приведен в версии 6.0.7.
Документация и источники
Варианты установки strongSwan на сервер
Установка через пакеты дистрибутива (лучший вариант для большинства)
ОС VPS Ubuntu/Debian
sudo apt update
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins -y
Установка из исходников (максимальная контроль и функции)
Создание стенда
liv@singularity:~/strongswan$ uname -a
Linux singularity 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
liv@singularity:~$ hostnamectl status
Static hostname: singularity
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: de1e108b32d645b6ae63a5da44f92cfc
Boot ID: f4b1bf7a309a4f0b8633a46e25a28f0c
Virtualization: kvm
Operating System: Ubuntu 24.04.4 LTS
Kernel: Linux 6.8.0-124-generic
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _i440FX + PIIX, 1996_
Firmware Version: 1.16.3-debian-1.16.3-2
Firmware Date: Tue 2014-04-01
Firmware Age: 12y 2month 1w 3d