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

时间:2020-06-09 15:36:35

标签: freeradius google-authenticator sssd

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

环境:

  • OS = CentOS 7
  • FreeRadius = 3.0.13
  • google-authenticator-libpam = 1.09
  • 我没有发布我的配置文件,因为它们完全被参考链接覆盖。为了方便阅读,我会将它们发布在后续帖子中

参考: 我按照此页面操作使大部分系统正常运行(SSLVPN Two - Factor Authentication with Google Authenticator

工作原理:

  • 使用radtest,我可以使用其AD密码+ OTP向基于AD的用户进行身份验证
  • 能够获得网络交换机的身份验证和访问接受回复消息,以包括针对用户组的自定义VSA(仅基于用户名在post-auth区域内使用unlang)。并不理想,而只是用于测试概念。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

  4. 编辑custom_vs01。更改服务器块以匹配文件。 orig:服务器默认{新:服务器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"
        }
       }