是否有可能扩展提出的想法
包含重复失败的 SQL Server 登录尝试的 IP 地址?
应用程序日志中针对每次失败的尝试都有日志条目。来源 = MSSQLSERVER 事件 ID = 18456 和 18452
编辑 1:在 Michael Khalili 的回复中,#Select Ip addresses that has audit failure
powershell 部分可以替换为:
#Select Ip addresses that has audit failure
$l = Get-EventLog -LogName 'Application' -InstanceId 3221243928 -After $DT | Select-Object @{n='CLIENT';e={$_.ReplacementStrings[-1]} }
这给出了应用程序日志中的列表,但与 powershell 部分的格式不同#Get ip addresses, that have more than x wrong logins
。
我不确定这个选择是否正确。
答案1
查看ts_block。我在我的 win2k3 服务器上使用它来阻止多次失败的 ssh 尝试,效果很好。只需修改远程 MSSQL 连接的配置即可。
答案2
我想我解决了这个问题...我明白了以前的想法,你的线路检索数据并执行了一些修改...这里是......
(抱歉我的代码很脏。这是我第一次使用 PS)
$DT = [DateTime]::Now.AddDays(-1)
$l = Get-EventLog -LogName 'Application' -InstanceId 3221243928 -After $DT | Select-Object @{n='CLIENT';e={$_.ReplacementStrings[-1]} }
$g = $l | group-object -property CLIENT | where {$_.Count -gt 10} | Select -property Name
$fw = New-Object -ComObject hnetcfg.fwpolicy2
$ar = $fw.rules | where {$_.name -eq 'Blocks'}
$arRemote = $ar.RemoteAddresses -split(',')
$w = $g | where {$_.Name.Length -gt 1 -and !($arRemote -contains $_.Name + '/255.255.255.255') }
$x = $w.Name.Replace(" [CLIENT: ","")
$z = $x.Replace("]","")
$h = ""
for($i=0;$i -lt $z.Count;$i++)
{
$h += $z[$i]
$h +="/255.255.255.255"
$h += ","
}
$full = $h + $ar.remoteaddresses
$fullarray = $full.Split(',')
$newlist = $fullarray | select -uniq
$ips = "";
for($i=0;$i -lt $newlist.Count;$i++)
{
$ips += $fullarray[$i]
if($i -lt ($newlist.Count -1))
{
$ips +=","
}
}
$w| %{$ar.remoteaddresses = $ips} # add IPs to firewall rule