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
环境:
- OS = 美分OS 7
- 自由半径 = 3.0.13
- google-authenticator-libpam = 1.09
- 我没有 post 我的配置文件,因为参考文献 link 完全涵盖了它们。为了便于阅读
,我会在后续 post 中 post
参考:
我关注此页面以获取大部分系统操作(SSLVPN 双因素身份验证
使用 Google 验证器
什么是有效的:
- 使用 radtest,我可以使用 AD 密码+OTP 向基于 AD 的用户进行身份验证
- 能够获得网络交换机身份验证和访问接受回复消息,以包括用户组的自定义 VSA(仅根据用户名在 post-auth 区域内使用 unlang)。不理想,只是为了测试这个概念。
后续步骤(问题):
我希望能够最终决定最终用户是否被授予访问 VPN 或通过 AD 安全组进行切换的权限。
因此,根据我的理解,我可以在 auth 模块或 post-auth 中执行此操作。我相信正确的位置是在 post-auth 中,可能使用 unlang(但如果这不是执行此操作的一般区域,请纠正我)。
我不知道 how/where 我需要执行 LDAP 查找以获取用户名 AD 安全组信息。
理论上,一旦我有了用户名和组信息,就可以在多个过滤器中使用它们来声明他们是否可以访问一组系统。
谢谢
所以我想出了如何完成我想做的事情。
配置/etc/raddb/clients.conf
在virtual_server的每个client下添加选项=custom_vs01
复制(复制不要重命名)/etc/raddb/sites-available/default 到 /etc/raddb/sites-available/custom_vs01
编辑 custom_vs01。更改服务器块以匹配文件。 orig: server default { new: server custom_vs01 {
将 AUTH 和 ACCT 的端口更改为实际端口(例如 511812 和 511813)
在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"
}
}
我是FreeRadius的新手,知识还不深入。 我正在尝试配置一个中心半径来处理任何基于网络的系统(交换机、路由器、防火墙和 VPN),以便在最终用户尝试通过 SSH and/or VPN 进入系统时对他们进行身份验证。我所有的设备都支持radius
环境:
- OS = 美分OS 7
- 自由半径 = 3.0.13
- google-authenticator-libpam = 1.09
- 我没有 post 我的配置文件,因为参考文献 link 完全涵盖了它们。为了便于阅读 ,我会在后续 post 中 post
参考: 我关注此页面以获取大部分系统操作(SSLVPN 双因素身份验证 使用 Google 验证器
什么是有效的:
- 使用 radtest,我可以使用 AD 密码+OTP 向基于 AD 的用户进行身份验证
- 能够获得网络交换机身份验证和访问接受回复消息,以包括用户组的自定义 VSA(仅根据用户名在 post-auth 区域内使用 unlang)。不理想,只是为了测试这个概念。
后续步骤(问题): 我希望能够最终决定最终用户是否被授予访问 VPN 或通过 AD 安全组进行切换的权限。 因此,根据我的理解,我可以在 auth 模块或 post-auth 中执行此操作。我相信正确的位置是在 post-auth 中,可能使用 unlang(但如果这不是执行此操作的一般区域,请纠正我)。 我不知道 how/where 我需要执行 LDAP 查找以获取用户名 AD 安全组信息。 理论上,一旦我有了用户名和组信息,就可以在多个过滤器中使用它们来声明他们是否可以访问一组系统。 谢谢
所以我想出了如何完成我想做的事情。
配置/etc/raddb/clients.conf
在virtual_server的每个client下添加选项=custom_vs01
复制(复制不要重命名)/etc/raddb/sites-available/default 到 /etc/raddb/sites-available/custom_vs01
编辑 custom_vs01。更改服务器块以匹配文件。 orig: server default { new: server custom_vs01 {
将 AUTH 和 ACCT 的端口更改为实际端口(例如 511812 和 511813)
在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" } }