使用 PowerShell 脚本监控特定 IP 地址频繁登录 Windows 服务器,您可以检查安全日志,特别是事件 ID 4625(登录失败)和事件 ID 4624(成功登录)。通过分析这些日志,您可以找出哪些 IP 地址尝试过频繁的登录,并进行进一步的处理或警告。PowerShell 脚本示例,监控并记录频繁登录失败的 IP 地址

使用 PowerShell 脚本监控特定 IP 地址频繁登录 Windows 服务器,您可以检查安全日志,特别是事件 ID 4625(登录失败)和事件 ID 4624(成功登录)。通过分析这些日志,您可以找出哪些 IP 地址尝试过频繁的登录,并进行进一步的处理或警告。

以下是一个 PowerShell 脚本示例,监控并记录频繁登录失败的 IP 地址:

PowerShell 脚本:监控频繁登录的 IP 地址

powershellCopy Code
# 设置要监控的日志和事件
$logName = "Security"
$failedLogonEventID = 4625
$successfulLogonEventID = 4624
$threshold = 5 # 登录失败的次数阈值
$timeWindow = (Get-Date).AddMinutes(-30) # 时间窗口:过去30分钟

# 获取过去30分钟内的登录失败日志
$failedLogons = Get-WinEvent -LogName $logName -FilterXPath "*[System[EventID=$failedLogonEventID]]" | Where-Object {
    $_.TimeCreated -gt $timeWindow
}

# 提取并统计每个 IP 地址的登录失败次数
$failedLogons | ForEach-Object {
    $message = $_.Message
    if ($message -match "Source Network Address\s*:\s*(\d+\.\d+\.\d+\.\d+)") {
        $ipAddress = $matches[1]
        $ipAddress
    }
} | Group-Object | Where-Object { $_.Count -ge $threshold } | ForEach-Object {
    Write-Host "IP 地址 $($_.Name) 在过去30分钟内登录失败次数: $($_.Count)"
}

# 获取过去30分钟内的成功登录日志
$successfulLogons = Get-WinEvent -LogName $logName -FilterXPath "*[System[EventID=$successfulLogonEventID]]" | Where-Object {
    $_.TimeCreated -gt $timeWindow
}

# 提取并统计每个 IP 地址的成功登录次数
$successfulLogons | ForEach-Object {
    $message = $_.Message
    if ($message -match "Source Network Address\s*:\s*(\d+\.\d+\.\d+\.\d+)") {
        $ipAddress = $matches[1]
        $ipAddress
    }
} | Group-Object | ForEach-Object {
    Write-Host "IP 地址 $($_.Name) 在过去30分钟内成功登录次数: $($_.Count)"
}

解释:

  1. 设置日志和事件

    • $logName 设置为 "Security",这是 Windows 安全日志的名称。
    • $failedLogonEventID 设置为 4625,表示登录失败事件。
    • $successfulLogonEventID 设置为 4624,表示登录成功事件。
    • $threshold 设置为 5,表示如果一个 IP 地址在指定时间窗口内有 5 次或更多的登录失败,则认为该 IP 地址有异常活动。
    • $timeWindow 设置为过去30分钟,可以根据需要调整。
  2. 获取失败的登录事件

    • 使用 Get-WinEvent 命令从安全日志中检索所有事件 ID 为 4625 的日志。
    • Where-Object 用来筛选出过去 30 分钟内的事件。
    • 正则表达式 Source Network Address 用来提取 IP 地址。
  3. 统计每个 IP 地址的登录失败次数

    • 使用 Group-Object 按 IP 地址分组,统计每个 IP 地址的登录失败次数。
    • 如果某个 IP 地址在指定时间窗口内的登录失败次数超过阈值,则输出该 IP 地址。
  4. 获取成功的登录事件

    • 类似的方式获取成功的登录事件,统计每个 IP 地址的成功登录次数。

如何使用:

  1. 将此脚本保存为 .ps1 文件,例如 monitor_logon_attempts.ps1
  2. 右键点击文件,选择 "以管理员身份运行" PowerShell。
  3. PowerShell 会输出频繁登录失败和成功的 IP 地址。

进一步改进:

  • 可以将输出结果保存到文件中,以便进一步分析。
  • 如果需要监控特定的 IP 地址,可以修改脚本筛选出目标 IP 地址。
  • 对于更复杂的场景,可以将结果发送到邮件或报警系统,及时通知管理员。

 

posted @ 2025-01-18 17:57  suv789  阅读(183)  评论(0)    收藏  举报