Windows Server 2019 yada daha önceki sürümlerine ait işletim sistemlerinde PowerShell de yazılmış olan bir script ile engelleyebilirsiniz. Hatta bir kere oluşturduğunuz bir firewall kuralını script ile güncelleyebilir gelen RDP ataklarını engelleyebilirsiniz. İşi biraz daha ileri seviyeye taşıyarak bu scripti Task Scheduler üzerinde tanımlayarak günlük olarak işlemi yapabilirsiniz. 

İlk olarak yapmanız gereken Windows Firewall üzerinden RDP ataklarını engellemek için bir rule oluşturmanız. Bu rule için aşağıdaki adımlar size rehberlik edecektir. 

Windows 2019 desktop experience ile firewall kural işlemlerini gerçekleştirmek için;


  1. Control Panel açınız
    1. "Windows Defender" Firewall tıklayınız.
    2. Sol bölümde bulunan "Advanced settings" tıklayınız
    3. Sol menüde bulunan inbound rules yada outbound rules tanımlaması yapabilirsiniz.
      1. Inbound rules tıklayınız.
        1. Sağ bölümde bulunan "New Rule…" tıklayınız.
          1. Port tabanlı izin yönetimi yapmak için Port seçiniz. Port tipini belirleyiniz. Block olarak tanımlama yapınız. Kuralın geçerli olduğu scope kriterleri seçip ismini belirleyiniz.

Firewall yönetimi ve RDP  firewall yapılandırması için daha fazla bilgiye ihtiyacınız var ise aşağıdaki linkleri inceleyiniz. 

https://social.technet.microsoft.com/wiki/contents/articles/52670.windows-server-2019-firewall-yaplandrmas-tr-tr.aspx
https://social.technet.microsoft.com/wiki/contents/articles/52789.windows-server-temel-guvenlik-yaplandrmas-tr-tr.aspx?wa=wsignin1.0

Belirlediğiniz isim ile aşağıdaki kod üzerinde ilgili yerlere kural isminizi giriniz.  PS1 dosyası olarak kaydediniz. Yönetici olarak çalıştırarak işlemi tamamlayabilirsiniz. 

# Firewall uzerinde tanimladiginiz kuralin adini yazınız
$firewallRuleName = "RDP Atak Engelle"
 
# Karalisteye eklenmetecek IP adreslerini yada hostnamelerini tanimlayiniz.
$whiteList = @(
   [System.Net.Dns]::GetHostAddresses("powershell-ozan, Ozan-WI, 192.168.2.101").IPAddressToString
   )
 
 
### kod ###
Write-Host "Running at $(Get-Date)"
$regExIp = "\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?"
 
# RDS icin olusan Event loglardan 140 tanesini incele
$currentAttackers = Get-Winevent Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational | Where-Object {$_.Id -eq 140} | Select Message -ExpandProperty Message
 
# Response yok ise saldırı yoktur.
if ($currentAttackers -eq $null) {
   Write-Host "No current attackers"
   return
}
 
# Her saldırı mesajını alın ve yukarıdaki regExIP'i kullanarak IP'yi filtreleyin
for ($i = 0; $i -lt $currentAttackers.Count; $i++) {
   if ($currentAttackers[$i] -match $regExIp){
      $currentAttackers[$i] = $Matches[0]
   }
}
 
# Bilinen saldırganları güvenlik duvarı kurallarından alın
$knownAttackers = (Get-NetFirewallRule -DisplayName $firewallRuleName | Get-NetFirewallAddressFilter).RemoteAddress
if ($knownAttackers -eq $null){
   $knownAttackers = @()
}
$knownAttackers = $knownAttackers | Sort-Object -Unique
 
# Kaydedilen her login kaydını kontrol et ve daha önce saldırgan olarak bilinip bilinmediğini kontrol et
foreach($newAttacker in $currentAttackers) {
   if ($knownAttackers.Contains($newAttacker)) { #Bilinen bir IP ise işlem yapma
      continue
   }
   elseif ($whiteList -contains $newAttacker) { #Beyaz Listeye alınmış ise işlem yapma
      Write-Host "$newAttacker is dynamically whitelisted"
      continue
   }
   else{ #Yeni bir saldırgan kara listeye ekle 
      $knownAttackers += $newAttacker
      Write-Host "Added $newAttacker"
   }
}
 
# dublicate'leri kaldırın
$knownAttackers = $knownAttackers | Sort-Object -Unique
Write-Host "$($knownAttackers.Count) IPs on blacklist"
 
# Tüm bilinen ve tüm yeni tespit edilen saldırganlarla Firwall kurallarını düzenle
Set-NetFirewallRule -DisplayName $firewallRuleName "RDP Atak Engelle" -RemoteAddress $knownAttackers
Write-Host ""


Kaynak: reukauff.eu