Citrix ADC

RADIUS支持重写特性

Citrix ADC表达式语言包括可以从请求和响应中提取信息并操作RADIUS消息的表达式。这些表达式使您能够在将RADIUS消息发送到目的地之前使用重写特性修改其部分。重写策略和操作可以使用与RADIUS消息适当或相关的任何表达式。可用的表达式使您能够识别RADIUS消息类型,从连接中提取任何属性-值对(AVP),并修改RADIUS AVP。还可以为RADIUS连接创建策略标签。

您可以在重写规则中使用新的RADIUS表达式来实现许多目的。例如,你可以:

  • 删除RADIUS用户名AVP的域\部分以简化单点登录(SSO)。
  • 插入特定于供应商的AVP,例如在电话公司操作中用于包含用户信息的MSISDN字段。

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

请注意

RADIUS for Rewrite有以下限制:

  • Citrix ADC不会重新签署重写的RADIUS请求或响应。如果RADIUS认证服务器需要签名的RADIUS消息,则认证将失败。
  • 目前可用的RADIUS表达式不适用于RADIUS IPv6属性。

支持RADIUS的Citrix ADC文档假定您熟悉RADIUS通信的基本结构和目的。如果您需要更多关于RADIUS的信息,请参阅您的RADIUS服务器文档或在线搜索RADIUS协议的介绍。

配置RADIUS重写策略

下面的过程使用Citrix ADC命令行配置重写操作和策略,并将策略绑定到特定于重写的全局绑定点。

配置“重写”动作和策略,并绑定策略

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

  • 添加重写动作
  • 添加重写策略
  • 绑定重写策略 -type . bindPoint在哪里< bindPoint >表示特定于重写的全局绑定点之一。

重写RADIUS表达式

在重写配置中,可以使用以下Citrix ADC表达式引用RADIUS请求或响应的各个部分。

识别连接类型

  • 半径。IS_CLIENT

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

  • 半径。IS_SERVER

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

请求表达式

  • RADIUS.REQ.CODE

    返回与RADIUS请求类型对应的数字。num_at类的导数。例如,一个RADIUS访问请求将返回1(1)。RADIUS计费请求将返回4。

  • RADIUS.REQ.LENGTH

    返回RADIUS请求的长度,包括头。num_at类的导数。

  • RADIUS.REQ.IDENTIFIER

    返回RADIUS请求标识符,这是分配给每个请求的一个数字,允许该请求与相应的响应匹配。num_at类的导数。

  • RADIUS.REQ。AVP()。价值

    返回该AVP第一次出现的值,作为text_t类型的字符串。

  • RADIUS.REQ。AVP()。实例(实例)

    将AVP的指定实例作为RAVP_t类型的字符串返回。一个特定的RADIUS AVP可以在一条RADIUS消息中出现多次。INSTANCE(0)返回第一个实例,INSTANCE(1)返回第二个实例,依此类推,最多16个实例。

  • RADIUS.REQ。AVP()。价值(instance number)

    返回AVP的指定实例的值为text_t类型的字符串。

  • RADIUS.REQ。AVP()。数

    以整数形式返回RADIUS连接中特定AVP的实例数。

  • RADIUS.REQ。AVP()。存在

    如果消息中存在指定类型的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 < !——NeedCopy >

AVP类型表达式

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

  • RADIUS.REQ.AVP (1).VALUE或RADIUS.REQ.USERNAME.value

    提取RADIUS用户名的值。

  • RADIUS.REQ. avp (4). VALUE或RADIUS.REQ. avp。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重写特定表达式

  • 半径。NEW_AVP

    以字符串形式返回指定的RADIUS AVP。

  • 半径。NEW_AVP_INTEGER32

    以整数形式返回指定的RADIUS AVP。

  • 半径。NEW_AVP_UNSIGNED32

    以无符号整数形式返回指定的RADIUS AVP。

  • 半径。NEW_VENDOR_SPEC_AVP (< ID >、< >定义)

    将指定的扩展供应商特定的avp添加到连接中。为<标识>,代入一个长数字。为< >定义,用包含AVP数据的字符串代替。

  • RADIUS.REQ.AVP_START

    返回RADIUS报头结束和avp开始之间的位置。用于重写操作。

    例子:

在radius.req后添加重写动作insert1 insert_。avp_start半径。new_avp(33, "NEW AVP") 
  • RADIUS.REQ.AVP_END

    返回半径消息中半径消息的结束位置(或换句话说,所有avp的结束位置)。在执行重写操作时使用。

    例子:

在radius.req之前添加重写动作insert2 insert_。avp_end”半径。new_avp(33, \"NEW AVP\")"<!——NeedCopy >
  • RADIUS.REQ.AVP_LIST

    返回RADIUS消息中avp开始时的位置,以及RADIUS消息的长度,不包括头。换句话说,返回RADIUS消息中的所有avp。用于执行重写操作。

    例子:

添加重写动作insert3 insert_before_all radius.req。avp_list”半径。new_avp(33, \"NEW AVP\")"搜索“avp(33)”<!——NeedCopy >

RADIUS的有效重写动作类型

可以与RADIUS表达式一起使用的重写操作类型有:

  • INSERT_AFTER
  • INSERT_BEFORE
  • INSERT_AFTER_ALL
  • INSERT_BEFORE_ALL
  • 删除
  • DELETE_ALL
  • 取代
  • REPLACE_ALL

所有INSERT_行动可用于将RADIUS AVP插入到RADIUS连接中。

用例

下面是重写RADIUS的用例。

重写User-Name AVP

要配置重写功能以从RADIUS用户名AVP中删除Domain\字符串,首先创建一个重写REPLACE动作,如下例所示。在重写策略中使用选择所有RADIUS请求的操作。将策略绑定到全局绑定点。这样做时,请将优先级设置为适当的级别,以允许任何阻止或拒绝策略首先生效,但确保所有未阻止或拒绝的请求都将被重写。将Goto表达式(gotoPriorityExpr)设置为NEXT以继续策略评估,并将策略附加到RADIUS_REQ_DEFAULT队列。

例子:

添加重写操作rwActRadiusDomainDel替换radius.req。RADIUS.REQ.USER_NAME.VALUE user_name q / RADIUS.NEW_AVP(1。AFTER_STR(" "))/ add rewrite policy RadiusRemoveDomainPol true rwActRadiusDomainDel 

请注意

RADIUS重写策略不适用于网关虚拟服务器。如果使用网关虚拟服务器进行负载均衡,则需要配置RADIUS,并将重写策略绑定到RADIUS负载均衡虚拟服务器上。

插入特定于供应商的AVP

要将重写操作配置为插入包含MSISDN字段内容的特定于供应商的AVP,首先要创建一个将MSISDN字段插入请求的重写insert操作。在重写策略中使用选择所有RADIUS请求的操作。将策略绑定到global,将优先级设置为适当的级别,并设置其他参数,示例如下。

例子:

添加重写动作rwActRadiusInsMSISDN insert_after radius.req。avp_start半径。New_vendor_spec_avp(<供应商id >, "半径。NEW_AVP(, )") add rewrite policy rwPolRadiusInsMSISDN true rwActRadiusInsMSISDN bind rewrite global rwPolRadiusInsMSISDN 100 NEXT -type RADIUS_REQ_DEFAULT 
RADIUS支持重写特性