1

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

环境:

  • 操作系统 = CentOS 7
  • 自由半径 = 3.0.13
  • 谷歌身份验证器 libpam = 1.09
  • 我没有发布我的配置文件,因为它们完全包含在参考链接中。为了便于阅读,我会将它们发布在后续帖子中

参考: 我按照这个页面让大部分系统运行(SSLVPN Two - Factor Authentication with Google Authenticator

什么工作:

  • 使用 radtest,我可以使用 AD 密码+OTP 对基于 AD 的用户进行身份验证
  • 能够获得网络交换机身份验证和访问接受回复消息,以包括用户组的自定义 VSA(仅基于用户名在授权后区域中使用 unlang)。不理想,但只是为了测试这个概念。

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

4

1 回答 1

0

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

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

  2. 在 virtual_server = custom_vs01 的每个客户端下添加选项

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

  4. 编辑 custom_vs01。更改服务器块以匹配文件。原始:服务器默认 { 新:服务器 custom_vs01 {

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

  6. 在授权后部分;添加 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"
        }
       }
    
于 2020-07-09T01:17:24.357 回答