Ulaşım
- Adres:Batıkent Mh. 8910 Sk. 6. Etap 1H No: 18 Yeni Toki Eyyübiye / Şanlıurfa (Yeni Alım Satım Karşısı)
- Telefon:0 (545) 528 88 93
- eMail: info@alestaweb.com
Windows Server ve Windows 10/11 sistemlerde RDP (Remote Desktop Protocol) portunu güvenlik veya özel gereksinimler için değiştirme rehberi. PowerShell script ile otomatik kurulum, Registry düzenlemesi ve Güvenlik Duvarı yapılandırması.
Uzak Masaüstü (RDP), Windows sistemlerde varsayılan olarak 3389 portunu kullanır. Bu portu değiştirmek için birçok önemli sebep vardır:
| Özellik | Varsayılan Port (3389) | Özel Port (örn: 49200) |
|---|---|---|
| Güvenlik Seviyesi | ❌ Düşük (hedef alınır) | ✅ Yüksek (gizli kalır) |
| Brute-force Saldırıları | ❌ Çok sık | ✅ Çok nadir |
| Port Tarama | ❌ Hemen bulunur | ✅ Bulunması zor |
| ISP Engeli | ❌ Engellenebilir | ✅ Engellenmez |
| Çoklu Sunucu | ❌ Port çakışması | ✅ Her sunucuya farklı port |
| Port Aralığı | Açıklama | Önerilen? |
|---|---|---|
| 0 - 1023 | Sistem portları (HTTP, FTP, SSH vb.) | ❌ Kullanmayın |
| 1024 - 49151 | Kayıtlı portlar (uygulamalar için) | ⚠️ Dikkatli kullanın |
| 49152 - 65535 | Dinamik/Özel portlar | ✅ İdeal seçim |
En hızlı ve güvenli yöntem PowerShell scripti kullanmaktır. Script otomatik olarak şunları yapar:
Set-ExecutionPolicy Bypass -Scope Process -Force
# Varsayılan port (49200) ile
.\Set-RDPPort.ps1
# Özel port ile
.\Set-RDPPort.ps1 -NewPort 50001
# Eski kuralları da kaldırarak
.\Set-RDPPort.ps1 -NewPort 50001 -RemoveOldRule
# ========================================================
# Windows RDP Port Değiştirme Scripti
# Kullanım: Yönetici PowerShell'de çalıştırın
# Yazar: AlestaWeb Sistem Rehberleri
# Versiyon: 2.0
# Tarih: 2025
# ========================================================
# Parametreler
param(
[Parameter(Mandatory=$false)]
[int]$NewPort = 49200,
[Parameter(Mandatory=$false)]
[switch]$RemoveOldRule = $false
)
# Renkli çıktı için yardımcı fonksiyonlar
function Write-ColorOutput($ForegroundColor) {
$fc = $host.UI.RawUI.ForegroundColor
$host.UI.RawUI.ForegroundColor = $ForegroundColor
if ($args) {
Write-Output $args
}
$host.UI.RawUI.ForegroundColor = $fc
}
function Write-Success { Write-ColorOutput Green $args }
function Write-Info { Write-ColorOutput Cyan $args }
function Write-Warning2 { Write-ColorOutput Yellow $args }
function Write-Error2 { Write-ColorOutput Red $args }
# Banner
Write-Host "`n"
Write-Host "╔════════════════════════════════════════════════════╗" -ForegroundColor Cyan
Write-Host "║ Windows RDP Port Değiştirme Scripti v2.0 ║" -ForegroundColor Cyan
Write-Host "║ AlestaDergi Sistem Rehberleri ║" -ForegroundColor Cyan
Write-Host "╚════════════════════════════════════════════════════╝" -ForegroundColor Cyan
Write-Host "`n"
# Yönetici kontrolü
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Error2 "❌ HATA: Bu script yönetici (Administrator) yetkisi ile çalıştırılmalıdır!"
Write-Warning2 "`nÇözüm: PowerShell'i sağ tıklayıp 'Yönetici olarak çalıştır' seçeneğini kullanın."
Read-Host "`nDevam etmek için Enter'a basın"
exit 1
}
# Port doğrulama
if ($NewPort -lt 1024 -or $NewPort -gt 65535) {
Write-Error2 "❌ HATA: Port numarası 1024-65535 arasında olmalıdır!"
Write-Warning2 "Önerilen aralık: 49152-65535 (dinamik portlar)"
Read-Host "`nDevam etmek için Enter'a basın"
exit 1
}
# Mevcut port kontrolü
$RegPath = "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
try {
$CurrentPort = Get-ItemProperty -Path $RegPath -Name "PortNumber" -ErrorAction Stop
$CurrentPortValue = $CurrentPort.PortNumber
Write-Info "Mevcut RDP portu: $CurrentPortValue"
} catch {
Write-Error2 "❌ HATA: Registry yolu okunamadı. RDP servisi kurulu değil olabilir."
Write-Error2 "Detay: $($_.Exception.Message)"
Read-Host "`nDevam etmek için Enter'a basın"
exit 1
}
if ($CurrentPortValue -eq $NewPort) {
Write-Warning2 "⚠️ Port zaten $NewPort olarak ayarlanmış! İşlem yapılmayacak."
Read-Host "`nDevam etmek için Enter'a basın"
exit 0
}
# Onay isteme
Write-Warning2 "`n⚠️ DİKKAT: RDP portu $CurrentPortValue ==> $NewPort olarak değiştirilecek!"
Write-Warning2 "Bu işlem sırasında mevcut RDP bağlantınız kopabilir."
Write-Warning2 "Fiziksel veya alternatif bir erişim yolunuz olduğundan emin olun!`n"
$confirmation = Read-Host "Devam etmek istiyor musunuz? (E/H)"
if ($confirmation -ne 'E' -and $confirmation -ne 'e') {
Write-Info "İşlem kullanıcı tarafından iptal edildi."
Read-Host "`nDevam etmek için Enter'a basın"
exit 0
}
Write-Info "`nİşlem başlıyor...`n"
Start-Sleep -Seconds 1
# 1. Registry'de port değiştirme
Write-Info "1️⃣ Registry'de RDP portu değiştiriliyor..."
try {
Set-ItemProperty -Path $RegPath -Name "PortNumber" -Value $NewPort -ErrorAction Stop
Write-Success " ✅ Registry başarıyla güncellendi: $NewPort"
} catch {
Write-Error2 " ❌ Registry güncellenemedi: $($_.Exception.Message)"
Read-Host "`nDevam etmek için Enter'a basın"
exit 1
}
# 2. Güvenlik duvarı kuralı ekleme
Write-Info "`n2️⃣ Güvenlik duvarı kuralı oluşturuluyor..."
try {
$ruleName = "RDP Port $NewPort"
# Mevcut kural kontrolü
$existingRule = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if ($existingRule) {
Write-Warning2 " ⚠️ Kural zaten mevcut, güncelleniyor..."
Remove-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
}
New-NetFirewallRule -DisplayName $ruleName `
-Direction Inbound `
-Protocol TCP `
-LocalPort $NewPort `
-Action Allow `
-Profile Any `
-Enabled True `
-ErrorAction Stop | Out-Null
Write-Success " ✅ Güvenlik duvarı kuralı oluşturuldu: $ruleName"
} catch {
Write-Error2 " ❌ Güvenlik duvarı kuralı oluşturulamadı: $($_.Exception.Message)"
Write-Warning2 " ⚠️ Manuel olarak eklemeniz gerekebilir!"
}
# 3. Eski güvenlik duvarı kuralını kaldırma (opsiyonel)
if ($RemoveOldRule) {
Write-Info "`n3️⃣ Eski güvenlik duvarı kuralları kaldırılıyor..."
try {
$oldRules = Get-NetFirewallRule | Where-Object {
$_.DisplayName -like "*Remote Desktop*" -and
$_.DisplayName -notlike "*$NewPort*"
}
foreach ($rule in $oldRules) {
Write-Info "Kaldırılıyor: $($rule.DisplayName)"
Remove-NetFirewallRule -DisplayName $rule.DisplayName -ErrorAction SilentlyContinue
}
if ($oldRules.Count -gt 0) {
Write-Success " ✅ $($oldRules.Count) eski kural kaldırıldı"
} else {
Write-Info " ℹ️ Kaldırılacak eski kural bulunamadı"
}
} catch {
Write-Warning2 " ⚠️ Eski kurallar kaldırılamadı: $($_.Exception.Message)"
}
}
# 4. Terminal Services servisini yeniden başlatma
Write-Info "`n4️⃣ Terminal Services servisi yeniden başlatılıyor..."
try {
$serviceName = "TermService"
$service = Get-Service -Name $serviceName -ErrorAction Stop
if ($service.Status -eq 'Running') {
Write-Info " Servis durduruluyor..."
Stop-Service -Name $serviceName -Force -ErrorAction Stop
Start-Sleep -Seconds 2
}
Write-Info " Servis başlatılıyor..."
Start-Service -Name $serviceName -ErrorAction Stop
Start-Sleep -Seconds 1
Write-Success " ✅ Servis başarıyla yeniden başlatıldı"
} catch {
Write-Error2 " ❌ Servis yeniden başlatılamadı: $($_.Exception.Message)"
Write-Warning2 " ⚠️ Sistemi yeniden başlatmanız önerilir!"
}
# 5. Doğrulama
Write-Info "`n5️⃣ Değişiklikler doğrulanıyor..."
Start-Sleep -Seconds 2
try {
# Registry kontrolü
$verifyPort = Get-ItemProperty -Path $RegPath -Name "PortNumber"
if ($verifyPort.PortNumber -eq $NewPort) {
Write-Success " ✅ Registry doğrulandı: Port = $NewPort"
} else {
Write-Error2 " ❌ Registry doğrulanamadı! Beklenen: $NewPort, Mevcut: $($verifyPort.PortNumber)"
}
# Servis kontrolü
$serviceStatus = Get-Service -Name TermService
if ($serviceStatus.Status -eq 'Running') {
Write-Success " ✅ Terminal Services çalışıyor"
} else {
Write-Warning2 " ⚠️ Terminal Services çalışmıyor: $($serviceStatus.Status)"
}
# Güvenlik duvarı kontrolü
$firewallRule = Get-NetFirewallRule -DisplayName "RDP Port $NewPort" -ErrorAction SilentlyContinue
if ($firewallRule) {
Write-Success " ✅ Güvenlik duvarı kuralı mevcut ve aktif"
} else {
Write-Warning2 " ⚠️ Güvenlik duvarı kuralı bulunamadı"
}
} catch {
Write-Error2 " ❌ Doğrulama sırasında hata: $($_.Exception.Message)"
}
# Sonuç özeti
Write-Host "`n"
Write-Host "╔════════════════════════════════════════════════════╗" -ForegroundColor Green
Write-Host "║ İŞLEM BAŞARIYLA TAMAMLANDI ║" -ForegroundColor Green
Write-Host "╚════════════════════════════════════════════════════╝" -ForegroundColor Green
# IP adresini al
try {
$ipAddresses = Get-NetIPAddress -AddressFamily IPv4 |
Where-Object { $_.InterfaceAlias -notlike "*Loopback*" } |
Select-Object -ExpandProperty IPAddress
} catch {
$ipAddresses = @("HATA: IP alınamadı")
}
Write-Host "`nBağlantı Bilgileri:" -ForegroundColor Cyan
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
Write-Host "Eski RDP Portu : " -NoNewline -ForegroundColor Yellow
Write-Host "$CurrentPortValue" -ForegroundColor Red
Write-Host "Yeni RDP Portu : " -NoNewline -ForegroundColor Yellow
Write-Host "$NewPort" -ForegroundColor Green
if ($ipAddresses.Count -gt 0) {
Write-Host "Sunucu IP Adresi : " -NoNewline -ForegroundColor Yellow
foreach ($ip in $ipAddresses) {
Write-Host "$ip" -ForegroundColor Green
}
}
Write-Host "`nBağlantı Komutları:" -ForegroundColor Cyan
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
if ($ipAddresses.Count -gt 0) {
Write-Host " mstsc /v:" -NoNewline -ForegroundColor White
Write-Host "$($ipAddresses[0]):$NewPort" -ForegroundColor Green
Write-Host "`n veya Uzak Masaüstü uygulamasında:" -ForegroundColor White
Write-Host " Bilgisayar: " -NoNewline -ForegroundColor White
Write-Host "$($ipAddresses[0]):$NewPort" -ForegroundColor Green
}
Write-Host "`n⚠️ ÖNEMLİ NOTLAR:" -ForegroundColor Yellow
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Yellow
Write-Host "1. Eski $CurrentPortValue portuna gelen bağlantılar artık ÇALIŞMAYACAK" -ForegroundColor White
Write-Host "2. Yeni $NewPort portunu kullanarak bağlanmalısınız" -ForegroundColor White
Write-Host "3. NAT/Router arkasındaysanız port yönlendirme yapın" -ForegroundColor White
Write-Host "4. Şirket güvenlik duvarınızda da bu portu açmanız gerekebilir" -ForegroundColor White
Write-Host "5. Değişikliğin tam aktif olması için sistemi yeniden başlatın" -ForegroundColor White
# NAT yönlendirme bilgisi
if ($ipAddresses.Count -gt 0) {
Write-Host "`nNAT/Router Port Yönlendirme Ayarları:" -ForegroundColor Cyan
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
Write-Host " Dış Port (WAN) : " -NoNewline -ForegroundColor White
Write-Host "$NewPort" -ForegroundColor Green
Write-Host " İç IP (LAN) : " -NoNewline -ForegroundColor White
Write-Host "$($ipAddresses[0])" -ForegroundColor Green
Write-Host " İç Port : " -NoNewline -ForegroundColor White
Write-Host "$NewPort" -ForegroundColor Green
Write-Host " Protokol : " -NoNewline -ForegroundColor White
Write-Host "TCP" -ForegroundColor Green
}
# Test komutları
Write-Host "`nTest Komutları:" -ForegroundColor Cyan
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
Write-Host " # Registry kontrolü" -ForegroundColor Gray
Write-Host " Get-ItemProperty -Path '$RegPath' -Name PortNumber" -ForegroundColor White
Write-Host ""
Write-Host " # Port dinleme kontrolü" -ForegroundColor Gray
Write-Host " netstat -ano | findstr :$NewPort" -ForegroundColor White
Write-Host ""
Write-Host " # Bağlantı testi" -ForegroundColor Gray
if ($ipAddresses.Count -gt 0) {
Write-Host " Test-NetConnection -ComputerName $($ipAddresses[0]) -Port $NewPort" -ForegroundColor White
}
Write-Host "`n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`n" -ForegroundColor Cyan
# Geri alma bilgisi
Write-Host "Geri Alma: " -NoNewline -ForegroundColor Yellow
Write-Host "Eski porta dönmek isterseniz bu scripti tekrar çalıştırın:" -ForegroundColor White
Write-Host " .\Set-RDPPort.ps1 -NewPort $CurrentPortValue`n" -ForegroundColor Cyan
# Sistem yeniden başlatma önerisi
$reboot = Read-Host "Sistemi şimdi yeniden başlatmak ister misiniz? (E/H)"
if ($reboot -eq 'E' -or $reboot -eq 'e') {
Write-Warning2 "`n⏰ Sistem 10 saniye içinde yeniden başlatılacak..."
Write-Warning2 "İptal etmek için Ctrl+C tuşlarına basın!"
for ($i = 10; $i -gt 0; $i--) {
Write-Host " $i..." -ForegroundColor Yellow
Start-Sleep -Seconds 1
}
Write-Info "`nSistem yeniden başlatılıyor..."
Restart-Computer -Force
} else {
Write-Info "`n✅ Script tamamlandı. Sistemi daha sonra yeniden başlatmayı unutmayın!"
Write-Warning2 " Not: Tam aktif olması için yeniden başlatma ŞİDDETLE önerilir!`n"
}
# Son mesaj
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor Cyan
Write-Host "AlestaDergi - Sistem Rehberleri | alestaweb.com" -ForegroundColor Cyan
Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`n" -ForegroundColor Cyan
Read-Host "Çıkmak için Enter'a basın"
PowerShell scripti kullanamıyorsanız, manuel olarak da port değiştirebilirsiniz:
# Win + R tuşlarına basın ve yazın:
regedit
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
PortNumber değerini bulun49200# PowerShell (Yönetici)
Stop-Service -Name TermService -Force
Start-Sleep -Seconds 3
Start-Service -Name TermService
# veya CMD
net stop TermService
net start TermService
# En garanti yöntem: Sistemi yeniden başlatma
Restart-Computer -Force
# PowerShell ile port kontrolü
$Port = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"
Write-Host "Mevcut RDP Portu: $($Port.PortNumber)"
# Netstat ile port dinleme kontrolü
netstat -ano | findstr :49200
# Başarılı çıktı: TCP 0.0.0.0:49200 LISTENING
Port değiştirdikten sonra mutlaka güvenlik duvarında yeni portu açmalısınız!
# Yeni port için kural ekleme
New-NetFirewallRule -DisplayName "RDP Port 49200" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 49200 `
-Action Allow `
-Profile Any
# Kural kontrolü
Get-NetFirewallRule -DisplayName "RDP Port 49200"
49200RDP Port 49200# Kural ekleme
netsh advfirewall firewall add rule name="RDP Port 49200" dir=in action=allow protocol=TCP localport=49200
# Kural kontrolü
netsh advfirewall firewall show rule name="RDP Port 49200"
Sunucunuz router veya NAT arkasındaysa ve internet üzerinden erişim istiyorsanız port yönlendirme (port forwarding) yapmalısınız.
| Parametre | Açıklama | Örnek Değer |
|---|---|---|
| External Port | Dış dünyadan gelen port | 49200 |
| Internal IP | Sunucunun yerel IP adresi | 192.168.1.100 |
| Internal Port | Sunucudaki RDP portu | 49200 |
| Protocol | Bağlantı protokolü | TCP |
RDP Custom49200192.168.1.100 (sunucunuzun yerel IP'si)49200TCP# Yerel IP adresi
ipconfig | findstr IPv4
# Dış IP adresi (WAN)
(Invoke-WebRequest -Uri "https://api.ipify.org").Content
# Komut satırından
mstsc /v:192.168.1.100:49200
# İnternet üzerinden
mstsc /v:85.34.56.78:49200
# Tam ekran modunda
mstsc /v:192.168.1.100:49200 /f
192.168.1.100:49200# PowerShell ile bağlantı testi
Test-NetConnection -ComputerName 192.168.1.100 -Port 49200
# Başarılı çıktı: TcpTestSucceeded : True
# netstat ile port kontrolü
netstat -ano | findstr :49200
# Çıktı: TCP 0.0.0.0:49200 LISTENING
Çözüm:
# Port kontrolü
Test-NetConnection -ComputerName 192.168.1.100 -Port 49200
# Güvenlik duvarı kontrolü
Get-NetFirewallRule -DisplayName "*RDP*"
# Servis kontrolü
Get-Service -Name TermService
# Registry kontrolü
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name PortNumber
Hata: "cannot be loaded. The file is not digitally signed"
Çözüm:
# Execution Policy'yi geçici değiştir
Set-ExecutionPolicy Bypass -Scope Process -Force
# Scripti çalıştır
.\Set-RDPPort.ps1
Çözüm:
# Test için geçici kapat
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# Test et
Test-NetConnection -ComputerName 192.168.1.100 -Port 49200
# Tekrar aç ve doğru kuralı ekle
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
New-NetFirewallRule -DisplayName "RDP Port 49200" -Direction Inbound -Protocol TCP -LocalPort 49200 -Action Allow
Çözüm: Sistemi yeniden başlatın
Restart-Computer -Force
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
net accounts /lockoutthreshold:3 /lockoutduration:30
New-NetFirewallRule -DisplayName "RDP Sadece Ofis" -Direction Inbound -Protocol TCP -LocalPort 49200 -RemoteAddress 85.34.56.78 -Action Allow
# Başarısız giriş denemelerini izle
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} -MaxEvents 20
Windows sistemde RDP portunu başarıyla değiştirdik. Artık daha güvenli bir uzak masaüstü bağlantısına sahipsiniz!
Tamamlanan İşlemler:
Destek ve Sorular:
alestaweb.com
© 2025 AlestaDergi - Tüm hakları saklıdır.