×

windows远程桌面端口链接(RDP)防暴力破解小工具

hqy hqy 发表于2025-03-11 10:28:56 浏览29 评论0

抢沙发发表评论

机房服务器每天都有大量的暴力破解攻击来自远程桌面端口。因为工作原因又不能关闭远程桌面服务RDP(mstsc),如何防范攻击?
首先要确定是否被攻击:打开控制面板-Windows工具-事件查看器-Windows日志-安全
查看是否有大量事件ID为4625的日志,关键字是审核失败,代表有大量攻击者尝试远程登陆本机。
下面是一些初步的防范机制:
1.修改3389端口或外网映射端口:刚发现被暴力破解的时候可以临时用一下,可以暂停对方的攻击,但是治标不治本,对方的攻击脚本隔一段时间会再次扫描所有端口以发现最新的远程桌面登陆端口。
2.修改windows账户用户名:这个效果还是可以的,攻击者基本都是尝试administrator账户名和admin等常用账户名发起攻击,如果是服务器,换用户名也比较麻烦,就算换名字,黑客也会提前收集一些常见名称,及网络上抓取到的网名来做字典尝试暴力破解。一般将administrator超级用户名改为中文名更可靠
3.网关,防火墙设备上做IP限制等规则:如果你每次都是固定IP去远程连接主机,添加白名单/建立ALC规则,这是最简单的办法,但是缺点就是有时候在外面需要换IP,或者用手机连一连那就不行.
4.勤打补丁:这个办法也是亡羊补牢,黑客的嗅觉永远比你打补丁要快.对付一些老旧的已知漏洞攻击而非暴力破解的漏洞比较管用.
5.安装ESET服务器版杀毒软件,自带的防火墙是有远程桌面端口攻击的防御规则,可以有效防御远程桌面端口被暴力破解。
6.修改安全策略: 修改安全策略,将账户策略-账户锁定策略启用,这个办法的确可以防止继续暴力破解,但是导致你自己也无法登陆服务器.
7.复杂密码:这个只是拖延了对方破解的时间,除非密码非常的变态,你自己都记不住.一个强密码可以至少抵御几天的攻击不被暴力破解,也不是长久之计.
8.最后就是根据攻击者IP做阻止策略:这个比较方便和安全,一旦发现一个IP尝试暴力破解,就禁止这个IP再连接服务器,这样再多的攻击也不怕.
详细方法:
建立一个文本文档,写入一下内容后保存为blockIP.txt, 然后将后缀名txt修改为: ps1

# 使用 Get-WinEvent 检索事件日志,找到登录失败的日志(ID=4625),提取其中的远程IP地址,将这个地址写入到防火墙阻止规则内
# 设置控制台输出编码为 GB2312 或 GBK
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
# 定义日志名称和事件ID
$logName = "Security" # 安全日志
$eventID = 4625  # 登录失败的事件ID

# 定义时间范围
$startTime = (Get-Date).AddDays(-1)  # 从一天前开始
$endTime = Get-Date  # 到现在

# $startTime = Get-Date "2024-06-23 00:00:00" # 自定义一个开始时间
# $endTime = Get-Date "2024-06-24 00:00:00" #自定义一个结束时间

# 检索指定时间范围内的事件日志条目
$filter = @{
    LogName   = $logName
    ID        = $eventID
    StartTime = $startTime
    EndTime   = $endTime
}
# 使用MaxEvents来设置最大日志读取条数,Oldest按事件写入的顺序输出事件,从最早到最新
$events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldest

foreach ($event in $events) {
    $message = $event.Message
    # 显示完全日志内容,用于调试
    # Write-Output "完全日志内容:"
    # Write-Output $message
    # Write-Output "----------------------------------------"
    # 使用正则匹配IP地址,这里由于Windows语言版本的不同,这样匹配成功率更高
    if ($message -match "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::(\d{1,5}))?") {
        $sourceAddress = $matches[1] # 匹配到IP地址
        if ($sourceAddress -eq "127.0.0.1") {
            # 如果是本地回环地址,则跳过后续操作
            # 如果是安全的,你已知的IP也可以加到这个步骤内
            Write-Output "IP Address is localhost (127.0.0.1). 跳过防火墙规则创建."
            Write-Output "----------------------------------------"
            continue
        }
        # 获取当前防火墙规则名称是否已经建立
        $existingRule = Get-NetFirewallRule -DisplayName "Block IP $sourceAddress" -ErrorAction SilentlyContinue
        if ($existingRule) {
            Write-Output "IP $sourceAddress 防火墙规则已存在,跳过创建."
        } else {
            # 创建防火墙规则禁止连接该IP地址
            New-NetFirewallRule -DisplayName "Block IP $sourceAddress" -Direction Inbound -Action Block -RemoteAddress $sourceAddress
            Write-Output "IP $sourceAddress 防火墙规则已新建"
        }
    } else {
        $sourceAddress = "N/A"
    }
    Write-Output $sourceAddress
}


接下来,以管理员身份右键"使用powershell运行"blockIP.ps1
执行后,进入控制面板-Windows Defender 防火墙-高级设置-入站规则:
可以看到建立好以BlockIP为名的IP阻断规则.
但是这个脚本有个不好的地方就是会将所以登录错误的IP列入进去
假如你自己仅仅只有登录一次错误 也会被列入进去
所以脚本还需要改进 比如达到5次以上登录错误才会提取IP到防火墙阻断规则中去


本文链接:https://hqyman.cn/post/9450.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