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