根据 X 次不成功的 SQL 服务器登录尝试来禁止 IP 地址?

根据 X 次不成功的 SQL 服务器登录尝试来禁止 IP 地址?

是否有可能扩展提出的想法

根据 X 次不成功的登录尝试来禁止 IP 地址?

包含重复失败的 SQL Server 登录尝试的 IP 地址?

应用程序日志中针对每次失败的尝试都有日志条目。来源 = MSSQLSERVER 事件 ID = 18456 和 18452

编辑 1:在 Michael Khalili 的回复中,#Select Ip addresses that has audit failurepowershell 部分可以替换为:

#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

相关内容