当前位置:   article > 正文

使用 privacyIDEA 实现 Windows RDP 多因素认证 (MFA)

使用 privacyIDEA 实现 Windows RDP 多因素认证 (MFA)

前言

等保 2.0 标准中有要求:

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

可以借助开源的 privacyIDEA 配合 AD 域环境实现 RDP + MFA 认证登录以满足上面的要求. 本文使用 3 台 VM 进行演示, 主要步骤:

  1. 部署 AD 环境 (Windows)
  2. 部署 privacyIDEA 服务器 (Ubuntu)
  3. 客户端加域
  4. 客户端安装 privacyIDEA Credential Provider 插件
  5. 测试验证

2024.06.29 更新视频演示教程: https://www.bilibili.com/video/BV1Rw4m1e7e3

部署 AD 环境 (172.31.43.98)

启动一台 Windows Server 2022 虚拟机, 执行下面 PowerShell 命令配置为 Domain Controller.

Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName ps.com -InstallDNS
  • 1
  • 2

部署 privacyIDEA 服务器 (172.31.41.28)

启动一台 Ubuntu 22.04 虚拟机, 执行下面命令安装和配置 privacyIDEA 服务端. 官方文档

sudo su
wget https://lancelot.netknights.it/NetKnights-Release.asc
mv NetKnights-Release.asc /etc/apt/trusted.gpg.d/
add-apt-repository http://lancelot.netknights.it/community/jammy/stable
apt install -y privacyidea-apache2

# 创建系统管理员账号
pi-manage admin add admin -e admin@localhost
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

继续修改系统 DNS 使用 DC 做解析, 目的是为了后面通过 LDAP 访问 AD 数据的时候能正常解析, 172.31.43.98 是上一步准备好的 DC 地址.

echo "DNS=172.31.43.98" >> /etc/systemd/resolved.conf
resolvectl dns ens5 172.31.43.98
systemctl restart systemd-resolved
ping ps.com
# 能解析出来内网地址就行
  • 1
  • 2
  • 3
  • 4
  • 5

启动客户端

再启动一台 Windows Server 2022 作为客户端, 执行下面 PowerShell 命令:

# 改 DNS
Set-DnsClientServerAddress -InterfaceAlias (Get-NetAdapter | select -Property Name).Name -ServerAddresses 172.31.43.98
# 加域
Add-Computer -DomainName ps.com -Credential (Get-Credential "ps.com\administrator") -Restart
  • 1
  • 2
  • 3
  • 4

重启后使用域账号登录 administrator@ps.com, 下载 privacyIDEA Credential Provider 插件安装:
https://github.com/privacyidea/privacyidea-credential-provider/releases/
CSDN 备用下载地址 privacyIDEACredentialProviderSetup-v3.5.3.msi

Hostname 填写上面准备好的 Ubuntu 地址, 测试期间先忽略 SSL. 生产环境务必得用有效的证书, 篇幅原因本文不展开了.
在这里插入图片描述
其余步骤全部默认(留空)下一步就行. 安装完成后 Windows 开始菜单中并不会出现什么快捷方式, 也不会有 TrayIcon 什么的.

配置 privacyIDEA

在客户端系统里面访问 privacyIDEA 地址, 使用之前创建的管理员账号进行登录.
首次使用提示 Create default realm, 选择 No, 因为我们要继续配置从 AD 里面获取用户信息.
在这里插入图片描述

创建 Resolver

依次 Config > Users > New Ldapresolver
在这里插入图片描述

Resolver name: ps.com-ldap [自己起] 
Server URI: ldap://[DCHOSTNAME].ps.com
STARTTLS: [不选]
Base DN: dc=ps,dc=com [没有OU, 就直接写成根一级了]
Bind Type: Simple
Bind DN: cn=administrator,cn=users,dc=ps,dc=com [管理员的完整 DN]
Bind Password: [管理员的密码]
[其余选项保持默认就行]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

点击 Preset Active Directory 按钮直接使用预制的过滤模板, 点击 Test LDAP Resolver 测试通过后 Save.
在这里插入图片描述

这一步很容易出现失败的情况, 需要根据报错提示来判断错误的原因, 整理主要可能涉及到的有:

  • privacyIDEA 所在的 Ubuntu 系统 DNS 没有配置使用 DC 做解析, 导致通信失败
  • Base DN 填写不对, 演示用的是一个空的自建 AD 环境, 实际环境中通常会包含 OU 信息, 注意检查路径格式和有效性
  • Bind DN 填写不对, 同上面的 Base DN, 务必需要确保使用的域账号 DN 格式正确和有效

创建 Realm

Config > Realms, 起个名字, 勾选上 resolver, Create
在这里插入图片描述

分配 Token

切到 Users 界面可以看到从 AD 同步过来的用户信息, 找到 Administrator 点进去
在这里插入图片描述
Enroll New Token
在这里插入图片描述
选择 TOTP, 直接 Enroll Token
在这里插入图片描述
使用手机扫描二维码进行绑定, 支持 Google/Microsoft Authenticator, Authy, 宁盾等 App. 注意这里绑定的时候就扫一下就行了, App 上会直接添加成功.
在这里插入图片描述

客户端 RDP + MFA 测试

重新使用 RDP 连接客户端, 正常输入域账号和密码后, 会显示:
在这里插入图片描述
在 One-Time Password 中输入 App 中显示的动态码, 匹配一致即登录成功. 若动态码输入错误, 则会显示:
在这里插入图片描述

后话

除了配置 MFA 之外, 等保 2.0 中还有许多其他的安全要求, 分享一个 Github 上大佬写的 PowerShell 脚本可以用于批量修改本地安全/组策略加固系统:
https://github.com/WeiyiGeek/SecOpsDev/tree/master/OperatingSystem/Security/Windows

需要注意, 不建议直接运行这个脚本, 里面会改 WSUS 配置, 作为参考自己挑着跑一下还好.

另外, Web 管理界面过一会儿不操作就会自动锁
在这里插入图片描述
解锁后就会再提示一遍 Welcome, 挺讨厌的
在这里插入图片描述
参考文档 https://privacyidea.readthedocs.io/en/latest/policies/webui.html#logout-time

You can define a policy in PrivacyIdea with scope “WebUI”, Condition: select the realm your admins are in and define: {“logout_time”: “3600” }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号