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.com domaini
  • 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.com sertifikası

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: PassThrough kimlik doğrulamayı uygulamaya bırakır, ADFSforRichClients veya ADFS WAP’ı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/probe endpoint’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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir