根据 Freeradius 中的 NAS-IP-Address 设置变量

根据 Freeradius 中的 NAS-IP-Address 设置变量

设置

我们目前有一个 Freeradius 服务器,用于根据 Active Directory 服务器验证 Wifi 用户的身份。Freeradius 和 Active Directory 之间的链接由 Winbind 完成。

为了让用户能够获得授权,它需要属于 Active Directory 中的一个组。这可以通过向 ntlm_auth 命令添加参数来实现。

我们正在努力实现的目标

我们现在正在将 802.1X 添加到我们的有线网络,并希望重新使用现有的 Radius 服务器针对同一个 Active Directory 进行身份验证。

除了授权需要基于用户是否属于与 Wifi 网络不同的网络之外,其他一切都将保持不变。

我们已经尝试过

我在文档中阅读了很多关于 freeradius 的内容,并发现可以使用条件和变量。因此,我的计划是在 ntlm_auth 命令中放置一个包含组 SID 的变量(如Freeradius 邮件列表)。组SID将依赖于网络设备的IP,该IP应包含在“NAS-IP-Address”中。

这应该只是编写一个简单的条件语句并设置一个变量的情况。尽管如此,我还是无法做到这一点,因为每次我尝试将条件添加到配置文件时,Freeradius 都不会启动。

我的问题是:

  • 如何在 NAS-IP-Address 函数中设置变量?

  • 在哪些文件中可以使用此类语法?

答案1

Unlang(即您所指的条件语言)只能在虚拟服务器(server {}块)的子部分内使用。

扩展名%{foo}有时可以在模块配置项中使用,例如ntlm_auth,但这取决于配置项。模块配置文件中的示例通常会提示您是否可以使用扩展名。

虚拟服务器配置文件可以在/etc/raddb/sites-available或中找到/etc/freeradius/sites-available

要实现您的要求,最简单的方法就是向各个客户端部分添加额外的配置对,而不是基于 NAS-IP-Address。

例如:

client my_client {
    ipaddr = 127.0.0.1
    secret = testing123
    ad_group = <group>
}

然后您可以使用扩展在参数%{client:ad_group}中传递 ad_group 值ntlm_auth

答案2

我认为该huntgroup功能可能就是您正在寻找的。(但我不知道它们是否已在版本 2 中可用...)

猎头组描述如下: https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/mods-config/preprocess/huntgroups

您可以像这样创建寻线组:

switch        NAS-Identifier == "Cisco-Sw1"
switch        NAS-IP-Address == 192.0.2.5
switch        NAS-IP-Address == 192.0.2.6
switch        NAS-Identifier == "my_client"

您可以huntgroup像这样使用 s:

if (Huntgroup-Name == "switch") {
    noop
}

相关内容