以下站点讨论了如何设置 FreeRADIUS 以针对 LDAP 后端进行身份验证(它通过教程展示如何在 FreeIPA 中公开 NT 散列密码,以便 FreeRADIUS 可以读取它们)。
https://firstyear.id.au/blog/html/2016/01/13/FreeRADIUS:_Using_mschapv2_with_freeipa.html
它还不鼓励使用 Kerberos 密钥标签将 FreeRADIUS 连接到 IPA,因为当使用 PAP 身份验证时,
"FreeRADIUS can either read the NTHash and do a comparison (as above),
or it can directly bind to the LDAP server. This means in the direct
bind case, that the transport may not be encrypted due to the keytab."
另一方面,各种 FreeRADIUS 指南都不鼓励使用 LDAP(例如,参见默认内部隧道站点的注释,其中指出:
# We do NOT recommend using this. LDAP servers are databases.
# They are NOT authentication servers. FreeRADIUS is an
# authentication server, and knows what to do with authentication.
# LDAP servers do not.
除了一般的免责声明外,上述声明背后还有什么理由?
有人可以从安全的角度解释一下一种方法与另一种方法的优缺点吗?
我已成功使用 LDAP 后端(无 KRB)进行设置,并使用 PEAP 进行 WiFi 身份验证。我想更好地了解此场景的安全权衡。
答案1
对于 FreeRADIUS
该评论作为通用免责声明并旨在解决 FreeRADIUS 中的一个缺陷。
在大多数情况下,您不知道用户的 DN 是什么,因此无法执行绑定。因此,首先,您需要以匿名用户身份进行绑定,或者使用一组特权凭据来执行该搜索并找到 DN。
FreeRADIUS 不为不同目的维护单独的连接池,因此必须将连接重新绑定为身份验证用户。
这意味着为了在 LDAP 中验证用户,您最终需要执行三个操作:
- 绑定为特权/匿名用户。
- 搜索用户的 DN。
- 绑定为用户。
如果 LDAP 服务器和 RADIUS 服务器之间的延迟较高,这可能会严重限制吞吐量(以 auth/s 为单位),因为版本 <= v3.0.x 的 FreeRADIUS 实现了同步 I/O。
完全没有理由不使用绑定操作来验证用户身份,尤其是当 LDAP 服务器使用专门的后端身份验证插件来执行身份验证时。LDAP 是什么并不重要设计RADIUS 协议当然不是设计用于国际漫游联盟和多层认证方案中的隧道 TLS,但它可以很好地满足这些角色。
对于 IPA
您链接的文档令人困惑。它似乎在谈论使用服务帐户通过 Kerberos(GSSAPI)绑定到 LDAP 服务器,并且由于 389DS 的缺陷,GSSAPI 无法与 StartTLS 或 LDAPS 结合使用,这意味着在第二次绑定操作期间,用户的凭据将以明文形式提交。
或者可以说,因为您不能将 GSSAPI 与 StartTLS 一起使用或将 LDAPS 与 389DS 一起使用,所以如果您使用 Kerberos 执行用户绑定操作,则凭据将以明文形式提交。
无论哪种情况,我都很确定这只是 389DS 的限制,并且大多数其他 LDAP 服务器都支持通过 TLS 加密的 LDAP 连接的 GSSAPI。
无论如何,你应该绝不无需使用 StartTLS 或 LDAPS 即可向 LDAP 目录提交或检索凭据,如文章所述:
目前,保护帐户的唯一安全、有保障的方法是 TLS。您应该使用 LDAPS,这可以保证所有通信都是安全的。它更简单、更快速、更好。
如果与目录服务器的通信是明文的,那么攻击者可以轻易窥探提交给目录服务器的明文密码或返回的 NTPassword。NTPassword 只是密码的 16 位小端编码,使用 MD4 进行哈希处理,几乎与明文一样好。
答案2
评论:
# We do NOT recommend using this. LDAP servers are databases.
# They are NOT authentication servers. FreeRADIUS is an
# authentication server, and knows what to do with authentication.
# LDAP servers do not.
是在 LDAP 服务器用于身份验证而不是数据库的上下文中。这基本上意味着 radius 服务器将尝试使用提供的凭据向 LDAP 服务器进行身份验证。他们正确地警告您,这不是 LDAP 的设计目的。
现在,如果您使用 LDAP 作为数据库(在其他地方也是这种情况),那么就没有问题。