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

Содержание

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

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

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

В данной реализации Remote Access VPN для подключения к шлюзу клиент используется протокол EAP (RFC 3748) совместно с Microsoft CHAP version 2 для аутентификации.
Этот протокол используется в VPN – клиенте Windows 7 Agile. В дополнении к идентификации IKEv2 по IP-адресу клиент использует EAP идентификацию по определенному на шлюзе имени и паролю.
Шлюз проходит аутентификацию на клиенте с помощью сертификата RSA.
Схема моего стенда и решения на рисунке ниже.
StrongSwan. Remote Access VPN с использованием MSCHAPv2-EAP
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), вероятно про это напишу позднее.