ADC

对响应程序的 RADIUS 支持

NetScaler 表达式语言包含可以从 RADIUS 请求中提取信息和操作 RADIUS 请求的表达式。这些表达式使您能够使用响应程序功能来响应 RADIUS 请求。您的响应方策略和操作可以使用与 RADIUS 请求相应或相关的任何表达式。可用表达式使您能够识别 RADIUS 消息类型,从连接中提取任何属性值对 (AVP),并根据该信息发送不同的响应。您还可以创建策略标签来调用 RADIUS 连接的所有响应程序策略。

您可以使用 RADIUS 表达式来构造不需要与发送请求的 RADIUS 服务器进行通信的简单响应。当响应程序策略匹配连接时,NetScaler 无需联系 RADIUS 身份验证服务器即可构建并发送相应的 RADIUS 响应。例如,如果 RADIUS 请求的源 IP 地址来自响应程序策略中指定的子网,则 NetScaler 可以使用访问拒绝消息回复该请求,也可以干脆放弃请求。

您还可以创建策略标签,通过一系列适用于这些请求的策略来路由特定类型的 RADIUS 请求。

注意: 当前的 RADIUS 表达式不适用于 RADIUS IPv6 属性。

支持 RADIUS 的表达式的 NetScaler 文档假设熟悉 RADIUS 通信的基本结构和用途。如果您需要有关 RADIUS 的更多信息,请参阅您的 RADIUS 服务器文档或在线搜索有关 RADIUS 协议的简介。

为 RADIUS 配置响应程序策略

以下过程使用 NetScaler 命令行配置响应程序操作和策略,并将策略绑定到 Radius 特定的全局绑定点。

要配置 Responder 操作和策略并绑定策略,请执行以下操作:

在命令提示符下,键入以下命令:

  • add responder action <actName> <actType>
  • add responder policy <polName> <rule> <actName>
  • bind responder policy <polName> <priority> <nextExpr> -type <bindPoint> 其中, <bindPoint> 代表特定于 Radius 的全局绑定点之一。

响应程序的 RADIUS 表达式

在响应程序配置中,您可以使用以下 NetScaler 表达式来引用 RADIUS 请求的各个部分。

确定连接类型:

  • RADIUS.IS_CLIENT。如果连接是 RADIUS 客户端(请求)消息,则返回 TRUE。

  • RADIUS.IS_SERVER。如果连接是 RADIUS 服务器(响应)消息,则返回 TRUE。

请求表达式:

  • RADIUS.REQ.CODE. 返回与 RADIUS 请求类型对应的数字。num_at 类的衍生物。例如,RADIUS 访问请求将返回 1(一)。RADIUS 会计请求将返回 4。
  • RADIUS.REQ.LENGTH. 返回 RADIUS 请求的长度,包括标头。num_at 类的衍生物。
  • RADIUS.REQ.IDENTIFIER. 返回 RADIUS 请求标识符,这是分配给每个请求的数字,允许将请求与相应的响应进行匹配。num_at 类的衍生物。
  • RADIUS.REQ.AVP(<AVP Code No>).VALUE。以 text_t 类型的字符串形式返回此 AVP 首次出现的值。
  • RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)。以 ravp_t 类型的字符串形式返回 AVP 的指定实例。特定的 RADIUS AVP 可以在 RADIUS 消息中多次出现。实例 (0) 返回第一个实例,实例 (1) 返回第二个实例,依此类推,最多十六个实例。
  • RADIUS.REQ.AVP(<AVP code no>).VALUE(instance number)。以 text_t 类型的字符串形式返回 AVP 的指定实例的值。
  • RADIUS.REQ.AVP(<AVP code no>).COUNT。以整数形式返回 RADIUS 连接中特定 AVP 的实例数。
  • RADIUS.REQ.AVP(<AVP code no>).EXISTS。如果消息中存在指定类型的 AVP,则返回 TRUE;如果不存在,则返回 FALSE。

响应表达式:

RADIUS 响应表达式与 RADIUS 请求表达式相同,唯一的不同是 RES 取代了 REQ。

AVP 值的类型转换:

ADC 支持将 RADIUS AVP 值类型转换为文本、整数、无符号整数、长整数、无符号长整数、ipv4 地址、ipv6 地址、ipv6 前缀和时间数据类型的表达式。其语法与其他 NetScaler 类型转换表达式的语法相同。

示例:

ADC 支持将 RADIUS AVP 值类型转换为文本、整数、无符号整数、长整数、无符号长整数、ipv4 地址、ipv6 地址、ipv6 前缀和时间数据类型的表达式。其语法与其他 NetScaler 类型转换表达式的语法相同。

RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->

AVP 类型表达式:

NetScaler 支持使用 RFC2865 和 RFC2866 中描述的分配整数代码提取 RADIUS AVP 值的表达式。您也可以使用文本别名来完成同样的任务。以下是一些例子。

  • RADIUS.REQ.AVP (1) .VALUE 或 radius.req.username.Value。提取 RADIUS 用户名值。
  • RADIUS.REQ.AVP (4). VALUE 或 RADIUS.REQ. ACCT_SESSION_ID.value. 从消息中提取 Acct-Session-ID AVP(代码 44)。
  • RADIUS.REQ.AVP (26). VALUE 和 RADIUS.REQ.VENDOR_SPECIFIC.VALUE。提取供应商特定的值。

可以使用相同的方式提取最常用的 RADIUS AVP 的值。

RADIUS 绑定点:

包含 RADIUS 表达式的策略有四个全局绑定点可用。

  • RADIUS_REQ_OVERRIDE。优先级/替代请求策略队列。
  • RADIUS_REQ_DEFAULT。标准请求策略队列。
  • RADIUS_RES_OVERRIDE。优先级/替代响应策略队列。
  • RADIUS_RES_DEFAULT。标准响应策略队列。

RADIUS 响应程序特定表达式:

  • RADIUS_RESPONDWITH。使用指定的 RADIUS 响应进行响应。响应是使用 NetScaler 表达式创建的,包括 RADIUS 表达式和任何其他适用的表达式。
  • RADIUS.NEW_ANSWER。向用户发送新的 RADIUS 答案。
  • RADIUS.NEW_ACCESSREJECT。拒绝 RADIUS 请求。
  • RADIUS.NEW_AVP。将指定的新 AVP 添加到响应中。

用例

以下是带有响应程序的 RADIUS 的用例。

阻止来自特定网络的 RADIUS 请求

要配置响应程序功能以阻止来自特定网络的身份验证请求,请先创建拒绝请求的响应者操作。使用策略中的操作来选择来自您要阻止的网络的请求。将响应程序策略绑定到特定于 Radius 的全局绑定点,指定:

  • 优先级
  • END 作为 nextExpr 值,以确保匹配此策略时策略评估停止
  • RADIUS_REQ_OVERRIDE 作为您向其分配策略的队列,因此在将策略分配给默认队列之前先对其进行评估

将 Responder 配置为阻止来自特定网络的登录**

  • add responder action <actName> <actType>
  • add responder policy <polName> <rule> <actName>
  • bind responder global <polName> <priority> <nextExpr> -type <bindPoint>

示例:

> add responder action rspActRadiusReject respondwith radius.new_accessreject
Done

> add responder policy rspPolRadiusReject client.ip.src.in_subnet(10.224.85.0/24) rspActRadiusReject
Done

> bind responder global rspPolRadiusReject 1 END -type RADIUS_REQ_OVERRIDE
<!--NeedCopy-->
对响应程序的 RADIUS 支持