1. Anasayfa
  2. Uncategorized

Windows Server’da RDP ile Bağlanan Kullanıcıları Görüntülemek


Windows Server ortamlarında RDP (Remote Desktop Protocol) bağlantıları günlük işlerin vazgeçilmez bir parçasıdır. Ancak güvenlik ve denetim açısından şu sorulara hızlı cevap bulmak önemlidir:

  • Hangi kullanıcı,
  • Ne zaman,
  • Hangi IP adresinden RDP ile bağlandı?

Bu bilgiyi bulmak mümkün, fakat loglar farklı kanallara dağılmış ve okunması zordur. Neyse ki PowerShell ile birkaç satırlık bir script yazıp tüm bu bilgileri sade, okunabilir ve filtrelenebilir bir arayüz haline getirmek mümkün.

RDP Oturum Logları Nerede Tutulur?

RDP bağlantı bilgileri varsayılan olarak şu log kanalında saklanır:

Microsoft-Windows-TerminalServices-LocalSessionManager/Operational

Bu kanalda özellikle Event ID 21 değerine dikkat etmeliyiz. Bu kayıt bir RDP oturumunun başarıyla kurulduğunu gösterir ve hem kullanıcı adı hem de bağlanan istemcinin IP adresi burada bulunur.

Eğer bu log kanalı kapalıysa şu komutla etkinleştirmek gerekir:

wevtutil set-log "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" /enabled:true

PowerShell ile Pratik Çözüm

Aşağıdaki script son 60 günün RDP girişlerini alır ve Out-GridView sayesinde filtrelenebilir bir pencere halinde sunar:

$startTime = (Get-Date).AddDays(-60)
$logins = Get-WinEvent -FilterHashtable @{
 LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
 Id = 21; StartTime = $startTime
} -ErrorAction SilentlyContinue

$data = foreach ($event in $logins) {
 $lines = $event.Message -split "`n"
 $user = ($lines | Where { $_ -like "User:*" }) -replace "User:\s*", ""
 $ip = ($lines | Where { $_ -like "Source Network Address:*" }) -replace "Source Network Address:\s*", ""
 if ($user -and $ip) {
 [PSCustomObject]@{
 Zaman = $event.TimeCreated.ToString("MM/dd/yyyy HH:mm:ss")
 Kullanici = $user.Trim()
 IPAdres = $ip.Trim()
 }
 }
}

if ($data) {
 $data | Sort-Object Zaman | Out-GridView -Title "RDP Giriş Kayıtları – Son 60 Gün"
}

Scriptin Sağladıkları

  • Filtreleme: Kullanıcı adına veya IP’ye göre anında filtreleme yapılabilir.
  • Zaman Aralığı: 60 günlük sınır gereksiz log yükünü azaltır.
  • Okunabilirlik: Tarih formatı MM/dd/yyyy HH:mm:ss olarak düzenlenmiştir.
  • Sadelik: Tüm kayıtlar tek pencerede listelenir.

Dikkat Edilmesi Gerekenler

  • Log Kanalı: Yukarıda anlatıldığı gibi kapalıysa manuel açılmalı.
  • Log Boyutu: Security logları dolarsa yeni girişler kaydedilmez log boyutu artırılmalı veya arşivleme aktif edilmeli.
  • Saat Senkronizasyonu: Sistem saati yanlışsa giriş zamanları da hatalı görünür. Sunucuların NTP ile senkronize olduğundan emin olun.
  • IP Görünürlüğü: Bu yöntem sadece istemcinin iç (LAN) IP adresini gösterir.
    • Dış/public IP bilgisi gerekirse RDP Gateway, firewall ya da UTM loglarına bakmak gerekir.
  • GUI Gereksinimi: Out-GridView, GUI bulunan ortamlarda çalışır. Server Core gibi GUI’siz sistemlerde konsol veya CSV çıktısı tercih edilmelidir.

Gelişmiş Kullanım İpuçları

  • CSV Çıktısı Almak: $data | Export-Csv -Path C:\RDP_Logins.csv -NoTypeInformation -Encoding UTF8 Bu yöntemle kayıtlar Excel’de incelenebilir.
  • Sıralama ve Gruplama: Kullanıcı bazlı rapor almak için: $data | Group-Object Kullanici | Sort-Object Count -Descending
  • Event ID Çeşitlendirme: Sadece oturum açışları değil, çıkış (Event ID 24), bağlantı kopmaları (25) gibi olaylar da takip edilebilir.
  • Scheduled Task ile Otomasyon: Script günlük veya haftalık çalıştırılıp sonuçlar otomatik olarak log sunucusuna veya SIEM sistemine aktarılabilir.

Güvenlik Perspektifi

RDP girişlerini takip etmek sadece operasyonel değil, güvenlik açısından da kritik:

  • Yetkisiz erişim denemeleri fark edilir.
  • Beklenmedik IP adreslerinden gelen bağlantılar anında tespit edilir.
  • Saldırı sonrası adli inceleme için sağlam bir kanıt zinciri oluşturulur.

Örneğin kısa süre içinde farklı IP’lerden gelen çok sayıda giriş, brute-force saldırısının işareti olabilir.

Windows Server üzerinde RDP bağlantılarını izlemek loglar sayesinde mümkün ancak ham loglarla çalışmak zor ve zaman alıcıdır. PowerShell ile hazırlanan basit bir script:

  • Kim, ne zaman, hangi IP’den bağlandı sorularına net yanıt verir.
  • Tüm girişleri tek pencerede görmeyi sağlar.
  • İhtiyaca göre CSV, konsol ya da GUI çıktısı sunar.

Sonuç olarak loglarla boğuşmadan sade bir arayüzde tüm girişleri görmek hem sistem yöneticilerine hem de güvenlik ekiplerine ciddi bir zaman kazandırır.

İlginizi Çekebilir