Многофакторная авторизация Azure в среде Cisco и FortiGate

VPN с одним паролем в 2022-м уже не проходил аудит — а прямой «FortiGate → Azure MFA» без промежуточного RADIUS-сервера в экосистеме Microsoft не существует. Рабочая схема, которую я разворачивал не раз: FortiGate как NAS, Cisco ISE как policy/RADIUS proxy, два Microsoft NPS с Azure MFA Extension, AD для первого фактора, Azure MFA для второго. Ниже — пошаговый runbook без воды.

Архитектура

Схема взаимодействия Cisco ISE и Azure MFA

Цепочка запросов:

  1. VPN-клиент отправляет credentials на FortiGate.
  2. FortiGate шлёт RADIUS Access-Request на Cisco ISE.
  3. ISE проксирует запрос на Microsoft NPS (можно зарегистрировать два NPS для HA).
  4. NPS проверяет логин/пароль в Active Directory (первичная аутентификация).
  5. NPS через Azure MFA Extension инициирует второй фактор; Azure MFA общается с пользователем напрямую (Authenticator, SMS, звонок).
  6. При успехе Access-Accept идёт обратно: NPS → ISE → FortiGate → клиент получает туннель.

Два NPS лучше ставить в разные ДЦ — если один падает, RADIUS продолжает работать через второй. На ISE оба регистрируются как external RADIUS servers.

Общая логика Azure MFA: документация Microsoft.

Что понадобится

Компонент Минимум
Azure AD Лицензии с MFA (или Security Defaults / P1/P2)
Windows Server 2× NPS в разных ДЦ (можно VM)
Cisco ISE PSN с RADIUS; лицензия Advantage или выше
FortiGate SSL-VPN или IPsec VPN, RADIUS client
Сеть FortiGate → ISE → NPS: UDP/1812 (auth), при accounting — 1813

Шаг 1. Azure AD и MFA

  1. В Azure PortalAzure Active DirectorySecurityMFA — включите MFA для нужных пользователей (per-user или через Conditional Access).
  2. Убедитесь, что учётные записи VPN-пользователей синхронизированы (Azure AD Connect) или созданы в cloud-only AD.
  3. Зарегистрируйте методы MFA (Microsoft Authenticator предпочтительнее SMS).

Без зарегистрированного метода второй фактор зависнет — пользователь получит reject или timeout.

Шаг 2. Microsoft NPS + Azure MFA Extension

На каждом сервере NPS (повторить на втором):

2.1. Роль NPS

Install-WindowsFeature NPAS -IncludeManagementTools

2.2. Azure MFA NPS Extension

  1. Скачайте NPS Extension for Azure MFA с сайта Microsoft.
  2. Установите на сервер NPS.
  3. Запустите конфигурацию от имени администратора:
cd 'C:\Program Files\Microsoft\Azure MFA\Config'
.\AzureMfaNpsExtn.ps1

Скрипт запросит credentials Azure AD (Global Admin или Application Admin) и зарегистрирует extension.

2.3. RADIUS clients (FortiGate / ISE)

В NPSRADIUS Clients and ServersRADIUS Clients добавьте:

Client Secret Назначение
IP Cisco ISE (PSN) общий secret ISE проксирует запросы от FortiGate
IP FortiGate (опционально) тот же или отдельный если ISE не проксирует, а FortiGate бьёт напрямую

В типовой схеме клиентом NPS является ISE, не FortiGate.

2.4. Политики NPS

  1. Connection Request Policies — разрешить запросы от ISE (Calling Station ID / Client Friendly Name).
  2. Network Policies — аутентификация через Windows Authentication (AD), grant access.
  3. В Azure MFA Extension registry (HKLM\SOFTWARE\Microsoft\AzureMfa) проверьте BypassMFADUoT и REQUIRE_USER_MATCH — для VPN обычно REQUIRE_USER_MATCH=1.

Перезапустите службу Network Policy Server после установки extension.

Шаг 3. Cisco ISE

3.1. External RADIUS servers (NPS)

AdministrationNetwork ResourcesExternal RADIUS Servers:

Поле Значение
Name NPS-DC1, NPS-DC2
Host IP каждого NPS
Shared Secret тот же, что в NPS RADIUS Clients
Authentication Port 1812
Timeout 30–60 сек (MFA!)
Connection Attempts 2–3

