Есть Windows10 или WindowsServer2019, который светится в интернете удаленным рабочим столом. И есть люди, которые не могут жить без того, что бы не попытаться получить доступ к нему. Делают они это перебором паролей, захламляя ваш лог по полной (((
Задача:
Найти и забанить ИП тех, кто перебирает пароли к терминальному серверу
Реализация:
Открываем PewerShell от имени администратора и создаем правило в файрвол для бана. Конечно, брандмауэр должен быть включен.
Код: Выделить всё
New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 94.198.196.132 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block
Теперь можно создать пару файлов block_ip_rdp.ps1 и blocked_ip_rdp.txt - во второй будет писаться когда и кого забанили, а вот первый следующего содержания:
Код: Выделить всё
$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$log = "C:\Users\roman\Documents\blocked_ip_rdp.txt"
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'Тип входа:\s+(3)\s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name
#$getip>$log
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress -split(",")
foreach ($ip in $getip)
{
if ($ip.name -and $ip.name -ne "-" -and !($current_ips -contains $ip.Name)) {
$current_ips += $ip.name
# Write-Output $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' IP заблокирован за ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' попыток за 2 часа'>> $log # запись события блокировки IP адреса в лог файл
}
}
#Write-Output "---------------------------------"
#Write-Output $current_ips
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips
Если выполнение сценариев в системе запрещен, но это легко исправить
Код: Выделить всё
Set-ExecutionPolicy Unrestricted
https://winnote.ru/security/160-windows ... steme.html