Cressida
(Cressida)
1
最近阿里云服务器一台windows系统的链接时经常提示下图 ,但是我的一般设置都是记录密码,不可能有错误密码的连接。因此不应该提示这个。
导出服务器日志中的登录失败记录
72小时内共被尝试登录3.5万次其中 79.124.56.98
(国外IP)尝试登录9千次。其他很多ip尝试登录超3千次。虽然我的服务器不是弱口令,但是总被暴力破解登录挺不舒服的。
意想不到:
好几年了,一直是开放全部端口,从不认为自己的数据有任何商业价值,所以从未想过会被攻击。(当然也没想到他攻击我的服务器仅为那点可怜的算力)
尝试解决:
本以为软件只尝试默认端口,因此我也尝试了修改默认端口号,但仍然被攻击,他们应该是扫端口号了。
重点提醒:
开发的朋友应该都喜欢设置放开全部端口,最少放开了ssh、rdp和mysql等常用端口,请慎重!
解决办法(非最好):
在安全组只开放了80和443,其他端口设置拒绝,允许我的ip连接其他端口。缺点:家宽会变ip
补充: 家宽变化有规律,一般ip的前三字节不会变,因此可以设置安全组放开 ip xxx.xxx.xxx.0/24 的访问,这样即使宽带ip变化也不会有太大问题
佛系解决办法:
密码上强度,攻击无所谓。
疑问
1.怀疑是不是针对阿里云的尝试,有没有用腾讯云的朋友,看一下有没有登录失败日志。
2.有没有软路由的朋友且映射了公网,看一下自己的后台有没有失败日志。
6 个赞
线上的Windows系统如果开了远程桌面,就非常容易被攻击。除了增加密码的强度,再有就是尽量的改掉所有的端口号。
1 个赞
Cressida
(Cressida)
6
主要是家宽ip会变,如果是白名单可以直接设置安全组或者系统自带防火墙
1 个赞
GMYXDS
(GMYXDS)
9
有的,有api的,你找找,开个accesskey就行了。就防火墙的api
k452b
10
powershell脚本
远程桌面登录失败10次拉黑IP
# 设置控制台输出编码为 GB2312 或 GBK
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
# 定义日志名称和事件ID
$logName = "Security" # 安全日志
$eventID = 4625 # 登录失败的事件ID
# 定义时间范围
$startTime = (Get-Date).AddDays(-1) # 从24小时前开始
$endTime = Get-Date # 到现在
# 检索指定时间范围内的事件日志条目
$filter = @{
LogName = $logName
ID = $eventID
StartTime = $startTime
EndTime = $endTime
}
$events = Get-WinEvent -FilterHashtable $filter -MaxEvents 100 -Oldest
# 创建一个字典来记录每个IP地址的失败次数
$ipCounts = @{}
foreach ($event in $events) {
$message = $event.Message
# 使用正则匹配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") {
# 如果是本地回环地址,则跳过后续操作
continue
}
# 记录IP地址的失败次数
if (-not $ipCounts.ContainsKey($sourceAddress)) {
$ipCounts[$sourceAddress] = 0
}
$ipCounts[$sourceAddress]++
}
}
# 检查每个IP地址的失败次数,如果超过10次,则创建防火墙规则
foreach ($ip in $ipCounts.Keys) {
if ($ipCounts[$ip] -ge 10) {
# 获取当前防火墙规则名称是否已经建立
$existingRule = Get-NetFirewallRule -DisplayName "Block IP $ip" -ErrorAction SilentlyContinue
if ($existingRule) {
Write-Output "IP $ip 防火墙规则已存在,跳过创建."
} else {
# 创建防火墙规则禁止连接该IP地址
New-NetFirewallRule -DisplayName "Block IP $ip" -Direction Inbound -Action Block -RemoteAddress $ip
Write-Output "IP $ip 防火墙规则已新建"
}
} else {
Write-Output "IP $ip 失败次数: $($ipCounts[$ip]),不足10次,跳过创建防火墙规则."
}
}
# 原创内容,转载请带上原作者信息:作者:ioripalm
添加到任务计划
打开任务计划程序:
按 Win + R,输入 taskschd.msc,然后按 Enter。
创建基本任务:
在右侧窗格中,点击 创建基本任务…。
输入任务名称,例如 BlockFailedLoginIPs,然后点击 下一步。
设置触发器:
选择 当特定事件被记录时,然后点击 下一步。
在 日志 下拉菜单中选择 Security。
在 源 下拉菜单中选择 Microsoft-Windows-Security-Auditing。
在 事件ID 中输入 4625,然后点击 下一步。
设置操作:
选择 启动程序,然后点击 下一步。
浏览并选择 PowerShell 的路径(通常是 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe)。
在 添加参数 框中输入:
powershell
深色版本
-NoProfile -ExecutionPolicy Bypass -File “C:\Users\Administrator\Desktop\blockIP.ps1”
点击 下一步,然后点击 完成。
释放拉黑IP
# 设置控制台输出编码为 GB2312 或 GBK
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312")
# 定义时间范围
$releaseTime = (Get-Date).AddHours(-24) # 从24小时前开始
# 获取所有被封锁的IP地址的防火墙规则
$rules = Get-NetFirewallRule | Where-Object { $_.DisplayName -like "Block IP *" }
foreach ($rule in $rules) {
$ip = $rule.DisplayName -replace "Block IP ", ""
# 检查该IP地址的最后登录失败时间
$lastFailedLogin = Get-WinEvent -LogName Security -FilterXPath "*[System/EventID=4625 and EventData/Data[@Name='IpAddress']='$ip']" | Sort-Object TimeCreated -Descending | Select-Object -First 1
if ($lastFailedLogin -and $lastFailedLogin.TimeCreated -lt $releaseTime) {
# 删除防火墙规则
Remove-NetFirewallRule -DisplayName $rule.DisplayName
Write-Output "IP $ip 防火墙规则已删除"
} else {
Write-Output "IP $ip 最近有登录失败记录,保持封锁状态"
}
}
# 原创内容,转载请带上原作者信息:作者:ioripalm
创建任务计划
打开任务计划程序:
按 Win + R,输入 taskschd.msc,然后按 Enter。
创建释放IP地址的任务:
在右侧窗格中,点击 创建基本任务…。
输入任务名称,例如 ReleaseBlockedIPs,然后点击 下一步。
选择 每天,然后点击 下一步。
设置开始日期和时间,然后点击 下一步。
选择 重复任务每,设置为 24 小时,持续时间为 无限期,然后点击 下一步。
选择 启动程序,然后点击 下一步。
浏览并选择 PowerShell 的路径(通常是 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe)。
在 添加参数 框中输入:-NoProfile -ExecutionPolicy Bypass -File “C:\Users\Administrator\Desktop\releaseIPs.ps1”
点击 下一步,然后点击 完成。
1 个赞
bingloo
(落叶)
13
正常情况下我只开443,其它要用的端口都是通过CF转发出来的。
leonqiu
(公孙厕)
16
限制登录次数不就好了 同一个IP直接小黑屋 这个不是难事 很多办法都能实现
F-droid
(F-Droid)
18
还不如限制ASN,比如你是北京移动的,又只允许北京移动的IP去尝试,其他的IP根本就是连尝试登录的资格都没有,更别说爆破了,并且同时加上fail2ban防止被同一地区的IP爆破
WSure
20
我配置了fail2ban
jail.local
[squid]
enabled = true
filter = squid
port = 80,443,3128,3129,8080
logpath = /var/log/squid/access.log
maxretry = 5
bantime = -1
filter:
failregex = ^\s+\d\s<HOST>\s+(TCP_REJECTED|TCP_DENIED|TCP_MISS|NONE)/\d+\s.*$
^\s+\d\s<HOST>\s+[A-Z_]+_DENIED/\d+\s.*$
^\s+\d\s<HOST>\s+[A-Z_]+_DENIED(?:_[A-Z_]+)?/\d+\s.*$
^\s+\d\s<HOST>\s+NONE/\d+\s.*$
^\s+\d\s<HOST>\s+error:invalid-request\s.*$