О чем пойдет речь?
В данной статье я расскажу о том как настроить на 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.
Схема моего стенда и решения на рисунке ниже.
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
Настройка клиента состоит из следующих пунктов:
Для Android в общем то все тоже самое.
Заключение
После того как настроили клиента и сервер можно перезапустить StrongSwan на сервере, делается это командой ipsec restart и пробовать подключиться клиентом. В случае успеха на шлюзе при выводе команды ipsec statusall состояние подключения будет в статусе established и будут весело бегать пинги между клиентом и сервером.
Чуть не забыл, чтобы у клиента был доступ к локальным ресурсам из подсети которая определяется в параметре leftsubnet нужно будет настроить маршрутизацию соответствующим образом и правила межсетевого экранирования (iptables).
Так же возможно использование StrongSwan для реализации L2TP over IPSEC (IKEv1), вероятно про это напишу позднее.
Автор: msamoylov