StrongSwan. Remote Access VPN с использованием MSCHAPv2-EAP

от автора

О чем пойдет речь?

В данной статье я расскажу о том как настроить на Linux-сервере демон StrongSwan для подключения удаленных пользователей (Remote Access VPN) по протоколу IPSEC IKEv, а в качестве протокола аутентификации клиентов будет использоваться связка MSCHAPv2-EAP.

Описание решения

В данной реализации Remote Access VPN для подключения к шлюзу клиент используется протокол EAP (RFC 3748) совместно с Microsoft CHAP version 2 для аутентификации.
Этот протокол используется в VPN – клиенте Windows 7 Agile. В дополнении к идентификации IKEv2 по IP-адресу клиент использует EAP идентификацию по определенному на шлюзе имени и паролю.
Шлюз проходит аутентификацию на клиенте с помощью сертификата RSA.
Схема моего стенда и решения на рисунке ниже.
image
Virtual IP interface — виртуальный адрес, который назначается клиенту шлюзом. Настраивается в конфигурационных файлах StrongSwan.
Основное преимущество данного решения по отношению к VPN на сертификатах в том, что не нужно импортировать каждый сертификат на клиента, достаточно знать только логин и пароль. Дополнительным преимуществом является использование для установки IPSEC соединения протокола IKEv2, который обладает рядом преимуществ по отношению к IKEv1. Описание преимуществ успешно гуглиться.

Генерация сертификатов

Генерация сертификатов является самой ответственной частью и самой трудной, именно от нее будет зависеть работоспособность нашего IPSEC=тунеля.
Сертификаты генерировались с помощью OPENSSL.
Сначала настраиваем OPENSSL:

vi  /usr/lib/ssl/openssl.cnf [ CA_default ]  dir     = /etc/ipsec.d              # Основная директория, в ней будут храниться все сертификаты certificate = $dir/cacerts/strongswanCert.pem       # Здесь у нас будет лежать CA сертификат private_key = $dir/private/strongswanKey.pem        # А здесь закрытый ключ CA сертификата 

Создаем директорию для новых сертификатов и файл с серийником для OPENSSL

cd /etc/ipsec.d mkdir newcerts touch index.txt echo “00” > serial 

Генерируем CA-сертификат.

Создаем CA сертификат.

openssl req -x509 -days 3650 -newkey rsa:2048 -keyout private/strongswanKey.pem -out cacerts/strongswanCert.pem 

Конвертируем CA сертификат в формае p.12, который понимает Windows и большинство клиентов, чтобы не было проблем с импортом

openssl pkcs12 -export -inkey private/strongswanKey.pem -in certs/strongswanCert.pem -name "host" -certfile cacerts/strongswanCert.pem -caname "strongSwan Root CA" -out CAcert.p12  
Генерируем сертификат для сервера.

Создаем запрос на сертификат.

openssl req -newkey rsa:1024 -keyout private/serverkey.pem -out reqs/serverreq.pem   

Запрашиваем сертификат у CA, с помощью ранее созданного запроса.

openssl ca -in reqs/serverreq.pem -days 730 -out certs/servercert.pem -notext 

При генерации сертификата обязательно нужно задать для серверного сертификата в openssl.cnf параметр subjectAltName=IP:<external_IP>

Настройка демона StrongSwan

Установка StrongSwan легко происходит из репазитория, либо из исходников.
Вот так должен выглядеть файл /etc/strongswan.conf:

charon {   load = curl test-vectors aes des sha1 sha2 md5 pem pkcs1 gmp random x509 revocation hmac xcbc cmac ctr ccm gcm stroke kernel-netlink socket-default updown eap-identity } 

Основные настройки должны быть выполнены в файле /etc/ipsec.conf
Секция config setup, которая определяет базовые параметры:

config setup          strictpolicy=no        charonstart=yes        plutostart=no            charondebug="ike 2, knl 3, cfg 0" 

Секция conn, в которой настраиваются соединения

conn %default  / определяет базовые параметры всех IPSEC-соединений      ikelifetime=60m      keylife=20m      rekeymargin=3m      keyingtries=1      dpdaction=restart      dpdelay=30s      dpdtimeout=180s conn rw / название IPSEC-соединения   left=<external_IP> / адрес внешнего интерфейса   leftsubnet=<subnet/prefix> / подсеть, к которой мы даем доступ   leftid=<external_IP>   leftcert=/etc/ipsec.d/certs/servercert.pem / говорим какой сертификат использовать для установки IKE SA   leftauth=pubkey / говорим, что мы авторизуемся у клиента с помощью сертификата RSA   right=%any / к нам можно подключиться с любого IP   rightauth=eap-mschapv2    rightsendcert=never   rightsourceip=<subnet/prefix>  / из этой подсети будет выдаваться IP-адрес для клиента   auto=add / подключение будет инициироваться клиентом   keyexhcnage=ikev2   type=transport 

Так же нам нужно указать в файле /etc/ipsec.secrets файл открытого ключа для сертификата шлюза и учетки для EAP-пользователей

: RSA /etc/ipsec.d/private/serverkey.pem "password" ivan : EAP "pass1" max : EAP "pass2" 

Приведенные выше настройки хранятся в файле /etc/ipsec.conf

Настройка клиента

В качестве клиента может использоваться Windows 7 или любой девайс под управлением ОС Android с установленным приложением StrongSwan VPN Client
Настройка клиента состоит из следующих пунктов:

  1. Импорт сертификата СА на клиент
  2. Настройка клиента
  3. Запуск клиента

Для Android в общем то все тоже самое.

Заключение

После того как настроили клиента и сервер можно перезапустить StrongSwan на сервере, делается это командой ipsec restart и пробовать подключиться клиентом. В случае успеха на шлюзе при выводе команды ipsec statusall состояние подключения будет в статусе established и будут весело бегать пинги между клиентом и сервером.
Чуть не забыл, чтобы у клиента был доступ к локальным ресурсам из подсети которая определяется в параметре leftsubnet нужно будет настроить маршрутизацию соответствующим образом и правила межсетевого экранирования (iptables).
Так же возможно использование StrongSwan для реализации L2TP over IPSEC (IKEv1), вероятно про это напишу позднее.

ссылка на оригинал статьи http://habrahabr.ru/post/177547/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *