Compatibilidad con RADIUS para la función de reescritura

El lenguaje de expresiones Citrix ADC incluye expresiones que pueden extraer información y manipular mensajes RADIUS en solicitudes y respuestas. Estas expresiones permiten utilizar la función de reescritura para modificar partes de un mensaje RADIUS antes de enviarlo a su destino. Las directivas y acciones de reescritura pueden utilizar cualquier expresión que sea apropiada o relevante para un mensaje RADIUS. Las expresiones disponibles permiten identificar el tipo de mensaje RADIUS, extraer cualquier par atributo-valor (AVP) de la conexión y modificar AVP RADIUS. También puede crear etiquetas de directiva para conexiones RADIUS.

Puede utilizar las nuevas expresiones RADIUS en Reglas de reescritura para varios propósitos. Por ejemplo, podría:

  • Elimine la parte de dominio del nombre de usuario AVP de RADIUS para simplificar el inicio de sesión único (SSO).
  • Inserte un AVP específico del proveedor, como el campo MSISDN utilizado en las operaciones de la compañía telefónica para contener información del suscriptor.

También puede crear etiquetas de directiva para enrutar tipos específicos de solicitudes RADIUS a través de una serie de directivas adecuadas para dichas solicitudes.

Nota:

RADIUS for Rewrite tiene las siguientes limitaciones:

  • Citrix ADC no vuelve a firmar solicitudes o respuestas RADIUS reescritas. Si el servidor de autenticación RADIUS requiere mensajes RADIUS firmados, la autenticación fallará.
  • Las expresiones RADIUS disponibles actualmente no funcionan con atributos RADIUS IPv6.

La documentación de Citrix ADC para expresiones compatibles con RADIUS asume la familiaridad con la estructura básica y el propósito de las comunicaciones RADIUS. Si necesita más información sobre RADIUS, consulte la documentación del servidor RADIUS o busque en línea una introducción al protocolo RADIUS.

Configuración de directivas de reescritura para RADIUS

El procedimiento siguiente utiliza la línea de comandos de Citrix ADC para configurar una acción y una directiva de reescritura y enlazar la directiva a un punto de enlace global específico de reescritura.

Para configurar una acción y una directiva de reescritura y enlazar la directiva:

En el símbolo del sistema, escriba los siguientes comandos:

  • add rewrite action <actName> <actType>
  • add rewrite policy <polName> <rule> <actName>
  • bind rewrite policy <polName> <priority> <nextExpr> -type <bindPoint> donde<bindPoint> representa uno de los puntos de enlace globales específicos de reescritura.

Expresiones RADIUS para reescritura

En una configuración de reescritura, puede utilizar las siguientes expresiones Citrix ADC para hacer referencia a varias partes de una solicitud o respuesta RADIUS.

Identificación del tipo de conexión:

  • RADIUS.IS_CLIENT

    Devuelve TRUE si la conexión es un mensaje de cliente (solicitud) RADIUS.

  • RADIUS.IS_SERVER

    Devuelve TRUE si la conexión es un mensaje de servidor RADIUS (respuesta).

Expresiones de solicitud:

  • RADIUS.REQ.CODE

    Devuelve el número que corresponde al tipo de solicitud RADIUS. Una derivada de la clase num_at. Por ejemplo, una solicitud de acceso RADIUS devolvería 1 (uno). Una solicitud de contabilidad RADIUS devolvería 4.

  • RADIUS.REQ.LENGTH

    Devuelve la longitud de la solicitud RADIUS, incluido el encabezado. Una derivada de la clase num_at.

  • RADIUS.REQ.IDENTIFIER

    Devuelve el identificador de solicitud RADIUS, un número asignado a cada solicitud que permite que la solicitud coincida con la respuesta correspondiente. Una derivada de la clase num_at.

  • RADIUS.REQ.AVP(<AVP Code No>).VALUE

    Devuelve el valor de la primera aparición de este AVP como una cadena de tipo text_t.

  • RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)

    Devuelve la instancia especificada del AVP como una cadena de tipo RAVP_T. Un AVP RADIUS específico puede aparecer varias veces en un mensaje RADIUS. INSTANCE (0) devuelve la primera instancia, INSTANCE (1) devuelve la segunda instancia, y así sucesivamente, hasta dieciséis instancias.

  • RADIUS.REQ.AVP(<AVP code no>).VALUE(instance number)

    Devuelve el valor de la instancia especificada del AVP como una cadena de tipo text_t.

  • RADIUS.REQ.AVP(<AVP code no>).COUNT

    Devuelve el número de instancias de un AVP específico en una conexión RADIUS, como un entero.

  • RADIUS.REQ.AVP(<AVP code no>).EXISTS

    Devuelve TRUE si el tipo especificado de AVP existe en el mensaje, o FALSE si no lo hace.

Expresiones de respuesta:

Las expresiones de respuesta RADIUS son idénticas a las expresiones de solicitud RADIUS, excepto que RES reemplaza a REQ.

Tipos de valores AVP:

El ADC admite expresiones para escribir valores AVP RADIUS en los tipos de datos de texto, entero, entero sin signo, largo, sin signo, dirección IPv4, dirección ipv6, prefijo ipv6 y tiempo. La sintaxis es la misma que para otras expresiones de tipecast Citrix ADC.

Ejemplo:

El ADC admite expresiones para escribir valores AVP RADIUS en los tipos de datos de texto, entero, entero sin signo, largo, sin signo, dirección IPv4, dirección ipv6, prefijo ipv6 y tiempo. La sintaxis es la misma que para otras expresiones de tipecast Citrix ADC.

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

Expresiones de tipo AVP:

Citrix ADC admite expresiones para extraer valores AVP de RADIUS mediante los códigos enteros asignados descritos en RFC2865 y RFC2866. También puede utilizar alias de texto para realizar la misma tarea. A continuación se presentan algunos ejemplos.

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

    Extrae el valor de nombre de usuario RADIUS.

  • RADIUS.REQ.AVP (4). VALUE or RADIUS.REQ. ACCT\_SESSION\_ID.value

    Extrae el AVP ACCT-session-ID (código 44) del mensaje.

  • RADIUS.REQ.AVP (26). VALUE or RADIUS.REQ.VENDOR\_SPECIFIC.VALUE

    Extrae el valor específico del proveedor.

Los valores de los AVP RADIUS más utilizados se pueden extraer de la misma manera.

Puntos de enlace RADIUS:

Hay cuatro puntos de enlace globales disponibles para las directivas que contienen expresiones RADIUS.

  • RADIUS_REQ_OVERRIDE

    Prioridad o anulación de la cola de directivas de solicitud.

  • RADIUS_REQ_DEFAULT

    Cola de directivas de solicitudes estándar.

  • RADIUS_RES_OVERRIDE

    Prioridad o anulación de la cola de directivas de respuesta.

  • RADIUS_RES_DEFAULT

    Cola de directivas de respuesta estándar.

