IIS Manager ile Uzaktan Sunucu Yönetimi

Yıllarca IIS yönettim ve şunu söyleyeyim: sunucu başında oturmadan remote yönetim yapabilmek, hem zaman kazandırır hem de o “acaba ne bozdum” stresini büyük ölçüde azaltır. IIS Manager’ın uzaktan yönetim özelliği tam da bu ihtiyacı karşılıyor, ama doğru kurulmadığında insan saatlerce neden bağlanamadığını anlayamıyor. Bu yazıda sıfırdan, gerçekten çalışan bir kurulumu adım adım anlatacağım.

IIS Remote Management Nedir, Neden Gerekli?

Klasik senaryo şu: production ortamında 5-6 IIS sunucunuz var, hepsine RDP açmak hem güvenlik riski hem de zaman kaybı. IIS Manager’ın uzaktan yönetim bileşeni olan IIS Management Service (WMSvc) sayesinde doğrudan kendi makinenizden tüm sunuculara bağlanabiliyorsunuz. RDP’ye gerek yok, sunucuya fiziksel erişim şart değil.

Bunun ötesinde, geliştiricilere tam sunucu yetkisi vermeden sadece kendi site veya uygulama havuzlarını yönetme yetkisi tanıyabiliyorsunuz. Bu özellik özellikle shared hosting ortamlarında veya birden fazla ekibin aynı IIS üzerinde çalıştığı senaryolarda çok değerli.

Sunucu Tarafında Kurulum

Management Service Rolünü Yüklemek

Önce hedef sunucuda IIS Management Service’in kurulu olduğundan emin olmanız gerekiyor. Bu bileşen IIS’in varsayılan kurulumunda gelmiyor, ayrıca eklemeniz gerekiyor.

PowerShell ile kurulum:

Install-WindowsFeature -Name Web-Mgmt-Service

Eğer GUI üzerinden gidecekseniz: Server Manager > Add Roles and Features > Web Server (IIS) > Management Tools > IIS Management Service yolunu izleyin.

Kurulumun başarılı olduğunu doğrulayalım:

Get-WindowsFeature -Name Web-Mgmt-Service | Select-Object Name, InstallState

Çıktıda Installed görüyorsanız devam edebilirsiniz.

Management Service’i Yapılandırmak

Kurulum bitti ama servis henüz başlamıyor ve dinlemiyor. IIS Manager’ı açıp Management Service düğümüne tıkladığınızda aşağıdaki ayarları yapılandırmanız gerekiyor:

Dikkat etmeniz gereken kritik ayarlar:

  • Enable remote connections: Bu seçeneği mutlaka işaretleyin, varsayılan olarak kapalı geliyor
  • Identity Credentials: Burada iki seçenek var

Windows credentials only: Sadece Windows domain/local hesaplarıyla bağlantıya izin verir – Windows credentials or IIS Manager credentials: IIS’e özgü kullanıcı hesapları da kullanılabilir

  • SSL Certificate: Management Service HTTPS üzerinden çalışır, varsayılan self-signed sertifika başlangıç için yeterli
  • IP Address: Hangi IP’den dinleyeceğini belirleyin, genellikle “All Unassigned” bırakılır
  • Port: Varsayılan 8172, değiştirmenizi öneririm

PowerShell ile bu ayarları registry üzerinden de yapabilirsiniz:

Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
    -Name "EnableRemoteManagement" -Value 1

Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
    -Name "Port" -Value 8172

Ayarları yaptıktan sonra servisi başlatıp otomatik başlayacak şekilde ayarlayın:

Start-Service WMSvc
Set-Service WMSvc -StartupType Automatic

Servis durumunu kontrol edelim:

Get-Service WMSvc | Select-Object Name, Status, StartType

Güvenlik Duvarı Kuralları

Servis çalışıyor ama dışarıdan erişilemiyor olabilir. Windows Firewall’da porta izin vermeniz gerekiyor:

New-NetFirewallRule -DisplayName "IIS Management Service" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 8172 `
    -Action Allow `
    -Profile Domain,Private

