Bu yazımızda On-Premise Exchange sunucuları için Hybrid Modern Authentication nasıl yapılandırılır, bunun üzürinde duracağız. Şirket içi Basic Authentication yerine Hybrid Modern Authentication ile daha güvenli hale gelebiliriz. Bu şekilde MFA özelliğini hybrid yapılarda sadece bulut kullanıcılarımızda değil aynı zamanda On-Premise Exchange veya Skype kullanıcılarımızda da kullanabiliriz. Bununla birlikte Azure Koşullu Erişim politikalarından faydalanabiliriz.
Bu proje için bazı ön gereksinimlerimiz olacak. Aşağıdakilerin tamamlandığından emin olun.
-Exchange 2013-2016-2019 sunucular için dsteklenir.
-Entra Connect ile Local AD nin Entra ID ye sync edilmesi gerekmektedir.
-Exchange Hybrid Configuration Wizard ile hybrid yapının kurulması gerekmektedir.
Exchange sunucular için tüm güncellemelerin yapılması gerekmektedir.
Modern Authentication bize daha güveli bir erişim sağlar
Entra ID de bulunana koşullu erişim politikalarından faydalanmamızı sağlar.
Hybrid Modern Authentication Topology aşağıdaki gibi olacaktır.
- On-Premise Exchange kullanocıları Outlook istemcisini başlatıyor ve Exchange sunucuuna bağlanıyor. Bağlantı ilk önve evoSTS (a Security Token Service used by Microsoft Entra ID) Url ine yönlendiriliyor.
evoSTS Entra ID tarafıından sağlanan bir Güvenlik hizmetidir.
- Outlook Entra ID üzerinde bulunan kimlik ile iletişim kurar ve Modern Kimlik Doğrulaması isteği görüntülenir. Kullanıcı Exchange Online uygulaması için ayarlanan Conditional Access politikaları ile kimlik doğrulaması yapar.
- Kimlik doğrulama başarılı olduktan sonra Kullanıcı Access Token ve Refresh Token alır.
- Kullanıcı Access Token’ı Exchange sunucusuna iletir ve posta kutusuna erişmiş olur.
Resim-1
Şimdi Modern Kimlik Doğrulması işlemlerine başlayalım.
Öncelikle mevcut duruma bir göz gezdirelim.
İlk önce On-Premise Exchange sunucusunda posta kutusu olan kullanıcımızın Outlook bağlantılarına bakalım.
Resim-2
Yukarıda görüldüğü gibi Outlook Connection Status’a baktığımızda Authn (kimlik doğrulama) sütununda tüm bağlantılar Nego* olarak gürünmektedir. Kırmızı ile işaretli sütun.
Modern kimlik doğrulama işlemi bittiğinde Auth sütununda kimlik doğrulama bağlantısını Bearer* olarak göreceğiz.
Şimdi modern kimlik doğrulamasını etkinleştirelim.
Öncelikle Microsoft 365 Portal’ına giriyoruz.
Settings bölümüne girelim.
Org Settings Menüsü ile devam ediyoruz.
Listeden Modern Authhentication’a girelim.
Daha sonra Turn modern authentication for Outlook 2013 for Windows and later (recommended) seçeneğini seçiyoruz ve kaydediyoruz.
Resim-3
Şimdi Exchange sunucusundan virtual directory’leri çekeceğiz. Bunun için aşağıdaki dört komutu çalıştırıyoruz.
Get-MapiVirtualDirectory | fl server,*url*
Get-WebServicesVirtualDirectory | fl server,*url*
Get-ClientAccessServer | fl Name, AutodiscoverServiceInternalUri
Get-OABVirtualDirectory | fl server,*url*
Resim-4
Azure Uygulama Register
Şimdi Azure portala uygulama register edeceğiz.
Ilk önce install komutlarımızı power shell de çalıştırıyoruz ve Graph modüllerini yüklüyoruz.
Install-Module Microsoft.Graph -Force
Install-Module Microsoft.Graph.Beta -AllowClobber -Force
Resim-5
Global Admin bilgilerimizi giriyoruz ve ilgili permissionlar için Accept ediyoruz.
Şİmdi uygulamayı Entra ID ye register ediyoruz.
- Entra Admin Center’a giriyoruz.
- Identity altında Application altında App Registrations’a geliyoruz
- New Registration
Resim-6
- Bir İsim belirliyoruz.
- Accounts in any organizational directory (Any Azure AD directory – Multitenant) and personal Microsoft accounts seçeneğini seçiyoruz.
- Register
Resim-7
Application ID ve Tenant ID yi not ediyoruz. MS Graph’a bağlanırken ihtiyacımız olacak.Şimdi oluşturduğumuz GraphAutomation uygulamasına API izinleri ekleyeceğiz.
- API Permissions’a giriyoruz.
- Add a Permissions seçiyoruz.
- Microsoft API lerini ve Microsoft Graph’I seçiyoruz.
Resim-8
- Application Permission seçiyoruz.
- Ardından read.all için arama yapıyoruz.
- User alından read.all seçiyoruz.
- Add Permission
Resim-9
- Grand Admin consent tıklıyoruz ve Yes
Resim-10
Artık uygulamayı register ettik ve API izinlerini verdik. Şimdi kimlik doğrulama yapabilmemiz için iki yöntemimiz var.
- Sertifika
- Client Secret
Biz otomatik imzalı bir sertifika oluşturacağız. Bu sertifikayı diğer sistemlerde kullanmak için ihtiyacınız olabilir.
Herhangi bir windows sunucu üzerinde powershell de aşağıdaki komutu girin.
$mycert = New-SelfSignedCertificate -DnsName “cuneytorhun.com.tr” -CertStoreLocation “cert:\LocalMachine\My” -NotAfter (Get-Date).AddYears(5) -KeySpec KeyExchange -FriendlyName “MSGraph Automation”
- Sertifikayı .cer olarak export ediyoruz.
$mycert | Export-Certificate -FilePath “C:\temp\MSGraphAutomationCert.cer”
Resim-11
Sertifikayı .pfx olarak convert ediyoruz. Çünkü .pfx formatın ihiyacımız olacak.
$mycert | Export-PfxCertificate -FilePath “C:\temp\MSGraphAutomationCert.pfx” -Password $(ConvertTo-SecureString -String “P@ssw0Rd1234” -AsPlainText -Force)
Resim-12
Şimdi sertifkayı Register ettiğimiz GraphAutomation uygulamasına yükleyeceğiz. Aşağıdaki adımları yapalım.
- Certificates & secret
- Certificates
- Upload Certificate
- .cer uzantısı ile oluşturduğumuz sertifikayı upload ediyoruz ve Add diyoruz.
Resim-13
Artık sertifikayı görebiliyoruz.
Resim-14
Şimdi sertifika tabanlı kimlik doğrulama için Microsoft Graph’ a bağlanacağız.
Uygulama register ederken elde ettiğimiz ClientID ve TenantID yi ve oluştuduğumuz sertifikanın thumbprint ini aşağıdaki komutta ilgili yerlere yazıyoruz ve komutu çalıştırıyoruz. Bu komutu PowerShell ISE de çalıştırıyoruz.
$ClientId = “3a5e2ed4-c169-4de1-b6f6-ad88643b79e1”
$TenantId = “0fff1aa4-e766-4657-adec-97230115b3b5”
$CertificateThumbprint = “EC232D80A7E7B98E2875844AD3485C50605363DE”
Connect to Microsoft Graph
Connect-MgGraph -ClientId $ClientId -TenantId $TenantId -CertificateThumbprint $CertificateThumbprint
Resim-15
Get-MgUser komutu ile Tenant üzerindeki kullanıcılar çağırıyoruz. Bu kullanıcılara Entra ID ile sync olan On-Premise kullanıcılar da dahil.
Resim-16
Şimdi Exchange SPN lerini alacağız. Aşağıdaki komutu giriyoruz ve sonrasında global admin bilgilerini giriyoruz.
Connect-MgGraph -Scopes “Application.Read.All”, “Application.ReadWrite.All”
00000002-0000-0ff1-ce00-00000000000000000 uygulamasının buluttaki Exchange ile ilgili URL’lerini almak için Get-MgServicePrincipal cmdlet’ini çalıştırın. Aşağıdaki komutu aynı pencerede çalıştırın.
(00000002-0000-0ff1-ce00-00000000000000000 Exchange Online’ın cloud daki App ID’si)
Get-MgServicePrincipal -Filter “AppId eq ‘00000002-0000-0ff1-ce00-000000000000′” | select -ExpandProperty ServicePrincipalNames
Komut sonrası verilen çıktıyı bi notepad’e not edin.
Resim-17
MAPI, HTTP, EWS, OAB, ActiveSync ve Autodiscover kayıtlarını listede görmüyorsanız aşağıdki şekilde yine Microsoft Graph PowerShell’de ekleyebilirsiniz.
$x = Get-MgServicePrincipal -Filter “AppId eq ‘00000002-0000-0ff1-ce00-000000000000′”
$x.ServicePrincipalNames += “https://mail.cuneytorhun.com.tr/”
$x.ServicePrincipalNames += “https://autodiscover.cuneytorhun.com.tr/”
Update-MgServicePrincipal -ServicePrincipalId $x.Id -ServicePrincipalNames $x.ServicePrincipalNames
Resim-18
Şimdi Exchange ile ilgili SPN leri doğrulayalım.
Aşağıdaki komutu çalıştırıyoruz.
Get-MgServicePrincipal -Filter “AppId eq ‘00000002-0000-0ff1-ce00-000000000000′” | select -ExpandProperty ServicePrincipalNames
Resim-19
Autodiscover.cuneytorhun.tr ve mail.cuneytorhun.com.tr url lerini de eklemiş olduk.
Şimdi OAuth virtual directory leri doğrulayalım.
Resim-20
OAuth herhangi bir Exchange sunucusunda ve virtual directory lerde eksikse tamamlanması gerekmektedir.
Şimdi EvoSTS kimlik doğrulama objesinin olup olmadığını doğruluyoruz.
Resim-21
True olarak görüyoruz ve doğrulamayı gerçekleştiriyoruz.
Evet şimdi sıra geldi Hybrid Modern Authentication’ı etkinleştirmeye.
Microsoft Graph PowerShell de aşağıdaki komutu yazıyoruz.
Get-MgOrganization | select DisplayName, Id
Resim-22
Daha sonra aşağıdaki iki komudu giriyoruz.
Set-AuthServer -Identity “EvoSts – bbef53d6-7206-45de-b012-b41af27c70c3” -IsDefaultAuthorizationEndpoint $true
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true
(İdentity kısmına iki önceki komuttan aldığımız kendi EvoSTS mizi giriyoruz.)
Daha sonra aşağıdaki komtu yazıyoruz.
Set-AuthServer -Identity “EvoSts – bbef53d6-7206-45de-b012-b41af27c70c3” -DomainName “cuneytorhun.com.tr” -IsDefaultAuthorizationEndpoint $true
Set-OrganizationConfig -OAuth2ClientProfileEnabled $true
IIS Yeniden başlatıyoruz. IISReset
Aşağıdaki Register Kaydı ile Outlook Client’ı modern kimlik doğrrulaması için force ediyoruz.
AlwaysUseMSOAuthForAutoDiscover değeri varsa 1 yapıyoruz yoksa yeni bir tane oluşturuyoruz.
Resim-23
Eğer Outlook 2013 kullanıyorsanız aşağıdaki komutları çalıştırarak iki reg kaydı daha eklemeniz gerekecek.
Şimdi modern kimlik authentication’ı doğruluyalım.
Outlook uygulamasını yeniden başlatıyoruz.
Artık Auth sütununun Bearer* olduğunu doğruluyoruz.
Resim-24
Tüm bu yaptığımız işlemler sonucunda Outlook Hybrid Moder Authentication ile bağlanmaya başladı. Fakat OWA veya ECP henüz bu özellikten faydalanamıyor. Şimdi OWA ve ECP için gerekli configleri yapalım.
Öncelikle Exchange Power Shell ile OWA ve ECP Url lerini çağorıyoruz.
Get-OwaVirtualDirectory -ADPropertiesOnly | fl server, name, *url*
Get-EcpVirtualDirectory -ADPropertiesOnly | fl server, name, *url*
Resim-25
Tekrar Microsoft Graph Power Shell’e bağlanıyoruz ve OWA ve ECP Url lerini yanıt URL leri olarak ekliyoruz.
Connect-MgGraph -Scopes “User.Read”, “Application.ReadWrite.All”
Global Admin bilgilerini giriyoruz ve izinleri Accept ediyoruz.
Resim-26
Aşağıdaki komutu giriyoruz ve OWA / ECP Url lerini uygulama yanıt Url’lerine ekliyoruz. Komuttaki domain adını kendi domain adınızla değiştirmeyi unutmayın
$servicePrincipal = Get-MgServicePrincipal -Filter “AppId eq ‘00000002-0000-0ff1-ce00-000000000000′”
$replyUrlsToBeAdded = @(
“https://mail.cuneytorhun.com.tr/owa”,
“https://mail.cuneytorhun.com.tr/ecp”
)
$servicePrincipal.ReplyUrls += $replyUrlsToBeAdded
Update-MgServicePrincipal -ServicePrincipalId $servicePrincipal.Id -AppId “00000002-0000-0ff1-ce00-000000000000” -ReplyUrls $servicePrincipal.ReplyUrls
Şimdi Exchange yanıt Url’lerini doğrulayalım.Aşağıdaki komutu giriyoruz.
(Get-MgServicePrincipal -Filter “AppId eq ‘00000002-0000-0ff1-ce00-000000000000′”).ReplyUrls
Resim-27
Doğrulamayı alıyoruz.
Şimdi indirilebilir Domainler için geçersiz kılmayı set ediyoruz.Exchange sunucuda indirilebilir domainlere sahipsek bu adımı yapıyıruz aksi tktirde devam ediyoruz. Bu indirme etki alanları bir Güvenlik açığı için yapılandırılan bir durumdur. Benim ortamın son güncellemeleri aldığı için bu işlemi yapmıyorum. Aşağıdaki linktendaha ayrıntılı bilgi alabilir ve ilgili Güvenlik güncellmesini indirebilirsiniz.
https://www.alitajran.com/cve-2021-1730-vulnerability/
Şimdi aşağıdaki komıtlar ile virtual directory kimlik doğrulama yöntemlerinin durumlarını alacağız.
Get-OwaVirtualDirectory -Server “EX01-2019” | fl server, *auth*
Get-EcpVirtualDirectory -Server “EX02-2019” | fl server, *auth*
Resim-28
Şİimdiki adımda OWA ve ECP için diğer kimlik doğrulama yöntemlerini devre dığı bırakıyoruz.
Get-OwaVirtualDirectory -Server “EXCH1” | Set-OwaVirtualDirectory -AdfsAuthentication $false –BasicAuthentication $false –FormsAuthentication $false –DigestAuthentication $false
Get-EcpVirtualDirectory -Server “EXCH1” | Set-EcpVirtualDirectory -AdfsAuthentication $false –BasicAuthentication $false –FormsAuthentication $false –DigestAuthentication $false
Get-OwaVirtualDirectory -Server “EXCH1” | Set-OwaVirtualDirectory -AdfsAuthentication $false –BasicAuthentication $false –FormsAuthentication $false –DigestAuthentication $false
Get-EcpVirtualDirectory -Server “EXCH1” | Set-EcpVirtualDirectory -AdfsAuthentication $false –BasicAuthentication $false –FormsAuthentication $false –DigestAuthentication $false
Resim-29
IIS restart ediyoruz.
Artık OWA ve ECP için modern kimlik doğrulamasını etkinleştirebiliriz.
Get-EcpVirtualDirectory -Server “EXCH1” | Set-EcpVirtualDirectory -OAuthAuthentication $true
Get-OwaVirtualDirectory -Server “EXCH1” | Set-OwaVirtualDirectory -OAuthAuthentication $true
Get-EcpVirtualDirectory -Server “EXCH1” | Set-EcpVirtualDirectory -OAuthAuthentication $true
Get-OwaVirtualDirectory -Server “EXCH1” | Set-OwaVirtualDirectory -OAuthAuthentication $true
Şimdi OWA ve ECP için testlerimizi yapalım.
OWA da oturum açmaya kalktığımızda bizi Outlook’ta otuum açamamızı belirten bir ekran göreceğiz.
Resim-30
Kullanıcı erişim bilgilerini doldurduktan sonra OWA veya ECP ye modern kimlik doğrulaması ile yönlendirileceğiz.
Resim-31
Artık OWA ya da Modern Kimlik Doğrulaması ile giriş yapmış olduk.
Umarım faydalı bir yazı olmuştur. Projelerinizde destek olmasını dilerim.
Kaynak: https://www.mshowto.org