在 FreeRADIUS 3 中将用户分为两组(员工和访客)

在 FreeRADIUS 3 中将用户分为两组(员工和访客)

我有一个用于 WPA 身份验证(PEAP + MSCHAPv2)的 FreeRADIUS(3.0.15)服务器,一切开箱即用,尽管感觉要在封闭的修道院中学习一生才能掌握每一点配置。

我的用户在users文件中,我想保持这种方式(而不是 sql 或 ldap),因为我喜欢用简单的文本编辑器编辑用户的便利。

我想要实现的目标:

我有两个 SSID(staffguests),我想将我的用户分成两组,这样如果访客用户尝试在 SSID 上进行身份验证,就会被拒绝staff

我目前拥有的:

在我的users档案中:

DEFAULT
    MyGroup := 'guests',
    Fall-Through := Yes

# Guest users
guest1 Cleartext-Password := 'password1'
# End of guest users

DEFAULT
    MyGroup := 'staff',
    Fall-Through := Yes

# Staff users
staff1 Cleartext-Password := 'kdjsfhksf'
# End of staff users

我希望的是,在解析文件之后,reply:MyGroup属性具有staffguest取决于与请求匹配的用户。

我的dictionary文件有这个:

ATTRIBUTE MyGroup 3000 string

我的default网站在authorize组中有这个,就在模块后面files。这rewrite_called_station_id将创建一个新属性Called-Station-SSID,我使用它以及modMyGroup创建的 attrfiles来尝试过滤用户:

# get SSID from Called-Station-Id
rewrite_called_station_id

# check guest connecting to staff SSID and reject if so
if (&MyGroup == 'guests' && &Called-Station-SSID == 'STAFF') {
        reject
}

我也尝试过这个:

if (&reply:MyGroup == 'guests' && &Called-Station-SSID == 'STAFF') {

但无论如何我都会收到以下错误:

if (&reply:MyGroup == 'guests' && &Called-Station-SSID == 'STAFF') {
ERROR: Failed retrieving values required to evaluate condition

此时我不知道发生了什么以及如何解决它。

答案1

如果您想要将组分配给用户,请使用检查项目将项目插入列表&control,即

guest1  Mygroup := 'guests', Cleartext-Password := 'password1'

staff1  Mygroup := 'staff', Cleartext-Password := 'kdjsfhksf'

进而

if ((&control:MyGroup == 'guests') && (&Called-Station-SSID == 'STAFF')) {

答案2

你能告诉我“if ((&control:MyGroup etc.”的编码在哪里吗?

询问是因为我在字典文件中添加了一个 MyGroup 变量作为字符串类型,并通过向测试用户添加 MyGroup 项来更改用户文件,然后在 policy.d/filter 中完成此操作:

if (&control:MyGroup == "TEST") && (&outer.request:Called-Station-Id !~ /.*:FORBIDDEN-SSID$/) { 更新请求 { &Module-Failure-Message += '您可能无法连接到此网络' } 拒绝 }

然而 Freeadius 告诉我“错误:无法检索评估条件所需的值”

谢谢!

相关内容