You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为本地用户RDP登录配置带双因素认证(2FA)的FreeRadius

本地用户RDP登录配置带双因素认证(2FA)的FreeRadius

首先直接给你明确答案:

  1. 完全可行! 这个方案是非常成熟的,很多运维场景里都在用FreeRadius结合Google Authenticator给RDP登录加双因素认证,既能沿用本地用户体系,又能大幅提升登录安全性。

  2. 下面是一步步的配置指南,我尽量写得通俗易懂,适合新手跟着操作:

第一步:安装必要组件(以Debian/Ubuntu为例,RHEL/CentOS类系统包名稍作调整)

  • 先更新系统包列表,然后安装FreeRadius、Google Authenticator的PAM模块和相关工具:
    sudo apt update && sudo apt install freeradius freeradius-utils libpam-google-authenticator
    
    如果你用的是Windows RDP服务器,不用装这些,而是要在Windows上启用自带的**网络策略服务器(NPS)**来做Radius客户端对接FreeRadius。

第二步:给本地用户配置Google Authenticator

  • 切换到需要启用2FA的本地用户(比如john),执行生成密钥的命令:
    su - john
    google-authenticator
    
    跟着提示走就行:
    • 问是否基于时间生成密码?选y(这是TOTP标准,Google Authenticator默认用这个)
    • 问是否更新~/.google_authenticator文件?选y
    • 问是否禁止重复使用同一验证码?选y(防止重放攻击)
    • 问是否允许30秒宽限窗口?选y(避免客户端和服务器时间差导致验证失败)
    • 问是否启用速率限制?选y(比如每30秒最多试3次,防止暴力破解)
      执行完会弹出二维码、密钥和几个紧急验证码,一定要把这些存好——二维码用Google Authenticator app扫一下就能添加账户,紧急验证码是万一手机丢了的时候用的。

第三步:配置FreeRadius对接Google Authenticator

  • 先配置FreeRadius的PAM模块:
    编辑/etc/freeradius/3.0/mods-available/pam,找到pam_auth段,确保PAM服务名是radiusd

    pam_auth {
        pam = "radiusd"
    }
    

    然后启用这个模块:

    sudo ln -s /etc/freeradius/3.0/mods-available/pam /etc/freeradius/3.0/mods-enabled/
    
  • 配置PAM的radiusd服务规则:
    创建/etc/pam.d/radiusd文件,写入以下内容:

    auth    required    pam_google_authenticator.so nullok
    account required    pam_unix.so
    

    这里nullok的意思是允许还没配置2FA的用户临时登录,如果你想强制所有用户必须用2FA,直接删掉这个参数就行。

  • 调整FreeRadius的认证流程:
    编辑/etc/freeradius/3.0/sites-enabled/default,在authorize区块里加上pam,在authenticate区块里也加上pam——这样FreeRadius处理认证请求时,会先通过PAM调用Google Authenticator做验证。

  • 添加RDP服务器为FreeRadius的授权客户端:
    编辑/etc/freeradius/3.0/clients.conf,添加一段:

    client rdp-server {
        ipaddr = 127.0.0.1  # 要是RDP和FreeRadius不在同一台机器,就填RDP服务器的IP
        secret = my_secure_shared_secret  # 这个是共享密钥,后面RDP端配置要和这个一致
        shortname = rdp
    }
    

第四步:配置RDP服务器对接FreeRadius

如果你用的是Linux xrdp服务器:

  • 安装xrdp的Radius插件:
    sudo apt install xrdp-radius
    
  • 编辑/etc/xrdp/xrdp.ini,在[Globals]部分把认证方式改成Radius:
    auth_provider=radius
    
  • 编辑/etc/xrdp/radius.ini,填入FreeRadius的信息:
    [Radius]
    server=127.0.0.1
    port=1812
    secret=my_secure_shared_secret  # 必须和FreeRadius clients.conf里的密钥一致
    timeout=5
    retries=1
    
  • 重启xrdp服务:
    sudo systemctl restart xrdp
    

如果你用的是Windows RDP服务器:

  1. 打开服务器管理器,添加「网络策略和访问服务」角色,安装NPS(网络策略服务器)。
  2. 打开NPS,在「Radius客户端」里添加FreeRadius服务器:填入IP地址和刚才设置的共享密钥。
  3. 配置「连接请求策略」:新建策略,指定匹配RDP(3389端口)的连接请求,把认证请求转发到FreeRadius服务器。
  4. 配置「网络策略」:允许RDP登录,认证方式选「Radius认证」,注意Windows用户登录时,要把本地密码+Google Authenticator的6位验证码拼在一起输入(比如密码是123456,验证码是789012,就输入123456789012)。

第五步:测试认证是否正常

  • 先重启FreeRadius服务:
    sudo systemctl restart freeradius
    
  • radtest工具测试认证:
    radtest john mypassword123456 127.0.0.1 0 my_secure_shared_secret
    
    这里mypassword123456是用户的本地密码加上6位验证码,如果返回Access-Accept就说明认证成功了。
  • 最后用RDP客户端尝试登录,输入用户名和拼接后的密码+验证码,看看能不能正常登录。

备注:内容来源于stack exchange,提问作者Damola

火山引擎 最新活动