В Apple iOS есть функция "VPN On Demand". С помощью этой функции VPN-подключение устанавливается всякий раз, когда устройство пытается подключиться к определенным доменам или к Интернету вообще. iOS поддерживает "VPN On Demand" только с аутентификацией на основе сертификатов.
Для предоставления услуги «VPN по запросу» для пользователей iOS моего офисного VPN-сервера мы используем следующее решение IPSec:
- Ubuntu 14.04 — ОС VPN-сервера.
- strongSwan 5.1.2 — демон IKE.
- Для каждого пира я генерирую индивидуальный закрытый ключ и выпускаю соответствующий сертификат. Клиент (iOS IKEv1) аутентифицируется с помощью RSA и Xauth.
- iPhone и iPad не могут использовать IPSec без Xauth (так называемый Cisco IPSec). А "VPN On Demand" не может использовать профиль VPN, требующий ввода пароля, но имя пользователя/пароль обычно требуются для Xauth. Чтобы решить эту проблему, мы используем xauth-noauth - поддельный аутентификатор Xauth, который допускает любое имя пользователя и пароль. В этом случае мы используем только клиентский сертификат для его аутентификации.
Это решение отлично работает для нас. Но у нас появилось новое требование - настроить несколько VPN-серверов с одной базой данных пользователей и вести учет использования VPN.
Это обычная практика для этой задачи — использовать RADIUS, и strongSwan имеет плагин для этого. Но strongSwan с IKEv1/Xauth использует имя пользователя/пароль для аутентификации пользователя на внутреннем сервере RADIUS. имя пользователя/пароль не используются в моем решении.
Мои вопросы:
- Как использовать учет Radius, если Xauth не использует имя пользователя/пароль?
- Можно ли делегировать проверку подлинности RSA серверу RADIUS?
PS Большинство моих клиентов iOS используют iOS 8, которая поддерживает IKEv2. В IKEv2 есть EAP-TLS. Можно ли использовать EAP-TLS для делегирования проверки аутентификации RSA серверу RADIUS? Или я копаю не в том направлении с EAP-TLS?
PSPS Второе, что я хотел сказать, это про интерфейс VICI strongSwan. Я предполагал получать уведомления о каждом новом подключении IPSec, но, похоже, VICI работает по-другому.
решение1
Учет RADIUS врадиус-eapплагин не требует аутентификации XAuth. Фактически он работает с любым типом аутентификации, через RADIUS или нет, пока клиент запрашивает виртуальный IP-адрес (для IKEv2 даже это требование может быть отключено). Однако с некоторыми клиентами IKEv1 возникают некоторые проблемы в случае повторной аутентификации (см. проблему#937и связанные с ними).
EAP-TLS позволяет делегировать аутентификацию сертификатов для клиентов IKEv2 серверу AAA, но это не связано с учетом RADIUS.
решение2
Благодаря ecdsa я нашел несколько решений своей проблемы.
- Используйте учет RADIUS без аутентификации RADIUS.
Если плагин eap-radius включен с опциейучет = да, strongSwan отправит сообщение RADIUS для начала учета, даже если eap-radius не используется в файле ipsec.conf. В моем случае это сообщение RADIUS выглядит так:
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, [email protected]"
Framed-IP-Address = 172.20.1.1
NAS-Identifier = strongSwan
Я могу получить сертификат CN из сообщения, и мне этого достаточно, чтобы сделать правильный учет. Если я хочу отклонить доступ для некоторого CN, я могу просто отклонить сообщение RADIUS от stronSwan, и соединение ipsec будет прервано.
- Проведите учет и проверку доступа ввверх внизскрипт вместо использования RADIUS.
Также я хотел бы использовать плагин strongSwan curl для доступа к списку отозванных сертификатов. Но я обнаружил отсутствие документации по этому плагину. Я что-то упустил?