Expresiones específicas de reescritura de RADIUS:

  • RADIUS.NEW_AVP

    Devuelve el AVP RADIUS especificado como una cadena.

  • RADIUS.NEW_AVP_INTEGER32

    Devuelve el AVP RADIUS especificado como un entero.

  • RADIUS.NEW_AVP_UNSIGNED32

    Devuelve el AVP RADIUS especificado como un entero sin signo.

  • RADIUS.NEW_VENDOR_SPEC_AVP(<ID>, <definition>)

    Agrega los AVP específicos de proveedor extendido especificados a la conexión. Para, <ID>sustituya un número largo. Para, <definition>sustituya una cadena que contenga los datos para el AVP.

  • RADIUS.REQ.AVP_START

    Devuelve la ubicación entre el final del encabezado RADIUS y el inicio de los AVP. Se utiliza en acciones de reescritura.

    Ejemplo:

    add rewrite action insert1 insert_after radius.req.avp_start radius.new_avp(33, "NEW AVP")
  • RADIUS.REQ.AVP_END

    Devuelve la ubicación al final del mensaje de radio (o, en otras palabras, al final de todos los AVP) en el mensaje de radio. Se utiliza al realizar acciones de reescritura.

    Ejemplo:

    add rewrite action insert2 insert_before radius.req.avp_end "radius.new_avp(33, "NEW AVP")"
  • RADIUS.REQ.AVP_LIST

    Devuelve la ubicación al inicio de los AVP en un mensaje RADIUS y la longitud del mensaje RADIUS, excluyendo el encabezado. En otras palabras, devuelve todos los AVP de un mensaje RADIUS. Se utiliza para realizar acciones de reescritura.

    Ejemplo:

    add rewrite action insert3 insert_before_all radius.req.avp_list "radius.new_avp(33, "NEW AVP")" -search "avp(33)"

Tipos de acción de reescritura válidos para RADIUS:

Los tipos de acción Rewrite que se pueden utilizar con expresiones RADIUS son:

  • INSERT_AFTER
  • INSERT_BEFORE
  • INSERT_AFTER_ALL
  • INSERT_BEFORE_ALL
  • DELETE
  • DELETE_ALL
  • REPLACE
  • REPLACE_ALL

Todos INSERT_ actions se pueden utilizar para insertar un AVP RADIUS en una conexión RADIUS.

Casos de uso

Los siguientes son casos de uso para RADIUS con reescritura.

Reescritura del nombre de usuario AVP

Para configurar la función de reescritura para eliminar la cadena Dominio del nombre de usuario AVP de RADIUS, comience por crear una acción de reescritura REEMPLAZAR como se muestra en el ejemplo siguiente. Utilice la acción en una directiva de reescritura que seleccione todas las solicitudes RADIUS. Enlazar la directiva a un punto de enlace global. Al hacerlo, establezca la prioridad en el nivel adecuado para permitir que cualquier directiva de bloqueo o rechazo surta efecto primero, pero asegúrese de que todas las solicitudes que no estén bloqueadas o rechazadas se vuelvan a escribir. Establezca la Expresión GoTo (gotoPriorityExpr) en NEXT para continuar la evaluación de directivas y adjunte la directiva a la cola RADIUS_REQ_DEFAULT.

Ejemplo:

add rewrite action rwActRadiusDomainDel replace radius.req.user_name q/RADIUS.NEW_AVP(1,RADIUS.REQ.USER_NAME.VALUE.AFTER_STR(" "))/
add rewrite policy RadiusRemoveDomainPol true rwActRadiusDomainDel

Nota:

La directiva de reescritura para RADIUS no es aplicable a un servidor virtual de Gateway. Si un servidor virtual de Gateway se utiliza un equilibrio de carga, entonces RADIUS debe configurarse y la directiva de reescritura debe vincularse a un servidor virtual de equilibrio de carga RADIUS.

Inserción de un AVP específico del proveedor

Para configurar la acción de reescritura para insertar un AVP específico del proveedor que contenga el contenido del campo MSISDN, comience por crear una acción INSERT de reescritura que inserte el campo MSISDN en la solicitud. Utilice la acción en una directiva Rewrite que selecciona todas las solicitudes RADIUS. vincule la directiva a global, estableciendo la prioridad en un nivel adecuado y los demás parámetros, como se muestra en el ejemplo siguiente.

Ejemplo:

add rewrite action rwActRadiusInsMSISDN insert_after radius.req.avp_start RADIUS.NEW_VENDOR_SPEC_AVP(<VENDOR ID>, "RADIUS.NEW_AVP(<Attribute Code>, <MSISDN>)")
add rewrite policy rwPolRadiusInsMSISDN true rwActRadiusInsMSISDN
bind rewrite global rwPolRadiusInsMSISDN 100 NEXT -type RADIUS_REQ_DEFAULT