Всем доброго дня. Подскажите пожалуйста как в PS правильно выцеплять аргументы из event log виндового журнала? Заметил, что ломятся на sql сервер ко мне. выглядит вот так:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="MSSQLSERVER" />
<EventID Qualifiers="49152">18456</EventID>
<Level>0</Level>
<Task>4</Task>
<Keywords>0x90000000000000</Keywords>
<TimeCreated SystemTime="2021-03-09T12:07:20.000000000Z" />
<EventRecordID>5858623</EventRecordID>
<Channel>Application</Channel>
<Computer>user_or</Computer>
<Security />
</System>
- <EventData>
<Data>sa</Data>
<Data>Reason: Password did not match that for the login provided.</Data>
<Data>[CLIENT: 210.212.172.117]</Data>
<Binary>184800000E0000000800000055005300450052005F004F0052000000070000006D00610073007400650072000000</Binary>
</EventData>
</Event>
По тех заданию нельзя отключать sa юзера. Хочу сделать авто бан адресов из поля client, но что-то видимо с моим скриптом не то. Подскажите куда копать? Скрипт ниже:
$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$badRDPlogons = Get-EventLog -LogName 'Application' -after $Last_n_Hours -InstanceId 18456 | ?{$_.Message -match 'sa'} | Select-Object @{n='CLIENT';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property CLIENT | where {$_.Count -gt 5} | Select -property Name
$log = "C:\ps\blocked_ip.txt"
$current_ips = (Get-NetFirewallRule -DisplayName "BlockSQLBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
{
$current_ips += $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' IP заблокирован за ' + ($badRDPlogons | where {$_.CLIENT -eq $ip.name}).count + ' попыток за 2 часа'>> $log # запись события блокировки IP адреса в лог файл
}
Set-NetFirewallRule -DisplayName "BlockSQLBruteForce" -RemoteAddress $current_ips
буду благодарен любой помощи