Windows Server’da Web Application Proxy Kurulumu ve Yapılandırması
Kurumsal ağlarda “dışarıdan erişim” meselesi her zaman biraz baş ağrısı olmuştur. VPN mi kuruyoruz, reverse proxy mi koyuyoruz, DMZ mi tasarlıyoruz? Microsoft bu soruya kendi ekosisteminde bir cevap vermiş: Web Application Proxy (WAP). Active Directory Federation Services ile entegre çalışan, ön yüzde oturarak iç uygulamaları güvenli biçimde dışa açan bu rol, doğru yapılandırıldığında hem güçlü hem de yönetilebilir bir çözüm sunuyor. Ben de bu yazıda gerçek bir kurulum senaryosu üzerinden WAP’ı sıfırdan nasıl ayağa kaldırdığımı anlatacağım.
Web Application Proxy Nedir, Ne Değildir?
Önce bir yanlış anlamayı giderelim: WAP, genel amaçlı bir reverse proxy değildir. Nginx veya HAProxy ile karıştırmayın. WAP, özellikle Microsoft’un kimlik doğrulama altyapısıyla (AD FS) entegre çalışmak üzere tasarlanmıştır. Bunu bilmeden kuruluma girişirseniz, “bu kadar mı?” diye sorabilirsiniz, çünkü sağladığı HTTP yönlendirme yetenekleri kısıtlıdır. Ama AD FS’i olan ve dışarıdan Outlook Web Access, SharePoint veya özel web uygulamalarına erişim sağlamak isteyen bir ortam için WAP gerçekten işe yarar bir çözümdür.
WAP temel olarak şunu yapar: Dışarıdan gelen HTTPS isteklerini karşılar, isteğe bağlı olarak AD FS üzerinden ön kimlik doğrulaması uygular ve trafiği iç ağdaki hedef sunucuya iletir. Bu sayede iç sunucunuz doğrudan internete açılmamış olur.
Ortam Gereksinimleri
Benim senaryomda şu ortam vardı:
- İç ağda AD DS domain controller:
corp.example.comdomaini - AD FS sunucusu:
adfs.corp.example.com(Windows Server 2019) - WAP sunucusu: DMZ’de, domain’e üye olmayan Windows Server 2019
- Yayınlanacak uygulama:
owa.example.comüzerinden OWA erişimi - SSL sertifikası: Wildcard
*.example.comsertifikası
WAP sunucusunun domain üyesi olmasına gerek yoktur ve genellikle olmaması önerilir. DMZ’ye konulan bir makine olarak, iç domain ile sadece belirli portlar üzerinden iletişim kurması yeterlidir.
Açık olması gereken portlar şunlardır:
- 443 (HTTPS): WAP’tan AD FS’e ve yayınlanan uygulamalara
- 80 (HTTP): Sertifika doğrulama (CRL) için isteğe bağlı
- 49443: AD FS sertifika kimlik doğrulaması için
AD FS Tarafında Hazırlık
WAP kurulmadan önce AD FS tarafının hazır olması gerekiyor. AD FS kurulumunu bu yazıda detaylandırmıyorum ama WAP ile ilgili birkaç kritik nokta var.
İlk olarak AD FS servis sertifikasının WAP sunucusundan erişilebilir olması gerekiyor. AD FS metadata endpoint’ine WAP sunucusundan ulaşabilmeli:
# WAP sunucusunda PowerShell ile test edin
Invoke-WebRequest -Uri "https://adfs.example.com/federationmetadata/2007-06/federationmetadata.xml" -UseBasicParsing
Eğer bu komut hata veriyorsa, DNS çözümlemesi veya sertifika güveni konusunda sorun vardır. WAP sunucusunda hosts dosyasına kayıt eklemeniz gerekebilir.
AD FS servis hesabının da düzgün çalıştığından emin olun:
# AD FS sunucusunda servis durumunu kontrol edin
Get-Service adfssrv | Select-Object Status, DisplayName
Get-AdfsSyncProperties
WAP Rolünün Kurulumu
WAP sunucusuna geçiyoruz. Rol kurulumu PowerShell ile son derece temiz yapılıyor:
# Remote Access rolünü ve WAP role service'ini yükle
Install-WindowsFeature Web-Application-Proxy -IncludeManagementTools
# Kurulumun tamamlandığını doğrula
Get-WindowsFeature Web-Application-Proxy
Kurulum birkaç dakika içinde tamamlanıyor. Sunucunun yeniden başlatılması genellikle gerekmez ama ben her ihtimale karşı yeniden başlatıyorum, özellikle production ortamında.
SSL Sertifikasının Hazırlanması
WAP kurulumunda sertifika yönetimi en kritik adımlardan biri. Hem AD FS servis sertifikası hem de yayınlanan uygulamalar için sertifika gerekiyor.
Sertifikanızı PFX formatında WAP sunucusuna aktarın ve yükleyin:
# Sertifikayı Local Machine store'a import edin
Import-PfxCertificate -FilePath "C:Certswildcard_example_com.pfx" `
-CertStoreLocation "Cert:LocalMachineMy" `
-Password (ConvertTo-SecureString -String "SertifikaParolasi" -AsPlainText -Force)
# Sertifikanın thumbprint'ini alın, sonra kullanacaksınız
Get-ChildItem Cert:LocalMachineMy | Where-Object {$_.Subject -like "*.example.com"} |
Select-Object Subject, Thumbprint
Thumbprint değerini bir yere not edin, WAP yapılandırmasında kullanacaksınız.
WAP’ın AD FS’e Bağlanması (Trust Oluşturma)
Bu adım en kritik kısım. WAP, AD FS ile güven ilişkisi kurmak için Install-WebApplicationProxy cmdlet’ini kullanıyor. Bu komut, AD FS yönetici kimlik bilgileri istiyor:
# AD FS sertifika thumbprint'ini önce öğrenin
# Bu komutu AD FS sunucusunda çalıştırın
Get-AdfsCertificate -CertificateType Token-Signing | Select-Object Thumbprint
# WAP sunucusunda proxy'yi yapılandırın
Install-WebApplicationProxy `
-CertificateThumbprint "BURAYA_ADFS_SERTIFIKA_THUMBPRINT" `
-FederationServiceName "adfs.example.com" `
-FederationServiceTrustCredential (Get-Credential)
Komut çalıştırıldığında AD FS yönetici hesabının kimlik bilgileri istenecek. Bu hesabın AD FS’te yönetici yetkisi olması gerekiyor.
Eğer her şey yolunda giderse şuna benzer bir çıktı alırsınız:
Message Result
------- ------
The configuration was completed successfully. Success
Yapılandırmanın başarılı olduğunu doğrulayın:
Get-WebApplicationProxyConfiguration
Bu komut WAP’ın bağlandığı AD FS sunucusunu ve genel yapılandırma bilgilerini gösterecek.
İlk Uygulama Yayını: OWA
Şimdi asıl işe geliyoruz. OWA’yı dışarıya açacağız. WAP’ta uygulama yayınlamak için Add-WebApplicationProxyApplication cmdlet’ini kullanıyoruz.
OWA için AD FS ön kimlik doğrulaması kullanmadan (pass-through) basit yayın:
Add-WebApplicationProxyApplication `
-Name "Outlook Web Access" `
-ExternalPreAuthentication PassThrough `
-ExternalUrl "https://owa.example.com/" `
-ExternalCertificateThumbprint "WILDCARD_SERTIFIKA_THUMBPRINT" `
-BackendServerUrl "https://mail.corp.example.com/owa/" `
-BackendServerCertificateValidation None
Buradaki parametreleri açıklayayım:
- -Name: Yönetim konsolunda görünecek isim
- -ExternalPreAuthentication:
PassThroughkimlik doğrulamayı uygulamaya bırakır,ADFSforRichClientsveyaADFSWAP’ın kendisinin doğrulama yapmasını sağlar - -ExternalUrl: Dışarıdan erişilecek URL
- -ExternalCertificateThumbprint: HTTPS için kullanılacak sertifika
- -BackendServerUrl: İç ağdaki gerçek uygulama adresi
- -BackendServerCertificateValidation: İç sertifika doğrulama ayarı
AD FS Ön Kimlik Doğrulamalı Yayın
Daha güvenli bir senaryo için AD FS ön kimlik doğrulamasını kullanalım. Bu durumda kullanıcı, uygulamaya ulaşmadan önce AD FS üzerinden kimlik doğrulaması yapıyor:
# Önce AD FS'te Relying Party Trust oluşturulmuş olmalı
# Aşağıdaki komutu AD FS sunucusunda çalıştırın
Add-AdfsRelyingPartyTrust `
-Name "SharePoint Intranet" `
-Identifier "https://intranet.example.com/" `
-IsEnabled $true
# WAP sunucusunda AD FS ön kimlik doğrulamalı yayın
Add-WebApplicationProxyApplication `
-Name "SharePoint Intranet" `
-ExternalPreAuthentication ADFS `
-ADFSRelyingPartyName "SharePoint Intranet" `
-ExternalUrl "https://intranet.example.com/" `
-ExternalCertificateThumbprint "WILDCARD_SERTIFIKA_THUMBPRINT" `
-BackendServerUrl "https://sp.corp.example.com/" `
-BackendServerCertificateValidation None `
-EnableHTTPRedirect $true
Bu yapılandırmada kullanıcı https://intranet.example.com/ adresine gittiğinde önce AD FS login sayfasına yönlendiriliyor, kimlik doğrulamasından sonra SharePoint’e erişim sağlanıyor.
Mevcut Yayınları Yönetmek
Yapılandırılan uygulamaları listelemek ve yönetmek için:
# Tüm yayınları listele
Get-WebApplicationProxyApplication
# Belirli bir yayının detaylarını gör
Get-WebApplicationProxyApplication -Name "Outlook Web Access"
# Yayını güncelle (örneğin backend URL değişti)
Set-WebApplicationProxyApplication `
-ID (Get-WebApplicationProxyApplication -Name "Outlook Web Access").ID `
-BackendServerUrl "https://mail2.corp.example.com/owa/"
# Yayını kaldır
Remove-WebApplicationProxyApplication -Name "Outlook Web Access"
Yaygın Sorunlar ve Çözümleri
Sertifika Güven Sorunları
WAP sunucusu AD FS sertifikasına güvenmiyorsa bağlantı kurulamaz. İç CA’nın kök sertifikasını WAP sunucusunun Trusted Root Certification Authorities store’una eklemeniz gerekir:
# İç CA kök sertifikasını import edin
Import-Certificate -FilePath "C:CertsInternalCA_Root.cer" `
-CertStoreLocation "Cert:LocalMachineRoot"
# Sertifika zincirini test edin
$cert = Get-ChildItem Cert:LocalMachineMy | Where-Object {$_.Subject -like "*adfs*"}
Test-Certificate -Cert $cert -Policy SSL
AD FS Erişilebilirlik Testi
WAP’tan AD FS’e bağlantı sorunları yaşıyorsanız ayrıntılı test yapın:
# TCP bağlantı testi
Test-NetConnection -ComputerName "adfs.example.com" -Port 443
# AD FS endpoint erişim testi
try {
$response = Invoke-WebRequest `
-Uri "https://adfs.example.com/adfs/ls/idpinitiatedsignon.htm" `
-UseBasicParsing `
-TimeoutSec 10
Write-Host "Status: $($response.StatusCode)"
} catch {
Write-Host "Hata: $($_.Exception.Message)"
}
WAP Servis Durumu Kontrolü
Sorun gidermede ilk bakılacak yer WAP servisleri ve event log’ları:
# WAP ile ilgili servislerin durumu
Get-Service -Name "appproxysvc", "appproxytrapsvc" |
Select-Object Name, Status, StartType
# Event log'lardan son hataları çek
Get-EventLog -LogName "Application" -Source "*Web Application Proxy*" `
-Newest 20 -EntryType Error, Warning |
Select-Object TimeGenerated, EntryType, Message
Yük Dengeleme ve Yüksek Erişilebilirlik
Production ortamında tek WAP sunucusu kabul edilemez. En az iki WAP sunucusu kurup önlerine bir yük dengeleyici koymanız gerekiyor. WAP, durum bilgisi (stateless) tutmadığı için yük dengeleme oldukça basit.
İkinci WAP sunucusunu yapılandırmak birincisiyle aynı adımları izliyor. Dikkat edilmesi gereken nokta, her iki sunucunun da aynı sertifikaları kullanması ve AD FS’e bağlı olması.
Yük dengeleyici konfigürasyonunda şunlara dikkat edin:
- Sticky session gerekli değil, WAP stateless çalışıyor
- Health check için
/adfs/probeendpoint’ini kullanabilirsiniz - SSL offloading yapılmamalı, WAP’ın kendi SSL’i sonlandırması gerekiyor
Monitoring ve Loglama
WAP operasyonel sağlığını izlemek için PowerShell ile basit bir kontrol scripti:
# WAP sağlık durumu özet raporu
$apps = Get-WebApplicationProxyApplication
$config = Get-WebApplicationProxyConfiguration
Write-Host "=== WAP Durum Raporu ===" -ForegroundColor Cyan
Write-Host "AD FS Sunucusu: $($config.ADFSUrl)" -ForegroundColor Green
Write-Host "Yayınlanan Uygulama Sayısı: $($apps.Count)" -ForegroundColor Green
foreach ($app in $apps) {
Write-Host "`nUygulama: $($app.Name)" -ForegroundColor Yellow
Write-Host " Harici URL: $($app.ExternalUrl)"
Write-Host " Backend URL: $($app.BackendServerUrl)"
Write-Host " Ön Doğrulama: $($app.ExternalPreAuthentication)"
# Backend'e basit bağlantı testi
$uri = [System.Uri]$app.BackendServerUrl
$test = Test-NetConnection -ComputerName $uri.Host -Port $uri.Port -WarningAction SilentlyContinue
$status = if ($test.TcpTestSucceeded) {"ERISILEBILIR"} else {"ERISILEMEZ"}
Write-Host " Backend Durum: $status" -ForegroundColor $(if ($test.TcpTestSucceeded) {"Green"} else {"Red"})
}
Bu scripti Task Scheduler’a ekleyip düzenli aralıklarla çalıştırabilir, sonuçları e-posta ile gönderebilirsiniz.
Güvenlik Önerileri
WAP kurarken aklınızda bulundurmanız gereken birkaç kritik güvenlik noktası:
- WAP sunucusunu domain’e eklemeyin: DMZ’de domain dışı bırakın, güvenlik saldırı yüzeyini azaltır
- Minimal açık port: WAP sunucusuna sadece 443 ve gerekiyorsa 80 açık olsun, yönetim erişimi için ayrı bir out-of-band kanal kullanın
- Sertifika rotasyonu: Sertifika yenileme tarihlerini takviminize ekleyin, WAP’ta sertifika güncellemesini unutmak servisi komple çöküyor
- AD FS servis hesabı: Minimal yetkiyle çalışan dedicated bir servis hesabı kullanın
- Güncel tutun: WAP ve AD FS için security update’leri düzenli uygulayın, bu bileşenler doğrudan internete maruz kalıyor
Sertifika yenileme için küçük bir hatırlatıcı script:
# Sertifika son kullanma tarihlerini kontrol et
Get-ChildItem Cert:LocalMachineMy |
Where-Object {$_.NotAfter -lt (Get-Date).AddDays(60)} |
Select-Object Subject, Thumbprint, NotAfter |
Format-Table -AutoSize
Bu komutu scheduled task olarak çalıştırıp 60 gün öncesinden uyarı almanızı öneririm. Geceleri sertifika süresi dolmuş WAP yüzünden OWA’ya giremeyen kullanıcılar zevkli bir deneyim değil.
Sonuç
Web Application Proxy, Microsoft’un altyapısı üzerine kurulu ortamlar için gayet mantıklı bir dış erişim çözümü. AD FS ile entegrasyon sayesinde merkezi kimlik doğrulaması, çok faktörlü kimlik doğrulama ve Conditional Access politikaları uygulanabiliyor. Üstelik yönetimi tamamen PowerShell üzerinden yapılabildiği için otomasyon ve CI/CD süreçlerine entegre etmek de mümkün.
Bununla birlikte WAP’ın sınırlarını bilmek önemli. Genel amaçlı bir reverse proxy değil, Microsoft ekosistemi için tasarlanmış bir bileşen. Eğer ortamınız tamamen Microsoft altyapısına dayanıyorsa WAP güçlü bir seçenek. Karma ortamlar veya Microsoft dışı kimlik sağlayıcılarıyla çalışıyorsanız, Nginx, HAProxy veya cloud tabanlı uygulama proxy çözümlerini değerlendirmeniz daha yerinde olabilir.
Kurulum ve yapılandırma sürecinde en çok zaman harcanan yerler genellikle sertifika sorunları ve AD FS güven yapılandırması oluyor. Bunları doğru kurduğunuzda geri kalanı oldukça akıcı ilerlediğini göreceksiniz.
