"policy":[]

此部分是可选的。 它允许在 IBM RADIUS服务器向RADIUS客户端(NAS)发送的Access-Accept响应数据包中,根据条件添加属性。 它还允许对“访问请求”授权请求进行有条件的即时接受或拒绝。 按照定义策略的顺序评估策略。

格式

“policy”:[
  {
    “name”:”policy1”,
    “match”:{
      “client-ip”:”???”,
      “attr”:{
        “compare”:”??”,
        “name”:”???”,
         …
      },
      “user-group”:{
        “compare”:”??”,
        “name”: “???”
      },
      “apply-before-authenticate”:????
    },
    “return-attrs”:[
      {
        “name”:”???”,
        “value”:”???”,
        …
      },
      …
    ],
    “action”:”???”,
  },
  {
    “name”:”policy2”,
    …
  },
  …
]

"match":{}
此子节是可选的,如果不存在,那么此策略与所有访问请求包匹配。

在此节下,包括以下子项:

"client-ip":"192.168.0.129"
与发送包的 RADIUS 客户机 (NAS) 的地址匹配。
"apply-before-authenticate":"false"
不推荐使用。 缺省设置为 false。 如果为 true,那么将在验证用户密码或 OTP 之前匹配并应用策略。 这相当于 "apply": "before_mfa"。
"apply": "before-mfa" | "after-mfa-success" | "after-pwd-success" | "before-each-response"
与已弃 "apply-before-authenticate" 用的配置选项相比,更推荐使用此选项。
"before-mfa"
该策略会在验证 1FA (密码)或 2FA 之前先进行此匹配。
"after-mfa-success"
在成功验证 2FA 之后,该策略将与之匹配。
"after-pwd-success"
该策略在成功验证 1FA (密码)后生效,且在执行 2FA 之前生效。
"before-each-response"
该策略会在发送每个响应之前进行匹配。
在策略中使用 "apply" 的示例可能包括:
  1. 要为名为“risky”的组中的任何用户绕过 2FA :
     {
                "name": "risk_policy",
                "match": {
                    "apply": "after-pwd-success",
                    "user-group": { "compare": "=", "name": "risky" }
                },
                "return-attrs":[
                    {
                        "name": "Reply-Message",
                        "value": "Success: Bypassed 2FA"
                    }
                ],
                "action": "accept"
            }, 
  2. 若要在客户端/NAS 与 RADIUS 服务器之间支持 RADIUS 代理,且发往 RADIUS 服务器的传入 Proxy-State 属性必须返回给 RADIUS 代理,请执行以下操作:
     {
                "name":"proxy_policy",
                "match":{
                    "apply": "before-each-response"
                },
                "return-attrs":[
                    {
                        "name":"Proxy-State",
                        "value":"{{reflect}}",
                        "value-type":"text"
                    }
                ],
                "action":"continue"
            } 
"attr":{}

此节允许匹配访问权请求中的单个属性值。 在此节下,包括以下子项:

"compare":"="
默认值为“=”。此项必须为 或 "=" "!="
"case-ignore":false
缺省设置为 false。 值将根据“按字节数”比较针对 RADIUS 属性值进行比较。 "case-ignore" 设置为 true 时例外。 对于这种情况,将进行一个不区分大小写的 UTF-8 字符串比较,这对于对比 "User-Name" 属性值很有用。
"regex":false
默认值为 false. 当设置为 true 时,在匹配属性值时,“value”将被解释为扩展正则表达式。 例如,
"value": ".*ibm\\.com"
testibm.com匹配以 ibm.com 结尾的任何值,例如。 有关扩展正则表达式的定义,请参见 https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html
"name":"User-Name"

访问权请求中要比较的属性。 此值可以是字符串,例如 RADIUS 属性的名称或属性号。 例如 ,用户名对应数字 1。 请查看该 IbmRadius.exe -attributes 命令的输出,以获取 RADIUS 属性的列表。

"value":"Administrator"
要比较的属性值。 请参阅下面的 "value-type" 表以了解值的 JSON 格式。 属性的缺省值类型取决于属性本身。 命令的输出
"IbmRadius.exe
      -attributes"
