我有一个用于 WPA 身份验证(PEAP + MSCHAPv2)的 FreeRADIUS(3.0.15)服务器,一切开箱即用,尽管感觉要在封闭的修道院中学习一生才能掌握每一点配置。
我的用户在users
文件中,我想保持这种方式(而不是 sql 或 ldap),因为我喜欢用简单的文本编辑器编辑用户的便利。
我想要实现的目标:
我有两个 SSID(staff
和guests
),我想将我的用户分成两组,这样如果访客用户尝试在 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
属性具有staff
或guest
取决于与请求匹配的用户。
我的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 告诉我“错误:无法检索评估条件所需的值”
谢谢!