Eğer production ortamında belirli IP aralıklarından erişime izin vermek istiyorsanız (ki bunu kesinlikle tavsiye ederim):

New-NetFirewallRule -DisplayName "IIS Management Service - Restricted" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 8172 `
    -RemoteAddress "10.0.0.0/8","192.168.1.0/24" `
    -Action Allow `
    -Profile Any

İstemci Tarafında Kurulum

Şimdi yönetim yapacağınız bilgisayara geçiyoruz. Windows 10/11 iş istasyonlarında IIS Manager varsayılan olarak gelmiyor.

Windows 10/11’de IIS Manager’ı yüklemek:

# Önce RSAT araçlarını kontrol edelim
Get-WindowsCapability -Online | Where-Object {$_.Name -like "*IIS*"}

Burada IIS.ManagementConsole veya benzeri bir şey görmüyorsanız:

# Windows Features üzerinden
Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementConsole

Ya da Turn Windows features on or off > Internet Information Services > Web Management Tools > IIS Management Console yolunu kullanabilirsiniz.

İstemci makinede de Management Service Client bileşenini yükleyin:

IIS Manager’ı açtığınızda, bir remote sunucuya ilk bağlanmaya çalıştığınızda eksik bileşenleri otomatik indirip yüklemenizi isteyecek. Bu yüzden internet bağlantınızın olduğundan emin olun. Alternatif olarak Web Deployment Tool paketini yükleyerek bu bağımlılıkları önceden karşılayabilirsiniz.

İstemciden Sunucuya Bağlanmak

Her şey hazır. IIS Manager’ı açın, sol panelde Start Page‘e sağ tıklayın veya File menüsünden Connect to a Server seçeneğini seçin.

Bağlantı sihirbazında:

  • Server name: Sunucunun IP adresi veya hostname’i
  • Site or application: Tüm sunucuya mı yoksa belirli bir siteye mi bağlanmak istiyorsunuz?
  • Credentials: Windows hesabı veya IIS Manager hesabı

İlk bağlantıda self-signed sertifika uyarısı alacaksınız. Bu beklenen bir durum, güvendiğiniz bir ortamda devam edebilirsiniz. Production’da bu sertifikayı domain CA veya güvenilir bir sertifika ile değiştirmenizi öneririm.

Bağlantıyı bir isim vererek kaydedin. Sonraki seferlerde direkt tıklayıp bağlanabilirsiniz.

IIS Manager Credentials ile Yetki Yönetimi

Bu özellik benim en sevdiğim kısım. Geliştiriciye “al sana şifre, gir yönet” demek yerine, sadece ihtiyaç duyduğu siteye erişim yetkisi verebiliyorsunuz.

Önce sunucuda IIS Manager user oluşturalım:

# IIS Management kullanıcısı oluşturmak için WebAdministration modülü
Import-Module WebAdministration

# Kullanıcı oluştur
$password = ConvertTo-SecureString "G3listiricisifre!" -AsPlainText -Force
New-WebMgmtUser -Name "developer01" -Password "G3listiricisifre!"

Şimdi bu kullanıcıya belirli bir siteye erişim yetkisi verelim:

# Kullanıcıya site yetkisi tanımla
Grant-WebMgmtAccess -Name "developer01" -WebSite "MySite" -IsForSite $true

Ya da IIS Manager GUI’sinden: Siteye tıklayın > IIS Manager Permissions > Add User seçeneğiyle aynı işlemi yapabilirsiniz.

Artık developer01 sadece MySite’a bağlanabilir, diğer sitelere dokunamaz. Hem pratik hem de güvenli.

Gerçek Dünya Senaryosu: Çoklu Sunucu Yönetimi

Bir müşterimizde şu yapı vardı: 3 web sunucusu, her birinde 10-15 site, farklı ekipler farklı siteleri yönetiyor. Başta herkes her sunucuya RDP atıyordu, kaos tam anlamıyla. Remote management devreye aldıktan sonra şu yapıyı kurduk:

Her sunucu için ayrı bağlantı profili oluşturduk, isimlerini anlamlı verdik: WEB01-PROD, WEB02-PROD, WEB03-PROD gibi. Bir script ile tüm sunucuların servis durumunu toplu kontrol etmeye başladık:

$sunucular = @("WEB01", "WEB02", "WEB03")

foreach ($sunucu in $sunucular) {
    $durum = Invoke-Command -ComputerName $sunucu -ScriptBlock {
        Get-Service WMSvc | Select-Object Name, Status
        netstat -an | findstr ":8172"
    }
    Write-Host "[$sunucu] WMSvc Durumu: $($durum)"
}

Bu sayede sabah mesaiye gelince tüm remote management servislerinin ayakta olup olmadığını tek script ile kontrol edebiliyorduk.

Sertifika Yönetimi ve Güvenlik Sertleştirmesi

Self-signed sertifika geçici çözümdür. Production ortamında bunu düzgün bir sertifika ile değiştirmeniz gerekiyor. Özellikle birden fazla kişi aynı sunucuya bağlanıyorsa, her seferinde sertifika uyarısını geçmek hem güvenlik açısından kötü bir alışkanlık hem de gereksiz sürtünme yaratıyor.

Domain ortamında internal CA’dan sertifika aldığınızı varsayarak:

# Mevcut sertifikaları listele
Get-ChildItem -Path Cert:LocalMachineMy | Select-Object Subject, Thumbprint, NotAfter

# WMSvc'nin hangi sertifikayı kullandığını gör
Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
    -Name "SslCertificateSHA1Hash"

Yeni sertifikayı bağlamak için:

# Thumbprint'i al
$thumbprint = "BURAYA_SERTIFIKA_THUMBPRINT_GELECEK"

# WMSvc'yi durdur
Stop-Service WMSvc

# Yeni sertifikayı ata
Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
    -Name "SslCertificateSHA1Hash" -Value $thumbprint

# Servisi yeniden başlat
Start-Service WMSvc

Güvenlik için ek önlemler:

  • Varsayılan 8172 portunu değiştirin: Otomatik taramalar genellikle bilinen portları hedef alır. 8172’den farklı bir port kullanmak küçük ama etkili bir önlem.
  • IP kısıtlaması uygulayın: Firewall kuralında sadece yönetim ağından erişime izin verin.
  • IIS Manager credentials kullanıyorsanız güçlü şifre politikası uygulayın: Bu hesaplar Windows politikalarına tabi değil, kendiniz yönetmeniz gerekiyor.
  • Logları takip edin: WMSvc logları %SystemDrive%InetpublogsWMSvc altında tutuluyor.

Bağlantı Sorunlarını Gidermek

“Neden bağlanamıyorum?” sorusu bu kurulumun en sık sorulan sorusu. Sistematik yaklaşalım.

1. Servis çalışıyor mu?

Get-Service WMSvc

Çalışmıyorsa neden başlamadığını event log’dan bakın:

Get-EventLog -LogName System -Source WMSvc -Newest 20

2. Port dinleniyor mu?

netstat -ano | findstr ":8172"
# ya da PowerShell ile
Get-NetTCPConnection -LocalPort 8172

3. Uzaktan porta erişilebiliyor mu?

İstemci makineden test edin:

Test-NetConnection -ComputerName SUNUCU_IP -Port 8172

TcpTestSucceeded: True görüyorsanız ağ tarafı tamam demektir, sorun başka bir yerdedir.

4. EnableRemoteManagement açık mı?

Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
    -Name "EnableRemoteManagement"

Değer 1 olmalı, 0 ise remote bağlantı kapalı demektir.

Sık karşılaştığım başka bir durum: sunucu domain’de, istemci workgroup’ta veya farklı domain’de. Bu durumda Windows credentials yerine IIS Manager credentials kullanmak çok daha az sorun çıkarıyor. Eğer Windows credentials kullanmak zorundaysanız, istemci makineye sunucunun yerel kullanıcı adı ve şifresini credential manager’a eklemeniz gerekebilir.

Toplu Yapılandırma: Birden Fazla Sunucuyu Aynı Anda Hazırlamak

Ortamda 10 sunucu varsa tek tek elle kurmak yerine bu scripti kullanabilirsiniz:

$hedefSunucular = @("WEB01", "WEB02", "WEB03", "WEB04")
$yonetimPort = 8172

foreach ($sunucu in $hedefSunucular) {
    Write-Host "[$sunucu] Yapılandırılıyor..."
    
    Invoke-Command -ComputerName $sunucu -ScriptBlock {
        param($port)
        
        # Feature kurulumu
        Install-WindowsFeature -Name Web-Mgmt-Service -ErrorAction Stop
        
        # Remote management aç
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
            -Name "EnableRemoteManagement" -Value 1
        
        Set-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWebManagementServer" `
            -Name "Port" -Value $port
        
        # Servisi başlat ve otomatik yap
        Start-Service WMSvc
        Set-Service WMSvc -StartupType Automatic
        
        # Firewall kuralı
        New-NetFirewallRule -DisplayName "IIS WMSvc" `
            -Direction Inbound -Protocol TCP `
            -LocalPort $port -Action Allow `
            -Profile Domain -ErrorAction SilentlyContinue
            
        Write-Output "[$env:COMPUTERNAME] Tamamlandı"
        
    } -ArgumentList $yonetimPort
}

Bu script domain ortamında WinRM’in çalışır durumda olduğunu varsayıyor. WinRM ile ilgili sorun yaşıyorsanız önce Enable-PSRemoting ile remote PowerShell’i aktif edin.

IIS Manager ile Yapabilecekleriniz

Remote bağlantı kurulduktan sonra neredeyse her şeyi yerel sunucudaymış gibi yapabilirsiniz:

  • Uygulama havuzu yönetimi: Başlatma, durdurma, geri dönüştürme, kimlik ayarları
  • Site yönetimi: Bağlama ekleme/çıkarma, SSL sertifikası atama, fiziksel yol değiştirme
  • Yapılandırma yedekleme: Configuration > Shared Configuration veya AppCmd ile
  • Log görüntüleme: Doğrudan IIS Manager üzerinden log dosyalarına göz atabilirsiniz
  • İstek izleme: Failed Request Tracing kurallarını remote olarak yönetebilirsiniz
  • Modül yönetimi: Hangi modüllerin aktif olduğunu görüp değiştirebilirsiniz

Bir kısıtlama var: bazı özellikler remote bağlantıda çalışmıyor veya kısıtlı çalışıyor. Özellikle Application Development kategorisindeki bazı özellikler (CGI, FastCGI ayarları gibi) remote üzerinden tam işlevsel olmayabiliyor. Bu durumlarla karşılaştığınızda PowerShell remoting ile doğrudan sunucuda komut çalıştırmak daha güvenilir sonuç veriyor.

Sonuç

IIS Manager’ın uzaktan yönetim özelliği, kurulumu biraz uğraş gerektirse de bir kez doğru kurulduğunda iş akışınızı ciddi biçimde iyileştiriyor. RDP bağımlılığını ortadan kaldırıyor, yetki yönetimini granüler hale getiriyor ve birden fazla sunucuyu merkezi bir yerden yönetme imkanı sunuyor.

Özet olarak yapmanız gerekenler: sunucuda WMSvc kurulumu ve yapılandırması, firewall kuralı, istemcide IIS Manager kurulumu, bağlantı profili oluşturma. Bunların üzerine sertifika yönetimi ve IP kısıtlaması gibi güvenlik katmanlarını ekleyince sağlam bir remote management altyapısına sahip oluyorsunuz.

Burada anlattığım adımlar Windows Server 2016 ve üzeri için geçerli, eski sürümlerde bazı PowerShell cmdlet’leri farklılık gösterebilir. Herhangi bir adımda takılırsanız önce event log’lara bakın, WMSvc çoğu zaman neden başlamadığını veya neden bağlantı kurulamadığını açıkça yazıyor.

Bir yanıt yazın

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