配置失败登录尝试限制
发表于:2025-06-08 | 分类: frp
字数统计: 1.1k | 阅读时长: 4分钟 | 阅读量:

为了增强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
# 在nginx.conf的http部分添加
http {
# 定义限制区域
limit_req_zone $binary_remote_addr zone=rdp_login:10m rate=5r/m;

# 其他配置...
}

# 在rdp.conf的server部分添加
server {
# ...其他配置

# 对RDP登录页面应用限流
location /rdp/ {
limit_req zone=rdp_login burst=10 nodelay;
# 其他proxy_pass配置...
}
}

使用fail2ban监控Nginx日志

安装并配置fail2ban来监控Nginx日志并自动封禁可疑IP:

  1. 安装fail2ban:
1
apt install fail2ban -y
  1. 创建自定义过滤器,例如 /etc/fail2ban/filter.d/nginx-rdp.conf
1
2
3
[Definition]
failregex = ^<HOST> - .* "POST /rdp/api/tokens HTTP/1\.1" 401
ignoreregex =
  1. 在fail2ban配置中添加监控规则,修改 /etc/fail2ban/jail.local
1
2
3
4
5
6
7
8
[nginx-rdp]
enabled = true
port = http,https
filter = nginx-rdp
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600 # 封禁1小时
findtime = 300 # 5分钟内
  1. 重启fail2ban:
1
systemctl restart fail2ban

2. Windows RDP层面的失败登录限制

账户锁定策略

在Windows系统上配置账户锁定策略:

  1. 打开本地安全策略(secpol.msc)
  2. 转到”账户策略” > “账户锁定策略”
  3. 配置以下选项:
    • 账户锁定阈值:5次(尝试失败5次后锁定账户)
    • 账户锁定时间:30分钟
    • 重置账户锁定计数器:30分钟
1
2
3
4
# 或者通过PowerShell设置(管理员权限)
net accounts /lockoutthreshold:5
net accounts /lockoutduration:30
net accounts /lockoutwindow:30

使用Windows高级防火墙

配置Windows高级防火墙来限制连接尝试:

  1. 打开Windows高级防火墙(wf.msc)
  2. 创建新的入站规则
  3. 选择”自定义规则” > “所有程序”
  4. 协议类型选择TCP,本地端口为3389
  5. 在”范围”选项卡中,添加允许连接的IP地址范围
  6. 在”操作”选项卡中,选择”允许连接”

3. 使用RDP Wrapper配置额外的安全设置

如果您使用RDP Wrapper,可以启用其内置的安全选项:

  1. 打开RDP Wrapper配置
  2. 启用”Disable Multimon”(禁用多显示器)
  3. 启用”Network Level Authentication”(网络级别身份验证)
  4. 通过编辑rdpwrap.ini文件添加IP过滤规则

4. 服务器层面的安全措施

安装和配置DenyHosts或Fail2ban

1
2
3
4
5
6
7
8
9
10
11
# 安装Fail2ban(如果还没安装)
apt install fail2ban -y

# 配置RDP保护,编辑/etc/fail2ban/jail.local
[rdp]
enabled = true
port = 3389
filter = rdp
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400 # 24小时

使用iptables设置连接限制

1
2
3
4
5
6
# 限制每分钟最多接受5个新连接
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

# 限制每个IP最大同时连接数
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
# 添加到frps.toml
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或智能卡认证

  1. 通过组策略启用智能卡认证需求
  2. 配置本地安全策略,要求网络级别身份验证

使用第三方MFA解决方案

考虑安装和配置以下解决方案:

  1. DUO Security的Windows RDP插件
  2. Microsoft的Azure MFA服务
  3. WiKID强认证系统

7. 监控和审计

配置Windows事件日志监控

1
2
3
4
5
# 启用详细的RDP登录日志
wevtutil sl "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" /e:true

# 配置事件转发以集中日志
wecutil qc /q

设置登录通知

创建登录通知脚本,在检测到失败登录尝试时发送电子邮件或其他通知:

1
2
3
4
5
6
# 创建监控脚本
$query = '*[System[(EventID=4625)]]' # 失败登录事件ID
$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远程桌面免受未授权访问的风险。

下一篇:
使用Fail2ban保护服务器免受可疑IP攻击