Citrix ADC

响应程序的 RADIUS 支持

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

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

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

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

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

为 RADIUS 配置响应程序策略

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

要配置响应程序操作和策略并绑定策略,请执行以下操作:

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

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

响应程序的 RADIUS 表达式

在响应程序配置中,您可以使用以下 Citrix ADC 表达式来引用 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。返回此 AVP 首次出现的值作为 text_t 类型的字符串。
  • RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)。以 RAVP_t 类型的字符串形式返回 AVP 的指定实例。在 RADIUS 消息中可能会出现多次特定的 RADIUS AVP。INSTANCE (0) 返回第一个实例,INSTANCE (1) 返回第二个实例,依此类促,最多可返回 16 个实例。
  • 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 前缀和时间数据类型的表达式。语法与其他 Citrix ADC 类型转换表达式的语法相同。

示例:

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

RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at

AVP 类型表达式:

Citrix ADC 支持使用 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. 从消息中提取会话 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 响应进行响应。使用 Citrix ADC 表达式创建响应,包括 RADIUS 表达式和任何其他适用的表达式。
  • RADIUS.NEW_ANSWER。向用户发送一个新的 RADIUS 答案。
  • RADIUS.NEW_ACCESSREJECT。拒绝 RADIUS 请求。
  • RADIUS.NEW_AVP。将指定的新 AVP 添加到响应中。

用例

下面是具有响应程序的 RADIUS 用例。

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

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

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

将响应程序配置为阻止来自特定网络的登录**

  • 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

响应程序的 RADIUS 支持