Sunucu Yönetimi 10 dk okuma

IIS Kurulumu: Windows Server VDS'de Site Yayınlama ve Güvenlik Duvarı Port Açma

Windows Server 2019 ve 2022 VDS'inizde IIS'i Server Manager ya da PowerShell ile kurun, alan adınız için site açın, Windows Güvenlik Duvarı'nda port açın ve sitenizi ücretsiz SSL ile yayına alın.

IIS Kurulumu: Windows Server VDS'de Site Yayınlama ve Güvenlik Duvarı Port Açma
AnkSOFT
Yayıncı

Windows VDS'inizde bir ASP.NET uygulaması, kurum içi bir web arayüzü ya da basit bir HTML sitesi yayınlamak istiyorsanız ek yazılım satın almanıza gerek yoktur: Windows Server'ın içinde IIS (Internet Information Services) web sunucusu hazır gelir, yalnızca etkinleştirmeniz gerekir. Bu rehberde Windows Server 2019 ve 2022'de IIS'i hem Sunucu Yöneticisi (Server Manager) hem PowerShell ile kuruyor, alan adınız için bir site açıyor, Windows Güvenlik Duvarı'nda port açmayı gösteriyor ve siteyi ücretsiz SSL ile yayına almanın yolunu anlatıyoruz.

Örneklerde VDS IP adresi olarak 203.0.113.20, alan adı olarak ornek.com kullanıldı. Windows Server arayüzü İngilizce olduğu için menü adlarını İngilizce yazdık, açıklamaları Türkçe verdik. Bu rehberdeki ekran çizimleri temsilîdir; sürümünüze göre küçük farklar görebilirsiniz.


Başlamadan Önce

  • Bağlantı: VDS'inize Uzak Masaüstü (RDP) ile Administrator kullanıcısıyla bağlanın. Bağlanamıyorsanız VDS'e Uzak Masaüstü ve SSH ile bağlanamıyorum rehberimize göz atın.
  • RDP güvenliği: Sunucuyu internete web için açmadan önce Uzak Masaüstü'nü sıkılaştırmanızı öneririz; şifre politikası ve port değiştirme adımları Uzak Masaüstü RDP güvenliği rehberimizde.
  • Alan adı: Siteyi alan adıyla yayınlayacaksanız DNS yönetiminde ornek.com ve www.ornek.com için A kaydını VDS IP adresinize yönlendirin.
  • Güncellemeler: Kurulumdan önce Settings > Update & Security > Windows Update üzerinden bekleyen güncellemeleri yükleyin.

