Недавно столкнулся с тем, что на одном из удалённых серверов кто-то активно шёл в атаку по RDP: в логах сыпались сотни неудачных входов, и пока мониторинг не среагировал — уже появились незнакомые пользователи. Чтобы оперативно блокировать «злых» IP, я написал небольшой PowerShell-скрипт:
# Порог попыток за период (например, 5 за 10 минут)
$Threshold = 5
$Window = (Get-Date).AddMinutes(-10)
# Получаем все события неудачных входов по RDP (EventID 4625)
$BadLogons = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4625
StartTime = $Window
} |
Where-Object {
$_.Properties[18].Value -like '10.0.0.*' -and # ваш диапазон RDP, если нужен
$_.Properties[8].Value -eq '192.168.1.10' -eq $false # исключаем локальный
} |
Select-Object @{n='IP';e={$_.Properties[18].Value}}
# Группируем по IP и фильтруем по порогу
$BadLogons | Group-Object IP | Where-Object Count -gt $Threshold | ForEach-Object {
$ip = $_.Name
# Проверяем, нет ли уже правила
if (-not (Get-NetFirewallRule -DisplayName "Block-RDP-$ip" -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName "Block-RDP-$ip" `
-Direction Inbound `
-Action Block `
-RemoteAddress $ip `
-Protocol TCP `
-LocalPort 3389
Write-Host "Заблокирован IP $ip за $($_.Count) неудачных попыток"
}
}
Этот скрипт запускаю по таймеру через Task Scheduler каждые 5 минут — и он автоматически режет «лишние» адреса.
💬 А как вы защищаете RDP? Используете RD Gateway, VPN или более хитрые решения? Поделитесь практиками в комментариях!
👉 @win_sysadmin