[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

预防爆破MSSQL数据库PowerShell脚本求教

服务器上启用的远程桌面、MySQL数据库、MSSQL数据库
查看事件日志 发现有外网IP不停的爆破远程桌面连接 和 MySQL数据库  以及MSSQL数据库 产生大量的记录日志
远程桌面连接被爆破产生的日志是在 安全日志 中事件ID为4625
MySQL数据库被爆破产生的日志是在 应用程序日志 中事件ID为100
MSSQL数据库被爆破产生的日志是在 应用程序日志 中事件ID为18456

用PowerShell脚本来提取事件日志中的IP 然后创建防火墙规则进行屏蔽
目前远程桌面和MySQL能很好的将IP提取出来 并在防火墙中阻止链接
但是MSSQL日志中提取事提示没权限 无法提取 有坛友帮看看 是哪里需要修正吗?

将以下脚本保存为PS1后 右键 使用PowerShell运行

1、远程桌面连接被爆破将IP加入黑名单的PowerShell脚本===能正常使用:
  1. # 使用 Get-WinEvent 检索事件日志,找到日志ID,提取其中的远程IP地址,将这个地址写入到防火墙阻止规则内
  2. # 设置控制台输出编码为 GB2312 或 GBK
  3. $OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
  4. # 定义日志名称和事件ID
  5. $logName = "Security" # 安全日志=Security 应用程序日志=Application 对应<Channel>的值
  6. $eventID = 4625  # 事件ID 对应<EventID>的值
  7. # 定义时间范围
  8. $startTime = (Get-Date).AddDays(-1)  # 从一天前开始
  9. $endTime = Get-Date  # 到现在
  10. # 检索指定时间范围内的事件日志条目
  11. $filter = @{
  12.     LogName   = $logName
  13.     ID        = $eventID
  14.     StartTime = $startTime
  15.     EndTime   = $endTime
  16. }
  17. # 使用MaxEvents来设置最大日志读取条数,Oldest按事件写入的顺序输出事件,从最早到最新
  18. $events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldest
  19. foreach ($event in $events) {
  20.     $message = $event.Message
  21.     # 显示完全日志内容,用于调试
  22.     # Write-Output "完全日志内容:"
  23.     # Write-Output $message
  24.     # Write-Output "----------------------------------------"
  25.     # 使用正则匹配IP地址,这里由于Windows语言版本的不同,这样匹配成功率更高
  26.     if ($message -match "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::(\d{1,5}))?") {
  27.         $sourceAddress = $matches[1] # 匹配到IP地址
  28.         if ($sourceAddress -eq "127.0.0.1" -or $sourceAddress -eq "0.0.0.0") {
  29.             # 如果是本地回环地址,则跳过后续操作
  30.             # 如果是安全的,你已知的IP也可以加到这个步骤内
  31.             Write-Output "IP Address is localhost (127.0.0.1). 跳过防火墙规则创建."
  32.             Write-Output "----------------------------------------"
  33.             continue
  34.         }
  35.         # 检查防火墙规则是否已存在
  36.         $existingRule = Get-NetFirewallRule -DisplayName "Block IP $sourceAddress" -ErrorAction SilentlyContinue
  37.         if ($existingRule) {
  38.             Write-Output "IP $sourceAddress 防火墙规则已存在,跳过创建."
  39.         } else {
  40.             # 创建防火墙规则禁止连接该IP地址
  41.             New-NetFirewallRule -DisplayName "Block IP $sourceAddress" -Direction Inbound -Action Block -RemoteAddress $sourceAddress
  42.             Write-Output "IP $sourceAddress 防火墙规则已新建"
  43.         }
  44.     } else {
  45.         $sourceAddress = "N/A"
  46.     }
  47.     Write-Output $sourceAddress
  48. }
复制代码



2、MySQL数据库被爆破将IP加入黑名单的PowerShell脚本===能正常使用:
  1. # 使用 Get-WinEvent 检索事件日志,找到日志ID,提取其中的远程IP地址,将这个地址写入到防火墙阻止规则内
  2. # 设置控制台输出编码为 GB2312 或 GBK
  3. $OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
  4. # 定义日志名称和事件ID
  5. $logName = "Application" # 安全日志=Security 应用程序日志=Application 对应<Channel>的值
  6. $eventID = 100  # 事件ID 对应<EventID>的值
  7. # 定义时间范围
  8. $startTime = (Get-Date).AddDays(-1)  # 从一天前开始
  9. $endTime = Get-Date  # 到现在
  10. # 检索指定时间范围内的事件日志条目
  11. $filter = @{
  12.     LogName   = $logName
  13.     ID        = $eventID
  14.     StartTime = $startTime
  15.     EndTime   = $endTime
  16. }
  17. # 使用MaxEvents来设置最大日志读取条数,Oldest按事件写入的顺序输出事件,从最早到最新
  18. $events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldest
  19. foreach ($event in $events) {
  20.     $message = $event.Message
  21.     # 显示完全日志内容,用于调试
  22.     # Write-Output "完全日志内容:"
  23.     # Write-Output $message
  24.     # Write-Output "----------------------------------------"
  25.     # 使用正则匹配IP地址,这里由于Windows语言版本的不同,这样匹配成功率更高
  26.     if ($message -match "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::(\d{1,5}))?") {
  27.         $sourceAddress = $matches[1] # 匹配到IP地址
  28.         if ($sourceAddress -eq "127.0.0.1" -or $sourceAddress -eq "0.0.0.0") {
  29.             # 如果是本地回环地址,则跳过后续操作
  30.             # 如果是安全的,你已知的IP也可以加到这个步骤内
  31.             Write-Output "IP Address is localhost (127.0.0.1). 跳过防火墙规则创建."
  32.             Write-Output "----------------------------------------"
  33.             continue
  34.         }
  35.         # 检查防火墙规则是否已存在
  36.         $existingRule = Get-NetFirewallRule -DisplayName "Block IP $sourceAddress" -ErrorAction SilentlyContinue
  37.         if ($existingRule) {
  38.             Write-Output "IP $sourceAddress 防火墙规则已存在,跳过创建."
  39.         } else {
  40.             # 创建防火墙规则禁止连接该IP地址
  41.             New-NetFirewallRule -DisplayName "Block IP $sourceAddress" -Direction Inbound -Action Block -RemoteAddress $sourceAddress
  42.             Write-Output "IP $sourceAddress 防火墙规则已新建"
  43.         }
  44.     } else {
  45.         $sourceAddress = "N/A"
  46.     }
  47.     Write-Output $sourceAddress
  48. }
复制代码




3、MSSQL数据库被爆破将IP加入黑名单的PowerShell脚本===不能正常使用:
  1. # 使用 Get-WinEvent 检索事件日志,找到日志ID,提取其中的远程IP地址,将这个地址写入到防火墙阻止规则内
  2. # 设置控制台输出编码为 GB2312 或 GBK
  3. $OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
  4. # 定义日志名称和事件ID
  5. $logName = "Application" # 安全日志=Security 应用程序日志=Application 对应<Channel>的值
  6. $eventID = 18456  # 事件ID 对应<EventID>的值
  7. # 定义时间范围
  8. $startTime = (Get-Date).AddDays(-1)  # 从一天前开始
  9. $endTime = Get-Date                  # 到现在
  10. # 检索指定时间范围内的事件日志条目
  11. $filter = @{
  12.     LogName   = $logName
  13.     ID        = $eventID
  14.     StartTime = $startTime
  15.     EndTime   = $endTime
  16. }
  17. # 使用MaxEvents来设置最大日志读取条数,Oldest按事件写入的顺序输出事件,从最早到最新
  18. $events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldest
  19. foreach ($event in $events) {
  20.     $message = $event.Message
  21.     # 显示完全日志内容,用于调试
  22.     # Write-Output "完全日志内容:"
  23.     # Write-Output $message
  24.     # Write-Output "----------------------------------------"
  25.     # 使用正则匹配IP地址,这里由于Windows语言版本的不同,这样匹配成功率更高
  26.     if ($message -match "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::(\d{1,5}))?") {
  27.         $sourceAddress = $matches[1] # 匹配到IP地址
  28.         if ($sourceAddress -eq "127.0.0.1" -or $sourceAddress -eq "0.0.0.0") {
  29.             # 如果是本地回环地址,则跳过后续操作
  30.             # 如果是安全的,你已知的IP也可以加到这个步骤内
  31.             Write-Output "IP Address is localhost (127.0.0.1). 跳过防火墙规则创建."
  32.             Write-Output "----------------------------------------"
  33.             continue
  34.         }
  35.         # 检查防火墙规则是否已存在
  36.         $existingRule = Get-NetFirewallRule -DisplayName "Block IP $sourceAddress" -ErrorAction SilentlyContinue
  37.         if ($existingRule) {
  38.             Write-Output "IP $sourceAddress 防火墙规则已存在,跳过创建."
  39.         } else {
  40.             # 创建防火墙规则禁止连接该IP地址
  41.             New-NetFirewallRule -DisplayName "Block IP $sourceAddress" -Direction Inbound -Action Block -RemoteAddress $sourceAddress
  42.             Write-Output "IP $sourceAddress 防火墙规则已新建"
  43.         }
  44.     } else {
  45.         $sourceAddress = "N/A"
  46.     }
  47.     Write-Output $sourceAddress
  48. }
复制代码



以上脚本中MSSQL使用的在执行后会提示无权限,有哪位坛友能帮修正下吗?

[i=s] 本帖最后由 绿光科技 于 2025-1-17 23:10 编辑 [/i]

以上三个脚本 还是会提示报错信息 但是不影响使用:
报错信息一:
设置“OutputEncoding”时发生异常:“句柄无效。”
+ $OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]: ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException
    + FullyQualifiedErrorId : ExceptionWhenSetting

第三个MSSL的脚本还会报错==使得无法执行 无法达到想要的效果
报错信息二--只有MSSQL的脚本才会这样:
Get-WinEvent : 尝试执行未经授权的操作。
+ $events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldes ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-WinEvent], UnauthorizedAccessException
    + FullyQualifiedErrorId : 尝试执行未经授权的操作。,Microsoft.PowerShell.Commands.GetWinEventCommand

TOP

请问怎么修正 让
3、MSSQL数据库被爆破将IP加入黑名单的PowerShell脚本
能达到正常使用 并达到相关效果

TOP

试试用system用户运行脚本;可以创建一个计划任务,用户是system
微信:flashercs
QQ:49908356

TOP

回复 4# flashercs


    好像可以

TOP

返回列表