Добавьте оба сервера в RADIUS Server Sequence для failover.

3.2. Network Device (FortiGate)

Work CentersNetwork AccessNetwork Devices:

  • Name: FGT-VPN
  • IP Address: management/source IP FortiGate для RADIUS
  • Shared Secret: secret для FortiGate ↔ ISE
  • Device Type: Fortinet:FortiGate

3.3. Policy Set

Создайте Policy Set для VPN/RADIUS:

  1. Conditions: Device IP Equals FGT-VPN (или RADIUS Service-Type).
  2. Authentication PolicyUse → External RADIUS Server Sequence (NPS).
  3. Authorization — профиль доступа (VLAN, dACL, или PermitAccess для VPN).

В Live LogsRADIUS включите мониторинг до первого успешного логина.

Шаг 4. FortiGate

4.1. RADIUS server

config user radius
    edit "ISE-RADIUS"
        set server "10.x.x.x"
        set secret ENC <encrypted>
        set auth-type pap
    next
end

auth-typepap или mschapv2 в зависимости от того, что принимает ISE/NPS. Для большинства VPN-клиентов MS-CHAPv2; если ISE настроен на PAP proxy — используйте PAP.

4.2. User group

config user group
    edit "VPN-RADIUS"
        set member "ISE-RADIUS"
    next
end

4.3. VPN portal / IPsec

VPNSSL-VPN Settings (или IPsec tunnel):

  • Authentication/Portal Mapping или Peer Options → группа VPN-RADIUS.
  • Убедитесь, что клиент запрашивает username/password (не certificate-only, если MFA на user credentials).

Шаг 5. Таймауты — критично для MFA

По умолчанию FortiGate ждёт ответ RADIUS 5 секунд. Push в Authenticator занимает 15–60 секунд — без правки таймаута VPN стабильно падает с timeout.

Параметр remoteauthtimeout на FortiGate

GUI: System → Settings → remoteauthtimeout60–90 (диапазон 1–300, default 5).

CLI:

config system global
    set remoteauthtimeout 90
end

Согласуйте таймауты на всех звеньях:

Узел Параметр Рекомендация
FortiGate remoteauthtimeout 60–90 сек
Cisco ISE External RADIUS timeout ≥ 60 сек
NPS не ниже FortiGate default часто достаточен
VPN-клиент idle timeout не обрывать до завершения MFA

Проверка

  1. FortiGate: diagnose debug application radiusd -1 + diagnose debug enable — видны Access-Request/Accept.
  2. ISE: Live Log — запрос от FGT, proxy к NPS, result Accept/Reject.
  3. NPS: Event Viewer → Custom ViewsServer RolesNetwork Policy and Access Services.
  4. Azure: Sign-in logs — MFA requirement satisfied.

Тестовый сценарий: пользователь с зарегистрированным Authenticator → VPN login → push → Accept → туннель up.

Типовые проблемы

Симптом Куда смотреть
Timeout через ~5 сек remoteauthtimeout на FortiGate
Access-Reject без MFA NPS policy, AD credentials, extension не running
MFA не приходит пользователь не enrolled; проверьте Azure MFA Extension logs
ISE видит запрос, NPS — нет shared secret, firewall UDP/1812, wrong NAS IP
Работает через один NPS, второй — нет RADIUS Server Sequence priority, secret на втором NPS

Итог

Схема не самая короткая, зато переиспользует ISE как единую точку policy для VPN и проводного доступа, а Azure MFA остаётся там, где ему место — на NPS Extension. Главный практический вывод: увеличьте RADIUS timeout на FortiGate до 90 секунд до первого теста, иначе будете отладку MFA проводить вслепую.

Об авторе Sergey Bezpalov

Senior Solutions Architect с более чем 20-летним опытом в инженерном лидерстве в ИТ: центры обработки данных, гибридные облака, сети, информационная безопасность, VoIP, унифицированные коммуникации (UC/UCS). Работает с кросс-функциональными командами и техническими специалистами. Solutions Architect, ИТ-советник, AI-евангелист, предприниматель.
Запись опубликована в рубрике Azure, Cisco, Fortinet, Microsoft, Office 365, Security с метками , , , , , , , , , , . Добавьте в закладки постоянную ссылку.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.