Руководство по настройке VPN сервера IPsec с использованием StrongSwan в качестве сервера IPsec для проверки подлинности.
- Установка осуществляется на сервер под управлением CentOS 7
- В качестве клиентов могут выступать операционные системы поддерживающие IPsec IKEv2 (Mac OS, Android 4+, iOS, Win7+, Ubuntu)
- Используемые порты, которые следует открыть на файерволе 4500/UDP, 500/UDP, 51/UDP и 50/UDP
Установка Epel
yum install epel-release |
Установка Strongswan
После включения Epel-релиза установим Strongswan
yum install strongswan |
Запускаем VPN
systemctl enable strongswan |
Сертификаты
Сервер VPN идентифицирует себя с сертификатом клиента.
Клиенты могут использовать сертификат для проверки подлинности себя, но в данном случае мы будем использовать простой метод по логину и паролю.
На Android с приложением StrongSwan необходимо импортировать .p12
файл, который мы создадим позднее.
Установим haveged для ускорения процесса генерации ключей.
yum install haveged |
Создаем самоподписанный корневой сертификат.
Генерируем приватный ключ.
cd /etc/strongswan |
Генерируем сертификат
strongswan pki --self --ca --lifetime 3650 --in ipsec.d/private/strongswanKey.der --type rsa --dn "C=NL, O=Example Company, CN=strongSwan Root CA" --outform der > ipsec.d/cacerts/strongswanCert.der |
Просмотреть сертификат можно используя команду
strongswan pki --print --in ipsec.d/cacerts/strongswanCert.der |
cert: X509 |
Генерируем VPN хост ключ. Это ключевая пара которую VPN сервер использует для аутентификации своих клиентов.
Сперва приватный ключ:
strongswan pki --gen --type rsa --size 2048 --outform der > ipsec.d/private/vpnHostKey.der |
Затем публичный ключ.
strongswan pki --pub --in ipsec.d/private/vpnHostKey.der --type rsa | strongswan pki --issue --lifetime 730 --cacert ipsec.d/cacerts/strongswanCert.der --cakey ipsec.d/private/strongswanKey.der --dn "C=RU, O=Example Company, CN=vpn.example.org" --san vpn.example.com --san vpn.example.net --san 123.456.789.00 --san @123.456.789.00 --flag serverAuth --flag ikeIntermediate --outform der > ipsec.d/certs/vpnHostCert.der |
Доменное имя или IP-адрес сервера VPN, который используется в свойствах подключения клиентов, должны содержаться либо в CN
и/или в --san
. Если это не соответствует клиенты не смогут подключиться.
Приватный ключ (/etc/openswan/ipsec.d/private/strongswanKey.der
) рекомендуется переместить в безопасное место, в место без доступа к интернету (например на флешку).
Кража мастер-ключа может полностью скомпрометировать инфраструктуру открытого ключа. Используйте его только для создания сертификатов клиента при необходимости.
Клиентский сертификат
Клиент должен иметь свой сертификат для использования VPN. Процесс очень похож на генерацию хост сертификата.
Создаем пару для пользователя TestUser
.
Приватный ключ
cd /etc/strongswan/ |
Публичный ключ
strongswan pki --pub --in ipsec.d/private/TestUser.der --type rsa | strongswan pki --issue --lifetime 730 --cacert ipsec.d/cacerts/strongswanCert.der --cakey ipsec.d/private/strongswanKey.der --dn "C=RU, O=Example Company, [email protected]" --san "[email protected]" --san "[email protected]" --outform der > ipsec.d/certs/TestUser.der |
Клиентам VPN необходим сертификат клиента, его закрытый ключ, и подписанный сертификат CA. Наиболее удобный способ - все в одном PKCS#12
Конвертируем ключи в PEM и конвертируем в .p12
cd /etc/strongswan/ |
И собираем .p12
openssl pkcs12 -export -inkey ipsec.d/private/TestUser.pem -in ipsec.d/certs/TestUser.pem -name "TestUser's VPN Certificate" -certfile ipsec.d/cacerts/strongswanCert.pem -caname "strongSwan Root CA" -out TestUser.p12 |
IPSEC конфигурация
Открываем файл конфигурации
nano /etc/strongswan/ipsec.conf |
и добавляем следующее
# ipsec.conf - strongSwan IPsec configuration file |
Эта конфигурация имеет настройки для трех типов VPN: IKEv2 + RSA, IKEv2 + EAP, и IKEv1 + Xauth RSA, таким образом, обеспечивая совместимость для широкого круга клиентов IPsec.
Клиентам с прошивкой ниже iOS 8 нужно использовать IKEv1. Apple добавила поддержку для IKEv2 в 8 версию iOS, но он должен быть настроен с помощью пользовательского профиля конфигурации.
OS X не поддерживает IKEv2 (10.10 или ниже), поэтому использовать нужно IKEv1.
Android 4+ и Windows 7+ имеют поддержку IKEv2 и могут спокойно использовать это.
Клиенты получают публичный DNS от Google и IP-адрес в диапазоне 10.20.30.0/24
. В данном случае используется мощное шифрование.
leftcert=vpnHostCert.der
это путь до /etc/strongswan/ipsec.d/certs/vpnHostCert.der
VPN клиенты и пароли
Клиенты настраиваются в файле конфигурации:
nano /etc/strongswan/ipsec.secrets |
: RSA vpnHostKey.der |
Файрвол и роутинг пакетов
firewall-cmd --zone=dmz --permanent --add-rich-rule='rule protocol value="esp" accept' |
nano /etc/sysctl.conf |
# VPN |