Перейти к основному содержимому

Настройка двухфакторной аутентификации Outlook Web Access (OWA)

Общая информация

В статье описывается настройка Outlook Web Access (OWA) для удаленного доступа к почте на сервере Exchange c двухфакторной аутентификацией.

Возможные способы аутентификации:

  • Мобильное приложение MultiFactor
  • СМС
  • Биометрия
  • Аппаратные OTP токены
  • Приложения OTP: Google Authenticator или Яндекс.Ключ
  • Telegram
Обратите внимание

Если вы используете ADFS для доступа к OWA, переходите к инструкции по настройке ADFS.

Видео-презентация

Возможности

  • Защита доступа вторым фактором проверки подлинности при каждом входе и через настраиваемый промежуток времени.
  • Самостоятельная настройка второго фактора пользователем при первом входе.
  • Избирательное включение второго фактора на основе принадлежности к группе в Active Directory.
  • Журнал доступа.

Схема работы

  1. Пользователь открывает сайт Outlook Web Access;
  2. OWA запрашивает первый фактор аутентификации: логин и пароль, проверяет корректность указанных данных и создает пользовательскую сессию;
  3. Компонент MultiFactor.IIS.Adapter проверяет, что сессия авторизована и переадресовывает пользователя на второй фактор аутентификации;
  4. После успешного прохождения второго фактора, пользователь возвращается на сайт OWA и продолжает работу.

Для настройки второго фактора аутентификации вам потребуется установить и настроить на сервере Exchange компонент MultiFactor.IIS.Adapter. Компонент разработан и поддерживается компанией Мультифактор, распространяется бесплатно вместе с исходным кодом. Актуальная версия находится на GitHub: код и сборка.

лицензия

Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.

Требования для установки

  1. Компоненту необходим доступ к хосту api.multifactor.ru по TCP порту 443 (TLS) напрямую или через HTTP прокси;
  2. Outlook Web Access должен работать с валидным SSL сертификатом.
  3. На сервере должно быть установлено правильное время.

Настройка Мультифактора

  1. Зайдите в систему управления Мультифактором, далее в раздел "Ресурсы" и создайте новый сайт Outlook Web Access;

Настройка OWA

  1. Скопируйте файл Bin\MultiFactor.IIS.Adapter.dll в директорию
    C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa\Bin;

  2. Скопируйте файл mfa.aspx в директорию
    C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa;

  3. Отредактируйте файл
    C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Owa\web.config:

    • сперва сделайте резервную копию
    • в раздел <modules> первой строкой добавьте компонент
    <add type="MultiFactor.IIS.Adapter.Owa.Module, MultiFactor.IIS.Adapter" name="MFA" />
    • в раздел <appSettings> добавьте параметры компонента
    <add key="multifactor:api-url" value="https://api.multifactor.ru" />
    <add key="multifactor:api-key" value="API Key из настроек Мультифактора" />
    <add key="multifactor:api-secret" value="API Secret из настроек Мультифактора" />
    • сохраните и закройте.
  4. Для избирательного запроса второго фактора на основе принадлежности к группе Active Directory, добавьте в конфигурацию параметры

    <add key="multifactor:active-directory-2fa-group" value="owa-2fa" />
    <add key="multifactor:active-directory-2fa-group-membership-cache-timeout" value="15"/>
    • первый параметр — название группы в AD, у которой требуется запрашивать второй фактор. Группа может быть вложенной, то есть содержать в себе другие группы;
    • второй параметр — промежуток времени (в минутах), через который обновляется информация о вхождении пользователя в группу. Для оптимизации производительности, значение по-умолчанию составляет 15 минут (но можно поставить 0).
  5. Для работы с API Мультифактора через HTTP Proxy, добавьте в конфигурацию параметр

    	<add key="multifactor:api-proxy" value="http://proxy:3128" />

reCAPTCHA OWA

Если вы не вносили изменения на страницу входа в OWA (настройка цветов, шрифтов, иконок или другая модификация), то следуйте инструкции по замене страницы входа. В противном случае, см. раздел обновление страницы входа.

Замена страницы входа

  1. Выберите капчу для подключения. Настоящая инструкция предлагает на выбор три варианта: Yandex SmartCaptcha, Google reCAPTCHA v2 и Google reCAPTCHA v3.
  2. Создайте пару ключей (ключ клиента\сайта и ключ сервера\секретный) в личном кабинете для выбранной капчи, укажите корректный домен, на котором устанавливается капча:
  3. Отредактируйте файл recaptcha.aspx в соответствующей директории архива, добавив свой секретный ключ:

    OWA_captcha

<% @ Page AspCompat=True Language = "VB" %>
<%
Dim strPrivateKey As String = "SECRET_KEY"
Dim strResponse = Request ("response")
Dim ObjWinHTTP As Object
objWinHTTP = Server.CreateObject ("WinHTTP.WinHTTPRequest.5.1")
objWinHTTP.Open ("POST", "https://www.google.com/recaptcha/api/siteverify", False)
objWinHTTP.SetRequestHeader ("Content-type", "application/x-www-form-urlencoded")
Dim strData As String = "secret=" & strPrivateKey & "Gresponse=" & strResponse
objWinHTTP.Send (strData)
Dim strResponseText = objWinHTTP.ResponseText
%>
  1. Скопируйте файл recaptcha.aspx в директорию OWA: C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth
  2. Сделайте бэкап файла logon.aspx из директории C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth
  3. Отредактируйте файл logon.aspx в соответствующей директории архива. Для этого найдите фразу «SITE_KEY» и замените все её вхождения на свой ключ.
  4. Замените файл logon.aspx в директории C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth на файл logon.aspx с вашим ключом. Перезагрузка Microsoft Exchange Server не требуется.
  5. ВАЖНО. Установка обновлений Microsoft Exchange Server может привести в перезаписи страницы logon.aspx и удалению recaptcha.aspx.