1. Yöntem: Server Manager ile IIS Kurulumu

  1. Server Manager'ı açın (başlat menüsünde ya da görev çubuğunda bulunur; RDP oturumunda genellikle kendiliğinden açılır).
  2. Sağ üstteki Manage menüsünden Add Roles and Features'ı seçin.
  3. Before You Begin ekranında Next'e basın.
  4. Installation Type ekranında Role-based or feature-based installation'ı seçin.
  5. Server Selection ekranında listedeki kendi sunucunuz seçili kalsın, Next.
  6. Server Roles listesinde Web Server (IIS) kutusunu işaretleyin. Açılan pencerede Add Features düğmesine basın; bu, IIS Yönetim Konsolu'nu da ekler.
  7. Features ekranını olduğu gibi geçin.
  8. Role Services ekranında varsayılan seçimler statik bir site için yeterlidir. ASP.NET uygulaması çalıştıracaksanız Application Development altında ASP.NET 4.8 kutusunu da işaretleyin (Windows Server 2019'da sürüm numarası farklı görünebilir).
  9. Confirmation ekranında Install'a basın. Kurulum birkaç dakika sürer, genellikle yeniden başlatma gerekmez.

Server Manager Add Roles and Features sihirbazında Web Server (IIS) rolünün seçilmesi


2. Yöntem: PowerShell ile Tek Komutta Kurulum

Aynı işi tek satırla yapabilirsiniz. Başlat menüsünde Windows PowerShell'e sağ tıklayıp Run as Administrator ile açın:

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

ASP.NET 4.x desteği de gerekiyorsa:

Install-WindowsFeature -Name Web-Asp-Net45

Çıktıda Success sütununun True olması kurulumun tamamlandığını gösterir. Hangi IIS bileşenlerinin kurulu olduğunu görmek için:

Get-WindowsFeature -Name Web-* | Where-Object Installed

PowerShell Install-WindowsFeature Web-Server çıktısı: Success True, Exit Code Success

.NET 6 / 8 ve üstü (ASP.NET Core) uygulamalar için yukarıdaki ASP.NET 4.x bileşeni yeterli değildir. Microsoft'un resmi sitesinden uygulamanızın sürümüne uygun ASP.NET Core Hosting Bundle paketini indirip kurun, ardından iisreset komutunu çalıştırın.

Kurulumu doğrulayın

Sunucunun içinde tarayıcıyı açıp http://localhost adresine gidin; IIS'in mavi karşılama sayfasını görmelisiniz. Kendi bilgisayarınızdan http://203.0.113.20 adresini açtığınızda da aynı sayfa geliyorsa web sunucusu dışarıdan erişilebilir durumdadır. Gelmiyorsa güvenlik duvarı bölümüne geçin.


Site Yayınlama: Yeni Bir Web Sitesi Eklemek

IIS kurulduğunda C:\inetpub\wwwroot klasörünü yayınlayan Default Web Site oluşur. Tek bir site için dosyalarınızı bu klasöre koymanız yeterlidir; ama alan adına göre birden fazla site yayınlayacaksanız her biri için ayrı bir site tanımlamak daha düzenlidir.

IIS Manager ile

  1. Site dosyaları için bir klasör açın, örneğin C:\inetpub\ornek.com, ve dosyalarınızı içine kopyalayın. Ana sayfanın adı index.html, default.aspx gibi IIS'in varsayılan belge listesindeki bir ad olmalıdır.
  2. Server Manager > Tools > Internet Information Services (IIS) Manager'ı açın.
  3. Sol bölmede sunucu adını genişletin, Sites'a sağ tıklayın, Add Website'ı seçin.
  4. Alanları doldurun:
    • Site name: ornek.com (IIS bu adla bir uygulama havuzu da oluşturur).
    • Physical path: C:\inetpub\ornek.com
    • Binding: Type http, IP address All Unassigned, Port 80.
    • Host name: ornek.com
  5. OK'a basın. www.ornek.com için de yayın yapmak istiyorsanız siteye sağ tıklayıp Edit Bindings > Add ile aynı ayarlarla www.ornek.com host adını ekleyin.

IIS Manager Add Website penceresi: site adı, fiziksel yol, port 80 ve host name

Host name alanı, aynı 80 portunda birden fazla siteyi alan adına göre ayırmanızı sağlar. Bu alan boş bırakılmış iki site aynı IP ve portu kullanamaz; ikinci site başlatılamaz.

PowerShell ile

New-Item -ItemType Directory -Path C:\inetpub\ornek.com
New-IISSite -Name "ornek.com" -PhysicalPath "C:\inetpub\ornek.com" -BindingInformation "*:80:ornek.com"
New-IISSiteBinding -Name "ornek.com" -BindingInformation "*:80:www.ornek.com" -Protocol http
Get-IISSite

BindingInformation değeri IP:Port:HostAdı biçimindedir; * tüm IP adreslerinde dinlemek anlamına gelir.

Dosya izinleri

IIS, sitenizi uygulama havuzunun kimliğiyle çalıştırır. Sitenizin dosya yükleme gibi yazma işlemi yapacağı bir klasör varsa (ör. uploads) yalnız o klasöre yazma izni verin:

icacls "C:\inetpub\ornek.com\uploads" /grant "IIS AppPool\ornek.com:(OI)(CI)M"

Bütün site klasörüne yazma izni vermeyin; sitedeki bir açık, saldırganın sunucuya dosya yazmasına yol açar.


Windows Güvenlik Duvarı'nda Port Açma

IIS kurulumu, HTTP için World Wide Web Services (HTTP Traffic-In) gelen kuralını kendiliğinden etkinleştirir. Yine de 80 ve 443 portlarının açık olduğunu kontrol etmek ve IIS dışındaki uygulamalarınız için port açmak isteyebilirsiniz.

Mevcut kuralları kontrol edin

Get-NetFirewallPortFilter | Where-Object { $_.LocalPort -contains '80' -or $_.LocalPort -contains '443' } |
  Get-NetFirewallRule | Where-Object Direction -eq Inbound |
  Select-Object DisplayName, Enabled, Action

Web trafiğine izin veren kuralda Enabled değeri True ve Action değeri Allow olmalıdır. 443 için etkin bir kural görmüyorsanız aşağıdaki komutla ekleyin.

PowerShell ile yeni kural ekleyin

Web için 80 ve 443'ü birlikte açmak:

New-NetFirewallRule -DisplayName "Web HTTP-HTTPS" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow

Kendi uygulamanız için (ör. 8080 portunda çalışan bir API):

New-NetFirewallRule -DisplayName "API 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

Yalnız belirli bir IP adresine izin vermek (ör. ofisinizden SQL Server erişimi):

New-NetFirewallRule -DisplayName "SQL 1433 Ofis" -Direction Inbound -Protocol TCP -LocalPort 1433 -RemoteAddress 198.51.100.25 -Action Allow

Kuralı kaldırmak için Remove-NetFirewallRule -DisplayName "API 8080" yazmanız yeterlidir.

New-NetFirewallRule ile gelen kural oluşturma ve kural listesinin doğrulanması

Arayüzden kural eklemek

  1. Başlat menüsünde wf.msc yazıp Windows Defender Firewall with Advanced Security'yi açın.
  2. Sol bölmede Inbound Rules, sağ bölmede New Rule...
  3. Rule Type: Port > Next.
  4. Protocol and Ports: TCP, Specific local ports: 80, 443 (UDP gerektiren bir uygulama için UDP seçin).
  5. Action: Allow the connection.
  6. Profile: Domain, Private ve Public kutularının üçü de işaretli kalsın.
  7. Name: kurala tanıyacağınız bir ad verin, örneğin "Web HTTP-HTTPS", Finish.

Paneldeki Güvenlik Duvarı ile birlikte kullanmak

AnkSOFT VDS'lerinde müşteri panelinizde ayrıca bir Güvenlik Duvarı sekmesi bulunur. Panelden eklediğiniz kurallar sunucunuzdaki Windows Güvenlik Duvarı'na ayrı bir kural grubu olarak yazılır ve panel, gelen trafik için varsayılan politikayı da ayarlar. Pratikte:

  • Panel güvenlik duvarını kullanıyorsanız politikayı Engelle (önerilen) seçin ve web için "Web sunucusu", Uzak Masaüstü için "Uzak erişim" profillerini ekleyin.
  • Panel kendi kural grubunu her kayıtta baştan yazar ama sizin Windows'ta elle eklediğiniz kurallara dokunmaz.
  • Bir kuralı hangi tarafta tuttuğunuzu not edin; aynı portu iki yerde yönetmek sorun giderirken kafa karıştırır.

Portun dışarıdan açık olduğunu test edin

Sunucuda ilgili portu bir servisin dinlediğini kontrol edin:

netstat -ano | findstr ":80 "

Kendi bilgisayarınızdaki PowerShell'den (sunucudan değil) dışarıdan erişimi test edin:

Test-NetConnection 203.0.113.20 -Port 80

TcpTestSucceeded : True görüyorsanız port açıktır ve bir servis yanıt veriyordur. False ise ya kural eksiktir ya da o portta çalışan bir uygulama yoktur; ikisini de ayrı ayrı kontrol edin.


Ücretsiz SSL: Siteyi HTTPS ile Yayınlamak

IIS'e Let's Encrypt sertifikası almanın en pratik yolu, Windows için geliştirilmiş ücretsiz ve açık kaynaklı bir ACME istemcisi kullanmaktır. Bu alanda en yaygın kullanılanı win-acme'dir:

  1. win-acme'nin resmi sitesinden son sürümü indirip örneğin C:\win-acme klasörüne açın.
  2. wacs.exe dosyasını yönetici olarak çalıştırın.
  3. Menüden Create certificate (default settings)'i seçin; program IIS'teki siteleri ve host adlarını listeler.
  4. ornek.com sitesini seçin, e-posta adresinizi girip koşulları onaylayın.

Program 80 portu üzerinden alan adınızı doğrular, sertifikayı alır, sitenize https bağlamasını (443) ekler ve yenileme için Windows Görev Zamanlayıcı'ya bir görev oluşturur. Bu yüzden doğrulama sırasında 80 portunun dışarıdan erişilebilir olması şarttır. Sertifikadan sonra 443 portunun güvenlik duvarında açık olduğundan emin olun.

İnternetten IIS sitesine giden yol: DNS A kaydı, Windows Güvenlik Duvarı 80/443, IIS host name bağlaması ve site klasörü

HTTP isteklerini HTTPS'e yönlendirmek

Sertifika kurulduktan sonra ziyaretçilerin http:// ile gelse bile güvenli adrese aktarılması gerekir. IIS'te bunun için Microsoft'un ücretsiz URL Rewrite modülünü kurun (Microsoft'un IIS sitesinden indirilir), ardından site klasöründeki web.config dosyasına şu kuralı ekleyin:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTPS'e yonlendir" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

web.config dosyanızda zaten bir <system.webServer> bölümü varsa yalnız <rewrite> bloğunu onun içine ekleyin; ikinci bir <configuration> açmayın. URL Rewrite modülü kurulmadan bu kuralı eklerseniz site HTTP Error 500.19 verir.


Uygulama Havuzu (Application Pool) Ayarları

IIS'te her site bir uygulama havuzu içinde çalışır. Siteleri ayrı havuzlarda tutmak, birindeki çökmenin ya da bellek sorununun diğerlerini etkilememesini sağlar. IIS Manager'da sol bölmede Application Pools'a tıkladığınızda her sitenin havuzunu görürsünüz.

  • .NET CLR version: ASP.NET 4.x uygulamaları için v4.0; ASP.NET Core (.NET 6/8 ve üstü) ve düz HTML/PHP siteleri için No Managed Code seçin. ASP.NET Core uygulamalarında yanlış seçim çalışmayı engellemez ama gereksiz yük getirir.
  • Geri dönüşüm (Recycling): IIS havuzu varsayılan olarak 29 saatte bir yeniden başlatır. Yoğun saatlerde kısa bir yavaşlama yaşamamak için Advanced Settings > Recycling > Specific Times ile bunu gece saatine (ör. 04:00) alabilirsiniz.
  • Boşta kapanma (Idle Time-out): Havuz varsayılan olarak 20 dakika istek gelmezse kapanır; ilk ziyaretçi uygulamanın yeniden açılmasını bekler. Her zaman hızlı açılması gereken bir uygulamada Idle Time-out değerini 0 yapabilirsiniz; bu durumda uygulama sürekli bellekte kalır.

Bir site sorun çıkardığında önce yalnız onun havuzunu yeniden başlatın (havuza sağ tık > Recycle); iisreset tüm siteleri birden yeniden başlatır.


En Sık Yapılan Hatalar

  1. Site sunucuda açılıyor ama dışarıdan açılmıyor. Windows Güvenlik Duvarı'nda 80/443 kuralı kapalı ya da panel güvenlik duvarında bu portlar eksik. Test-NetConnection ile kontrol edin.
  2. "The binding '*:80:' is assigned to another site" uyarısı. İki site host adı olmadan aynı portu kullanıyor. Yeni siteye Host name yazın ya da Default Web Site'ı durdurun.
  3. HTTP Error 403.14 - Forbidden. Klasörde varsayılan belge (index.html, default.aspx) yok. Dosya adını kontrol edin ya da IIS Manager'da Default Document listesine kendi dosya adınızı ekleyin.
  4. HTTP Error 500.19. web.config içinde sunucuda kurulu olmayan bir modül kullanılıyor (ör. URL Rewrite ya da ASP.NET Core modülü). Gerekli bileşeni ya da Hosting Bundle'ı kurun.
  5. SSL alınamıyor. DNS A kaydı henüz VDS IP'nizi göstermiyor ya da 80 portu kapalı. nslookup ornek.com ile DNS'i, Test-NetConnection ile portu doğrulayın.
  6. Veritabanı portunu (1433, 3306) herkese açmak. Bu portları yalnız belirli IP'lere -RemoteAddress ile açın ya da hiç açmayın.
  7. Güvenlik duvarını tamamen kapatmak. "Port açılmıyor" diye Windows Güvenlik Duvarı'nı kapatmak sunucunun tüm servislerini internete açar. Sorunu kuralla çözün.

Özet

  1. Server Manager'dan Web Server (IIS) rolünü ekleyin ya da Install-WindowsFeature -Name Web-Server -IncludeManagementTools çalıştırın.
  2. Her site için ayrı bir klasör ve host name bağlamalı ayrı bir site oluşturun.
  3. Windows Güvenlik Duvarı'nda 80 ve 443'ün açık olduğunu doğrulayın; panel güvenlik duvarını kullanıyorsanız orada da açın.
  4. Dışarıdan erişimi Test-NetConnection ile test edin.
  5. win-acme gibi bir ACME istemcisiyle ücretsiz SSL alıp otomatik yenilemeyi bırakın.

Linux tarafında aynı işi yapmak isterseniz LEMP Kurulumu rehberimiz Nginx, PHP ve MariaDB ile adım adım anlatıyor. Bir ayar işler hâlde değilse ve sunucuyu temize çekmek istiyorsanız VDS yeniden kurulum rehberimize bakın.

Windows Server 2019 ve 2022 kurulabilen, panelden güvenlik duvarı yönetimi sunan Türkiye lokasyonlu Windows sanal sunucular için VDS paketlerimizi inceleyin. Kurulumda takıldığınız bir adım olursa destek talebi açın; talebinize VDS IP adresinizi, sitenizin adını ve gördüğünüz hata kodunu ekleyin, şifrenizi yazmayın.


Kaynaklar

Sıkça Sorulan Sorular

Windows Server'da IIS nasıl kurulur?

Server Manager'da Manage > Add Roles and Features yolunu izleyip Server Roles adımında Web Server (IIS) rolünü seçin ya da yönetici PowerShell'de Install-WindowsFeature -Name Web-Server -IncludeManagementTools komutunu çalıştırın.

IIS kullanmak için ek lisans gerekir mi?

Hayır. IIS, Windows Server'ın içinde gelen bir roldür; etkinleştirmek için ayrıca lisans satın almanız gerekmez.

Site sunucuda açılıyor ama dışarıdan açılmıyor, neden?

Çoğunlukla Windows Güvenlik Duvarı'nda 80/443 için etkin bir gelen kural yoktur ya da panel güvenlik duvarında bu portlar eksiktir. Kendi bilgisayarınızdan Test-NetConnection IP_ADRESI -Port 80 komutuyla portu test edin.

Aynı IIS sunucusunda birden fazla site yayınlayabilir miyim?

Evet. Her site için ayrı bir klasör ve ayrı bir site oluşturun, bağlamada Host name alanına alan adını yazın. Böylece aynı IP ve 80 portunda siteler alan adına göre ayrılır.

IIS'e ücretsiz SSL sertifikası nasıl kurulur?

win-acme gibi ücretsiz bir ACME istemcisiyle Let's Encrypt sertifikası alabilirsiniz. Program sitenizi IIS'ten bulur, alan adını 80 portu üzerinden doğrular, 443 bağlamasını ekler ve yenileme için zamanlanmış görev oluşturur.

TR| EN