显示每个 RADIUS 属性的值类型。
"value-type":"text"
覆盖 “value” 如何转化为 RADIUS 属性值。 缺省值取决于 RADIUS 属性,因为每个属性都具有自己的缺省值类型。 请参阅 IbmRadius.exe -attributes 命令的输出以了解每个 RADIUS 属性的值类型。 此参数允许覆盖类型以便于输入。 例如,可以将文本字符串放在二进制字符串属性中。
表 1. 值映射
名称 JSON 值格式 RADIUS 值
integer
  • 数字:例如,1234。
  • 字符串:十六进制数,例如 "0xa2b3ff".
4 个字节,首先是 MSB
enum
  • 字符串:适用于属性的枚举名称。 例如, "Login" 对于“Service-Type”属性。 请参阅 IbmRadius.exe -attributes 命令的输出以获取可接受的枚举值字符串的列表。
  • 5数字:例如,.
4 个字节,首先是 MSB
时间
  • 数字:1970-01-01 00:00:00 UTC 起的秒数
  • 字符串:"YYYYMMDDHHMMSS" UTC
4 个字节,首先是 MSB
文本
  • 字符串:UTF-8 字符
未由 0x00 终止的 UTF-8 字节
integer64
  • 数字:例如,12345
  • 字符串:十六进制数,例如。"0xdeadbeaf"
8 个字节,首先是 MSB
ipv4addr
  • 字符串:例如,格式化后的字符串 IPv4。 ,"192.168.0.1"
4 个字节,网络顺序,首先是 MSB
ipv6addr
  • 字符串:例如,格式化后的字符串 IPv6。 "192.168.0.fe80::df3c:99dd:8a4a:16f1"
8 个字节,网络顺序,首先是 MSB

字符串

ifid

ipv6prefix

ipv4prefix

tlv

vsa

extended

long_extended

evs

  • 字符串:Base64 编码的二进制数据。
字节数:
注: 每种类型的格式各不相同,请参阅 RADIUS RFC 规范。
"user-group":{}
此节允许将单个组与用户所属的组列表匹配。 "apply-before-authenticate" == false此参数仅在……时可用。 在此节下,包括以下子项:
compare":"="

默认值为 "=". "=" 此项必须是 或 "!="

"name":"{{group-name}}"
系统会将名为 "{{group-name}}" 的组与用户的组成员身份进行比对。
"return-attrs":[]
如果不存在此项,则不会向返回的 RADIUS 数据包中添加任何属性。 仅当策略匹配为 true 时才添加 "return-attrs"
"return-attrs" 数组的每个元素的格式都为:
{
  "name":"xxxx",
  "value":"xxxx",
  "value-type":"xxxx"
},
“name”、“value”和“value-type”的描述在前面的 “match”:{} > “attr”:{} 部分中定义。 "value" 为以下某个属性时例外。
  • "{{group-name}}" : 多次插入属性,为用户所属的每个组插入一次。
  • "{{group-list}}" : 针对用户所属的所有组各插入一次属性,并以逗号分隔。
在这两种情况下,都 "value-type" 不得不“文本化”。
可以将“值” 用作供应商特定属性(VSA)添加到每个组中 "{{group-name:vsa:<vendorid>:<vendortype>}}" 。 必须覆盖二进制格式的默认 VSA 值类型,以便将格式化字符串解释为文本。 请将 <vendorid> 替换为供应商的 ID(十进制数),并将 <vendortype> 替换为供应商的值类型(十进制数)。 例如,
     "return-attrs":[
        {
            "name": "Vendor-Specific",
            "value": "{{group-name:vsa:12356:1}}",
            "value-type": "text"
        }
     ],

“value” 会 "{{reflect}}" 将请求中同名的值复制到响应中。 通常,它用于返回收到的 Proxy-State 值。 此外,请指定此属性的设置 "value-type": "text"

"action":"continue"
默认值为 "continue". "action" 仅在策略匹配为 true 时适用。 "action" 项可以是以下三个值中的一个:
  • "continue": 添加任何 "return-attrs" 然后继续处理。
  • "reject": 添加任何 "return-attrs" ,退回 RADIUS 访问拒绝包,并结束处理该 RADIUS 客户机 (NAS) 请求。
  • "accept": 添加任何 "return-attrs" ,发送回 RADIUS 访问接受包,结束此 RADIUS 客户机 (NAS) 请求的处理。