Обновление страницы входа

Выполните пункты 1-5 инструкции выше. ВМЕСТО п.6. выполните следующие действия. Внесите изменения в файл: C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\logon.aspx

Найдите разметку

<form action="/owa/auth.owa"

и замените её на

<form action=" "

Найдите разметку

<div onclick="clkLgn()"

и замените её на

<div onclick="recaptchaClkLgn()"

Найдите разметку

<div><input id="passwordText"

и на следующей строчке

вставьте код (предварительно заменив все вхождения ключа SITE_KEY): а) для подключения Yandex SmartCaptcha

<script type="text/javascript">
function recaptchaClkLgn()
{
var oReq = new XMLHttpRequest();
var sResponse = document.getElementsByName("smart-token")[0].value;
var sData = "response=" + sResponse;
oReq.open("GET", "/owa/auth/recaptcha.aspx?" + sData, false);
oReq.send(sData);
if (oReq.responseText.indexOf("ok") != -1)
{
document.forms[0].action = "/owa/auth.owa";
clkLgn();
}
else
{
alert("Invalid CAPTCHA response");
}
}
</script>
<script src="https://smartcaptcha.yandexcloud.net/captcha.js" async defer></script>
<div class="smart-captcha" data-sitekey="SITE_KEY"></div>

б) для подключения Google reCAPTCHA v2

<script type="text/javascript">
function recaptchaClkLgn()
{
var oReq = new XMLHttpRequest();
var sResponse = document.getElementById("g-recaptcha-response").value;
var sData = "response=" + sResponse;
oReq.open("GET", "/owa/auth/recaptcha.aspx?" + sData, false);
oReq.send(sData);
if (oReq.responseText.indexOf("true") != -1)
{
oReq.open("GET", "/owa/auth/mfa.aspx?" + sData, false);
document.forms[0].action = "/owa/auth.owa";
clkLgn();
}
else
{
alert("Invalid CAPTCHA response");
}
}
</script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="SITE_KEY"></div>

в) для подключения Google reCAPTCHA v3

<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script type="text/javascript">
function recaptchaClkLgn()
{
var oReq = new XMLHttpRequest();
grecaptcha.ready(function() {
grecaptcha.execute('SITE_KEY', {action: 'submit'}).then(function(token) {
console.log("v3 Token: " + token);
var sData = "response=" + token;
oReq.open("GET", "/owa/auth/recaptcha.aspx?" + sData, false);
oReq.send(sData);
if (oReq.responseText.indexOf("true") != -1)
{
oReq.open("GET", "/owa/auth/mfa.aspx?" + sData, false);
document.forms[0].action = "/owa/auth.owa";
clkLgn();
}
else
{
alert("Invalid CAPTCHA response");
}
})
});
}
</script>

После этого замените файл logon.aspx в директории C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth на модифицированный файл logon.aspx с вашим ключом. Перезагрузка Microsoft Exchange Server не требуется.

ВАЖНО

Установка обновлений Microsoft Exchange Server может привести в перезаписи страницы logon.aspx и удалению recaptcha.aspx.

Если не работает

Если вы проверяете работу второго фактора OWA на тестовом сервере, ящик пользователя должен быть в базе, смонтированной на том же сервере, где применяются настройки MFA.

Дополнительная информация

  • Компонент необходимо установить на все сервера кластера.
  • Компонент одинаково хорошо работает с прямым доступом к серверу IIS и через прокси, например, nginx.
  • Компонент не влияет на первый фактор аутентификации, а именно проверку логина и пароля пользователя.
  • Двухфакторная проверка подключается к OWA. Работа с ECP, MAPI и ActiveSync остается без изменений.
  • Компонент повторно запрашивает второй фактор через настраиваемый промежуток времени и закрывает оставленные пользователями сессии. Интервал времени настраивается в групповой политике системы управления Мультифактором.

Дополнительные рекомендации по защите Exchange

  1. Своевременно устанавливайте все обновления безопасности;
  2. Закройте внешний доступ к ECP, EWS, MAPI, IMAP — все эти протоколы должны работать только из внутренней сети / VPN. Оставьте только OWA и ActiveSync;
  3. Защитите доступ к OWA вторым фактором;
  4. Настройте управление ActiveSync устройствами с помощью портала самообслуживания.

Вопросы и ответы

В: Как в качестве логина пользователя передавать UPN в Мультифактор?

О: По умолчанию, логин пользователя передается в Мультифактор в формате, в котором его вводит пользователь на странице логина.

Можно разрешить ввод логина пользователем в любом формате, но включить преобразование логина в UserPrincipalName (UPN) при отправке запроса доступа в Мультифактор с помощью следующей настройки:

<add key="multifactor:use-upn-as-identity" value="true"/>

Смотрите также: