为了增强Windows远程桌面通过FRP和Nginx配置的安全性,限制失败登录尝试是非常重要的一环。我将介绍多个层面上的失败登录限制配置方法。
1. Nginx层面的失败登录限制 使用Nginx限流模块 在Nginx配置中添加限流规则,可以有效防止暴力破解尝试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 http { limit_req_zone $binary_remote_addr zone=rdp_login:10m rate=5r/m; } server { location /rdp/ { limit_req zone=rdp_login burst=10 nodelay; } }
使用fail2ban监控Nginx日志 安装并配置fail2ban来监控Nginx日志并自动封禁可疑IP:
安装fail2ban:
创建自定义过滤器,例如 /etc/fail2ban/filter.d/nginx-rdp.conf
:
1 2 3 [Definition] failregex = ^<HOST> - .* "POST /rdp/api/tokens HTTP/1\.1" 401 ignoreregex =
在fail2ban配置中添加监控规则,修改 /etc/fail2ban/jail.local
:
1 2 3 4 5 6 7 8 [nginx-rdp] enabled = true port = http,httpsfilter = nginx-rdplogpath = /var/log/nginx/access.logmaxretry = 5 bantime = 3600 findtime = 300
重启fail2ban:
1 systemctl restart fail2ban
2. Windows RDP层面的失败登录限制 账户锁定策略 在Windows系统上配置账户锁定策略:
打开本地安全策略(secpol.msc)
转到”账户策略” > “账户锁定策略”
配置以下选项:
账户锁定阈值:5次(尝试失败5次后锁定账户)
账户锁定时间:30分钟
重置账户锁定计数器:30分钟
1 2 3 4 net accounts /lockoutthreshold:5 net accounts /lockoutduration:30 net accounts /lockoutwindow:30
使用Windows高级防火墙 配置Windows高级防火墙来限制连接尝试:
打开Windows高级防火墙(wf.msc)
创建新的入站规则
选择”自定义规则” > “所有程序”
协议类型选择TCP,本地端口为3389
在”范围”选项卡中,添加允许连接的IP地址范围
在”操作”选项卡中,选择”允许连接”
3. 使用RDP Wrapper配置额外的安全设置 如果您使用RDP Wrapper,可以启用其内置的安全选项:
打开RDP Wrapper配置
启用”Disable Multimon”(禁用多显示器)
启用”Network Level Authentication”(网络级别身份验证)
通过编辑rdpwrap.ini
文件添加IP过滤规则
4. 服务器层面的安全措施 安装和配置DenyHosts或Fail2ban 1 2 3 4 5 6 7 8 9 10 11 apt install fail2ban -y [rdp] enabled = true port = 3389 filter = rdp logpath = /var/log/auth.log maxretry = 3 bantime = 86400
使用iptables设置连接限制 1 2 3 4 5 6 iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -m limit --limit 5/minute --limit-burst 5 -j ACCEPT iptables -A INPUT -p tcp --dport 3389 -m state --state NEW -j DROP iptables -A INPUT -p tcp --dport 3389 -m connlimit --connlimit-above 3 -j REJECT
5. FRP层面的限制 修改frps.toml配置来添加连接限制:
1 2 3 4 5 6 7 8 9 10 11 maxPortsPerClient = 5 authentication.method = "token" webServer.authMethod = "password" allowPorts = [3389 , 7001 , 7002 , 7500 , 80 , 443 ]transport.maxPoolCount = 5 transport.maxPoolSize = 100
6. 实施多因素认证(MFA) 配置Windows Hello或智能卡认证
通过组策略启用智能卡认证需求
配置本地安全策略,要求网络级别身份验证
使用第三方MFA解决方案 考虑安装和配置以下解决方案:
DUO Security的Windows RDP插件
Microsoft的Azure MFA服务
WiKID强认证系统
7. 监控和审计 配置Windows事件日志监控 1 2 3 4 5 wevtutil sl "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" /e:true wecutil qc /q
设置登录通知 创建登录通知脚本,在检测到失败登录尝试时发送电子邮件或其他通知:
1 2 3 4 5 6 $query = '*[System[(EventID=4625)]]' $subscription = Register-WmiEvent -Query $query -SourceIdentifier "LoginFailureAlert" -Action { Send-MailMessage -From "alert@yourdomain.com" -To "admin@yourdomain.com" -Subject "RDP Login Failure" -Body "Failed login attempt detected" }
通过以上多层防护措施的组合实施,可以有效限制失败登录尝试并大大提高远程桌面环境的安全性。这种深度防御策略能够在不同层面拦截和记录可疑活动,保护您的Windows远程桌面免受未授权访问的风险。