ldap - 冗余负载平衡 LDAP 组的 Freeradius 问题
问题描述
在用户通过 EAP-TLS 进行身份验证后,我需要为用户分配与活动目录中的组对应的 vlan。我在 /policy.d/vlan_assignment 中创建了处理 vlan 分配的脚本:
vlan_assignment {
if (LDAP-Group == "CN=radiusClient,CN=Users,DC=myGroup,DC=dom") {
update reply {
[...]
}
}
仅在启用 mods 的情况下启用了一个 ldap 服务器时,一切都可以完美运行。我想使用freeradius提供的冗余负载平衡功能。
在 radius.conf 的 modules 部分,我创建了两个 ldap 服务器的配置:
modules {
ldap server1 {
server = 'SRVAD01'
port = 389
[...]
}
ldap server2 {
server = 'SRVAD02'
port = 389
[...]
}
}
并在实例化部分
instantiate {
redundant-load-balance rlb_ldap {
server1
server2
}
}
与 ldap 服务器的连接仅发生在我的站点外隧道的 post_auth 部分。
server outer-tunnel {
listen {
[...]
}
authorize {
filter_username
preprocess
auth_log
suffix
eap {
ok = return
updated = return
}
sql
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
pam
eap
}
preacct {
preprocess
acct_unique
suffix
}
accounting {
detail
unix
sql
exec
attr_filter.accounting_response
}
session {
sql
}
post-auth {
update {
&reply: += &session-state:
}
#*****edit ****
rlb_ldap.authorize
if (ok || updated) {
update session-state {
&LDAP-Group += &LDAP-Group[*]
}
}
#********************
vlan_assignment
exec
[...]
}
[...]
}
但是我在启动 freeradius -X 时在 policy.d/vlans_assignent 中有以下错误:
未知属性“LDAP 组”
我阅读并寻找解决方案但失败了。谁能帮我?
解决方案
这是因为您创建了 LDAP 模块的实例,所以 LDAP-Group 属性的名称已更改。有几种方法可以解决这个问题,但最简单的方法是指示 LDAP 模块对其所有实例使用相同的属性,然后让它检索完整的成员资格列表。
对于每个 LDAP 模块,取消注释并将cache_attribute设置为相同。如果需要,可以将其设置为“LDAP-Group”。
然后,对于每个 LDAP 模块,取消注释并将cacheable_dn设置为“yes”。
在尝试任何组检查之前,您可能需要调用 rlb_ldap 来预填充组信息,否则组检查只会命中一个 LDAP 或另一个,并且您不会获得冗余。
如果您使用 EAP,并在内部隧道中提取 LDAP 信息,则需要将组成员身份信息存储在会话状态列表中并在再次检查成员身份信息之前将其恢复。
要存储 LDAP 组信息:
ldap
if (ok || updated) {
update session-state {
&LDAP-Group += &LDAP-Group[*]
}
}
要恢复它:
update request {
update request {
&LDAP-Group += &session-state:LDAP-Group[*]
}
}
如果您在内部服务器中提取组信息,则需要更改update session-state
为update outer.session-state
.
您可能遇到的另一个潜在问题是,您在 post-auth 中列出了 rlb_ldap,但没有覆盖该方法。这意味着当 rlb_ldap 被调用时,它将执行其正常的身份验证后职责,即修改 LDAP 目录中的用户对象以记录最后一次登录的时间。
要解决此问题,请将您的 rlb_ldap 调用更改为rlb_ldap.authorize
,这将导致检索组成员信息。
推荐阅读
- azure - Azure Logic 应用程序运行的电子邮件警报失败
- javascript - 如何在 vue 的数据属性中找到 html 元素?
- c# - .NET Core CORS 策略块
- ios - 从 UIDocumentPickerViewController 显示文件夹名称
- api - 安全地从公众视野中隐藏 API 密钥
- javascript - ExtJS Modern:在 iOS 13.4+ WKWebview 中未触发绘制事件
- javascript - 在 react Native 中从 firebase 中选择特定字段(子字段?)
- javascript - 如何获取按钮列表中我按下的按钮的值
- javascript - Bootstrap 4 - DataTable 搜索不适用于 jQuery 添加的行
- node.js - 如何在单个命令中使用 mochawesome 和 mocha-sonarqube-report?