Если вы уже мониторите события 4625 (неудачные входы по RDP), следующий шаг — автоматическая блокировка IP-адресов, которые слишком активно пытаются попасть на сервер.
Вот скрипт, который парсит события и блокирует агрессивные IP:
# RDPBlockBadIPs.ps1
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625;
StartTime = (Get-Date).AddMinutes(-15)
} | Where-Object {
$_.Properties[10].Value -eq '10' # Logon Type 10 = RDP
}
$badIPs = $events |
Group-Object { $_.Properties[18].Value } |
Where-Object { $_.Count -ge 5 } | # Порог блокировки
Select-Object -ExpandProperty Name
foreach ($ip in $badIPs) {
if ($ip -and ($ip -match '\d+\.\d+\.\d+\.\d+')) {
Write-Host "Блокирую IP: $ip"
New-NetFirewallRule -DisplayName "Block RDP Brute $ip" `
-Direction Inbound `
-RemoteAddress $ip `
-Action Block `
-Protocol TCP `
-LocalPort 3389 `
-Profile Any
}
}
📌 Что делает скрипт:
- Ищет за последние 15 минут события 4625 по RDP
- Вычисляет IP-адреса с 5+ неудачами
- Создаёт firewall-правило на блокировку
💡 Можно запустить по расписанию через
Scheduled Task, как в предыдущем посте. А если хочется очистку — можно добавить автоудаление блоков по TTL.⚠️ Важно: не переусердствуйте — может прилететь блокировка легитимного VPN или админа. Лучше держать whitelist.
💬 А вы используете автоматические блокировки? Или предпочитаете fail2ban на edge-хостах/Linux-бастионках?
👉 @win_sysadmin