Публикация Exchange Server с помощью ADFS / Web Application Proxy

 Публикация Exchange Server поможет в решении задачи удаленного доступа к почтовой инфраструктуре из сети Интернет. Разнообразие средств довольно велико. Среди них присутствуют как коммерческие решения, так и решения с открытым кодом. В рамках данной статьи, будет рассмотрен вариант использования служб федерации Active Directory (ADFS) и их компонента Web Application Proxy.

Публикация Exchange Server с помощью ADFS / Web Application Proxy

Итак, в контексте задачи публикации Exchange Server, компоненты служб федерации будут выполнять следующее:

  1. ADFS ответственен за аутентификацию пользователей в веб-приложениях OWA и ECP. На основе доменной аутентификации будут создаваться пользовательские токены безопасности, которым Exchange Server будет доверять.
  2. На плечи Web Application Proxy возложена задача проксирования запросов аутентификации на сервера ADFS фермы и проксирование https запросов от клиентов к Exchange инфраструктуре. Другими словами, WAP выступает в качестве реверс-прокси сервера.

К процессу публикации стоит относить не только OWA и ECP, но и другие веб сервисы Exchange. Например, веб-каталоги ActiveSync, EWS и другие.  Для их публикации будет использоваться Pass-through метод преаутентификации службами ADFS.

Подготовка служб ADFS к публикации Exchange

Первый шаг состоит в подготовке служб ADFS к публикации Exchange. Но, перед тем как начинать, в Exchange инфраструктуре должны быть корректно настроены URL адреса веб-каталогов OWA и ECP. 

В самом ADFS потребуется создать два новых отношения доверия с проверяющей стороной (Relying Party Trust) для OWA и ECP. В этом поможет PowerShell скрипт, который необходимо выполнить на master ноде:

$owaURL="https://mail.ithelpspb.blogspot.com/owa" # URL веб-каталога OWA

$ecpURL="https://mail.ithelpspb.blogspot.com/ecp" # URL веб-каталога ECP



$IssuanceAuthorizationRules=@' 

    @RuleTemplate = "AllowAllAuthzRule"


    => issue(Type = "http://schemas.microsoft.com/authorization/claims/permit",

    Value = "true");

'@



    $IssuanceTransformRules=@'

    @RuleName = "ActiveDirectoryUserSID"

    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]


    => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = ";objectSID;{0}", param = c.Value); 


    @RuleName = "ActiveDirectoryGroupSID"

    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] 


    => issue(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"), query = ";tokenGroups(SID);{0}", param = c.Value); 


    @RuleName = "ActiveDirectoryUPN"

    c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] 


    => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"), query = ";userPrincipalName;{0}", param = c.Value);

'@

 Add-ADFSRelyingPartyTrust -Name "Outlook Web App" -Enabled $true -WSFedEndpoint $owaURL -Identifier $owaURL -IssuanceTransformRules $IssuanceTransformRules -IssuanceAuthorizationRules $IssuanceAuthorizationRules

 Add-ADFSRelyingPartyTrust -Name "Exchange Control Panel" -Enabled $true -WSFedEndpoint $ecpURL -Identifier $ecpURL -IssuanceTransformRules $IssuanceTransformRules -IssuanceAuthorizationRules $IssuanceAuthorizationRules

Не забудьте поменять переменные URL адресов OWA и ECP на собственные.

Результат его работы:


Интеграция Exchange инфраструктуры с ADFS

На каждом сервере Exchange c Client Access Services необходимо выполнить еще один PowerShell скрипт:

$ADFSSigningCertificateThumbprint="2F4A8553226E3AC3BCDBA171A4F73E9B23A486DD" # Thumbprint

$owaURL="https://mail.ithelpsb.blogspot.com/owa"

$ecpURL="https://mail.ithelpsb.blogspot.com/ecp"

$ADFSIssuerURL="https://sts.ithelpsb.blogspot.com/adfs/ls/" # URL ADFS фермы


$uris = @($owaURL,$ecpURL)

Set-OrganizationConfig -AdfsIssuer $ADFSIssuerURL -AdfsAudienceUris $uris -AdfsSignCertificateThumbprint $ADFSSigningCertificateThumbprint

Get-EcpVirtualDirectory | Set-EcpVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false

Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -AdfsAuthentication $true -BasicAuthentication $false -DigestAuthentication $false -FormsAuthentication $false -WindowsAuthentication $false

Обратите внимание, что указаны переменные ADFSSigningCertificateThumbprint и ADFSIssuerURL. Значение первой можно получить в оснастке ADFS:


Открыв свойства сертификата ADFS Signing

Этот сертификат необходимо экспортировать и импортировать в доверенные ЦС каждого Exchange сервера.

Значение второй переменной можно получить подставить FQDN фермы ADFS. Выполняем его в Exchange Management Shell.


Перегружаем IIS командой IISReset.

После перезагрузки веб сервера и его инициализации можно выполнить проверку работоспособности. Перейдем на URL ECP.



Автоматически отработает перенаправление на страницу входа ADFS, где необходимо пройти аутентификацию.

В случае если ADFS Signing сертификат не был импортирован в доверенные ЦС Exchange сервера, будет получена ошибка WrongAudienceUriOrBadSigningCert:




После добавления сертификата ошибка пропала, и аутентификация в Exchange с помощью ADFS получилась.



Публикация Exchange с помощью Web Application Proxy

Завершающим шагом будет публикация веб-каталогов Exchange сервера в сеть Интернет. Перейдем на сервер Web Application Proxy и откроем оснастку управления. В ней необходимо запустить мастер добавления новой публикации и выбрать тип ADFS:


Далее, выбираем тип преаутентификации MSOFBA:


На следующей странице выбираем из списка Exchange Control Panel:


На завершающем этапе, добавляем конфигурацию публикации:


Аналогичным образом настраиваем OWA.

Оставшиеся каталоги (RPCEWSOABAutodiscover), будут опубликованы так же, но с отличием в методе преаутентификации. Они не могут использовать аутентификацию на основе утверждений, поэтому будет использоваться Passthrough. Единственное исключение составит каталог Autodiscover, так как в его случае публикация осуществляется отдельного поддомена autodiscover. Это требование работы механизма, заложенного в процесс автообнаружения конфигурации Exchange.

В перечисленных выше веб-каталогах отсутствует каталог, отвечающий за подключение мобильных клиентов по протоколу ActiveSync. Начиная с версии ADFS 4.0 (Windows Server 2016), в функционале служб федерации появилась поддержка метода аутентификации HTTP Basic. Этот факт позволит выполнять преаутентификацию клиентов службами федерации, а не перенаправлять не аутентифицированные запросы прямиком на Exchange инфраструктуру. О том как это настроить, в скором времени, выйдет отдельная статья.

На этом все. Если у вас возникли какие-либо вопросы, пожалуйста, пишите в комментарии.