FreeRadius 3.0.13 + Google Auth + SSSD + Active Directory - 通过 AD 安全组过滤

FreeRadius 3.0.13 + Google Auth + SSSD + Active Directory - Filter via AD security groups

我是FreeRadius的新手,知识还不深入。 我正在尝试配置一个中心半径来处理任何基于网络的系统(交换机、路由器、防火墙和 VPN),以便在最终用户尝试通过 SSH and/or VPN 进入系统时对他们进行身份验证。我所有的设备都支持radius

环境:

参考: 我关注此页面以获取大部分系统操作(SSLVPN 双因素身份验证 使用 Google 验证器

什么是有效的:

后续步骤(问题): 我希望能够最终决定最终用户是否被授予访问 VPN 或通过 AD 安全组进行切换的权限。 因此,根据我的理解,我可以在 auth 模块或 post-auth 中执行此操作。我相信正确的位置是在 post-auth 中,可能使用 unlang(但如果这不是执行此操作的一般区域,请纠正我)。 我不知道 how/where 我需要执行 LDAP 查找以获取用户名 AD 安全组信息。 理论上,一旦我有了用户名和组信息,就可以在多个过滤器中使用它们来声明他们是否可以访问一组系统。 谢谢

所以我想出了如何完成我想做的事情。

  1. 配置/etc/raddb/clients.conf

  2. 在virtual_server的每个client下添加选项=custom_vs01

  3. 复制(复制不要重命名)/etc/raddb/sites-available/default 到 /etc/raddb/sites-available/custom_vs01

  4. 编辑 custom_vs01。更改服务器块以匹配文件。 orig: server default { new: server custom_vs01 {

  5. 将 AUTH 和 ACCT 的端口更改为实际端口(例如 511812 和 511813)

  6. 在post-auth部分;添加 unlang 以查找 LDAP 组 所以基本上如果经过身份验证的用户不属于任何一个 AD 组,那么我们更新控件并拒绝他们访问

    post-auth {
      update {
        &reply: += &session-state:
      }
    -sql
    exec
    remove_reply_message_if_eap
    # Custom post-auth policies
      if (LDAP-Group == "AD_Group_SystemAdmins") {
        update reply {
          Class := "AD_Group_SystemAdmins"
        }
      }
      elsif (LDAP-Group == "AD_Group_SystemUsers") {
        update reply {
          Class := "AD_Group_SystemUsers"
        }
       }
      else {
        update reply {
          Reply-Message = "Not authorized to access this system"
        }
        update control {
          Auth-Type := "Reject"
        }
       }