LINUX.ORG.RU
ФорумAdmin

IPSec с аутентификацией по сертификатам и AAA сервером

 , , ,


0

2

Доброго времени суток. Попал в дебри IPsec и разных методов аутентификации, хотелось бы помощи в выборе направления, куда копать дальше.

Была задача организовать IPsec VPN для Apple-iOS пользователей с использование «VPN On Demand », VPN сервер должен работать на Debian или Ubuntu. iOS позволяет такое делать только для VPN c аутентификацией по сертификатам.

Решение взяли стандартное: в качестве IKE сервера использовали strongSwan 5.1.2, создали CA сертификат, серверный сертификат (подписанный CA) и сертификат для каждого клиента (подписанные CA). Для того что б использовать только сертификаты для аутентификации клиентов использовали xauth-noauth strongSwan plugin. Схема многими, в принципе, была описана.

Сейчас появилось новое требование поднять несколько серверов с общей базой пользователей и вести учет их активности.

Просится использовать FreeRADIUS для акаунтинга.

StrongSwan может его использовать в режиме IKEv1 только c Xauth и передает на него только username/password, а не сертификаты.

Можно ли RSA аутентификацию на RADIUS перенести с IKEv1 или IKEv2?

Сейчас копаю в сторону IKEv2 + EAP-TLS. Это правильное направление? iOS 8 уже может IKEv2.

Также смотрел в сторону VICI strongSwan, но кажется оно в моей задаче помочь не сможет...

Могу ошибаться, но по моему вы хотите какое-то 'масло масленное'. У вас ведь и так сертификаты проверяются в рамках PKI; смысл их передавать еще куда-то еще (на RADIUS). Смысл xauth в том что вводится дополнительный фактор аутентификации. В вашей ситуации, как я понял, RADIUS нужен только для возможности учета. С этой точки зрения, ему надо либо передавать стандартно логин/пасс, либо нечто другое. Но я не уверен что оно в принципе умеет rsa. Я бы попробовал посмотреть можно ли отправить ему нечто из сертификата, например значение СommonName.

trancefer ★★
()
Ответ на: комментарий от trancefer

Смысл в передаче сертификатов на RADIUS в том, что бы иметь только один Certificate Revocation List для пользователей которым больше нельзя подключаться. Без этого нужно обновлять CRL на каждом VPN сервере отдельно, а это выглядит не очень красиво.

Еще нужен контроль сессий - один пользователь может иметь только одну VPN сессию.

greendev5
() автор топика

Если у тебя компания большая. Мне кажется, что будет сложно админить все эти ключи.

Почему не привязать к Acitve Directory авторизацию? Тем более не очень понимаю, как ты будешь активность юзеров смотреть на радиусе? И что ты называешь активностью факт коннекта или смореть куда ходят?

pic0
()
Ответ на: комментарий от pic0

Такой вариант не подойдет. Мы еще используем IPsec/L2tp для большинства устройств, просто IPsec нужен только для iOS «VPN On Demand», прикручивать Active Directory для этого не хочется.

greendev5
() автор топика
Ответ на: комментарий от pic0

Там есть возможность запускать «VPN On Demand» - то есть при обращении к выбраному хосту или при любой другой сетевой активности, автоматически создается VPN подключение (без участия пользователя на ввод параметров) и трафик идет через него. Но такая возможность есть только при VPN с аунтентификацией по сертификатам и без использования username/password. С L2tp это сделать нельзя никак, в L2tp вроде логин только по username/password (хотя это может быть и особенность стандартных VPN утилит в iOS, MacOS X и Windows).

greendev5
() автор топика
Ответ на: комментарий от greendev5

Но такая возможность есть только при VPN с аунтентификацией по сертификатам и без использования username/password

Ну не знаю. Автоматически подключаться к VPN должна быть функция в Андройде есть такое.

pic0
()
Ответ на: комментарий от pic0

Насколько я понимаю под Apple-iOS имплементация IPSec смотрит в строну Cisco, например при IKEv1 iOS использует Xauth в обезательном порядке, еще там много странностей, одна из которых - атоматическое подключение к VPN реализовано только через «VPN On Demand». Вот в этом то и проблема.

greendev5
() автор топика
Ответ на: комментарий от greendev5

Я бы спросил на яблочном форуме, как они решают такую проблему. Наверняка софтинка есть.

pic0
()

Есть три разных способа решения вашей проблемы:

1) Использовать EAP-TLS и отдавать сертификат Radius. Не всегда подходит, работает только с EAP-TLS.

2) Использовать Radius Accounting, анализировать START-пакет (например, поле User-Name), и либо принимать, либо отвергать начало аккаунтинга. strongSwan умеет закрывать SA, если аккаунтинг провалился.

3) Вызывать скрипт на каждое подключение. strongSwan умеет.

ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Спасибо, за ответ.

Пока, что вижу такие варианты решения:

1. Через RADIUS accounting без RADIUS auth.

Если подключить eap-radius plugin и поставить ему accounting = yes, но не использовать rightauth=eap-radius в ipsec.conf, то strongSwan посылает только accounting сообщения на RADIUS. Вот пример начала accounting:

Acct-Status-Type = Start
Acct-Session-Id = «1434531934-1»
NAS-Port-Type = Virtual
Service-Type = Framed-User
NAS-Port = 1
NAS-Port-Id = «ios-ikev1-fakexauth»
NAS-IP-Address = <nas_ip>
Called-Station-Id = «<nas_ip>[4500]»
Calling-Station-Id = «<client_ip>[4500]»
User-Name = «C=CH, O=strongSwan, CN=myemail@mail.com»
Framed-IP-Address = 172.20.1.1
NAS-Identifier = «strongSwan»

Из User-Name можно вытянуть CN клиентского сертификата, и в зависимости от этого отвергать или принимать accounting message.

2. Через скрипты, которые вызывает strongSwan после установки подключения. Можно в этом скрипте говорить с RADIUS и проверять пользователя на возможность доступа.

Оба эти метода немного костыльны - так как accounting/auth происходит уже после того как пользователь получил IP на VPN сервере.

Тут можно отзывать сертификаты пользователей через CLR, но этот CLR нужно будет пушить на каждый VPN сервер. Я так понимаю что CLR может быть только на одном сервере, используя это https://wiki.strongswan.org/projects/strongswan/wiki/Curl. Но про этот Plugin я нашел очень мала документации и примеров - буквально крохи.

С моей точки зрения, самым правильным решением будет использовать eap-tls с ikev2. А ikev2 умеет только iOS 8.

Я нашел статью http://habrahabr.ru/company/ruvpn/blog/180817/, где авторы ruVPN пишут что используют strongSwan+FreeRadius для авторизации. Их VPN работает на iOS 6 и 7, а значит они используют ikev1. Они могут использовать 2 приведенных выше метода или кастумизировали strongSwan/FreeRadiu?

greendev5
() автор топика
Ответ на: комментарий от greendev5

Я не знаю, что использовали они, но я использую как раз Radius Accounting, работает неплохо, хоть и костыль.

ValdikSS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.