কম্পিউটার টিউটোরিয়াল

PowerShell এবং Windows Firewall Rules দিয়ে RDP Brute Force প্রোটেকশন

আমার মনে হয়েছিল একটি সিম্পল PowerShell স্ক্রিপ্ট লিখব যেটি স্বয়ংক্রিয়ভাবে IP অ্যাড্রেস ব্লক করবে (ব্ল্যাকলিস্ট), যেখানে RDP brute-force চেষ্টা বা 지속적인 RDP আক্রমণ ডিটেক্ট হয়, Windows Firewall-এ। আইডিয়া হলো: PowerShell স্ক্রিপ্ট সিস্টেম ইভেন্ট লগ অ্যানালাইজ করবে এবং যদি একই IP অ্যাড্রেস থেকে গত তিন ঘন্টাতে RDP経由で অথেন্টিকেশন ব্যর্থ হওয়ার ৫টির বেশি চেষ্টা ডিটেক্ট হয়, তবে সেই IP অ্যাড্রেস স্বয়ংক্রিয়ভাবে Windows Firewall ব্লকিং রুলে যোগ হয়ে যাবে।

তো, একটি ছোট অফিস নেটওয়ার্ক আছে। এটিতে এক্সেস করতে একটি RDP পোর্ট NATের মাধ্যমে ইন্টারনেট গেটওয়ে (Linux চলমান) থেকে অফিসের একটি কম্পিউটারে ফরোয়ার্ড করা আছে (বাইর থেকে TCP 15221 جواب দিচ্ছে, এবং ডিফল্ট RDP পোর্ট ৩৩৮৯ আঁদরে ফরোয়ার্ড করা আছে)। সময় সময় পরিচিত ইউজার অ্যাকাউন্ট লক হয়ে যাচ্ছে ডোমেন পাসওয়ার্ড পলিসির কারণে RDP経由で কম্পিউটারে অথেন্টিকেশন করতে ব্যর্থ চেষ্টার কারনে। আমাদের কাজ হলো আমাদের RDP সার্ভারে brute force করার জন্য ব্যবহৃত IP অ্যাড্রেস স্বয়ংক্রিয়ভাবে ব্লক করা।

প্রথমে, কম্পিউটারে একটি ফায়ারওয়াল রুল তৈরি করুন নির্দিষ্ট IP অ্যাড্রেস থেকে ইনবাউন্ড RDP কানেকশন ব্লক করার জন্য:

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block

PowerShell এবং Windows Firewall Rules দিয়ে RDP Brute Force প্রোটেকশন

আমরা আরও এই ফায়ারওয়াল রুলে আটাকের IP অ্যাড্রেস যোগ করব যেখানে RDP brute-force চেষ্টা ডিটেক্ট হয়েছে।

আপনি একটি অ্যালাউ রুল লিখতে পারেন যাতে PowerShell স্ক্রিপ্ট আপনার দরকারি IP অ্যাড্রেস বা সাবনেট ব্লক না করে।

তারপর Windows ইভেন্ট লগ থেকে আক্রমণকারী IP অ্যাড্রেসের তালিকা সংগ্রহ করতে হবে, যেখানে গত ৩ ঘন্টাতে ৫টির বেশি ব্যর্থ অথেন্টিকেশন চেষ্টা ডিটেক্ট হয়েছে। এর জন্য Security লগে EventID 4625 (ব্যর্থ অ্যাক্সেস চেষ্টা — An account failed to log on এবং LogonType = 3, চেক করুন আর্টিকেল RDP Event Log Forensics) वाले ইভেন্ট খুঁজে বের করুন। খুঁজে পাওয়া ইভেন্টগুলোর IP অ্যাড্রেস খুঁজে বের করুন যিনি কানেক্ট করার চেষ্টা করেছে এবং নিশ্চিত করুন যে সেটি ইভেন্ট লগে ৫টির বেশি বার এসেছে।

গত ৩ ঘন্টার ইভেন্ট লিস্ট থেকে আক্রমণকারী IP অ্যাড্রেস সিলেক্ট করার জন্য আমি নিচের PowerShell কোড ব্যবহার করছি (সময় আঁদর পরিবর্তন করতে পারেন):

$Last_n_Hours = [DateTime]::Now.AddHours(-3)
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'logon type:\s+(3)\s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name

খুঁজে পাওয়া IP অ্যাড্রেস তালিকা দেখতে ব্যবহার করুন: $getip

এখন আগে তৈরি করা ফায়ারওয়াল রুল BlockRDPBruteForce-এ সব খুঁজে পাওয়া আক্রমণকারী IP অ্যাড্রেস যোগ করুন। Windows Firewall ম্যানেজ করার জন্য আমরা বিল্ট-ইন PowerShell মডিউল NetSecurity ব্যবহার করব। প্রথমে বর্তমানে ব্লক করা IP অ্যাড্রেসের তালিকা পান এবং নতুনগুলো যোগ করুন।

$log = "C:\ps\rdp_blocked_ip.txt"
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
{
$current_ips += $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' The IP address has been blocked due to ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' attempts for 2 hours'>> $log # IP ব্লক করার ইভেন্ট লগ ফাইলে লেখা
}
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

PowerShell এবং Windows Firewall Rules দিয়ে RDP Brute Force প্রোটেকশন

নিশ্চিত করুন যে নতুন IP অ্যাড্রেসগুলো Windows Defender Firewall-এ ব্লকিং রুলে যোগ হয়েছে।

PowerShell এবং Windows Firewall Rules দিয়ে RDP Brute Force প্রোটেকশন

এখন আপনাকে শুধু এই PowerShell কোডটি c:\ps\block_rdp_attack.ps1 ফাইলে কপি করে Task Scheduler-এ যোগ করতে হবে প্রতি ২ ঘন্টায় একবার চালানোর জন্য, উদাহরণস্বরূপ।

PowerShell স্ক্রিপ্ট বা ম্যানুয়ালি Scheduler টাস্ক তৈরি করা যায়:

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\block_rdp_attack.ps1"
Register-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

অথবা আপনি আপনার PowerShell স্ক্রিপ্ট চালাতে পারেন EventID 4625 লগে আসলে (চেক করুন ব্লগপোস্ট Windows Event Triggers), যাতে RDP brute-force আক্রমণে দ্রুত প্রতিক্রিয়া দেখাতে পারেন।

আপনি এই স্ক্রিপ্ট আপনার প্রয়োজন অনুযায়ী মডিফাই করে RDP আক্রমণ ব্লক করতে ব্যবহার করতে পারেন।

  1. PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

  2. উইন্ডোজ ১০-এ ফায়ারওয়াল এবং নেটওয়ার্ক প্রটেকশন এরিয়া লুকানোর উপায়

  3. উইন্ডোজ ১০ ফায়ারওয়াল সেটিংস:mাস্টার করুন: নিরাপদ ইনবাউন্ড এবং আউটবাউন্ড ট্রাফিকের জন্য নিয়ম ফাইন-টিউনিং

  4. ভিজ্যুয়াল স্টুডিও কোড দিয়ে উইন্ডোজ ১০ ও ১১-এ পাওয়ারশেল স্ক্রিপ্ট বিল্ড ও রান করার বिगিনার গাইড