Compatibilidad con RADIUS para la función de reescritura
El lenguaje de expresiones de NetScaler incluye expresiones que pueden extraer información de los mensajes RADIUS y manipularlos en las 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. Sus directivas y acciones de reescritura pueden usar 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 de atributos y valores (AVP) de la conexión y modificar los AVP de RADIUS. También puede crear etiquetas de directivas para las conexiones RADIUS.
Puede utilizar las nuevas expresiones RADIUS en las reglas de reescritura para varios propósitos. Por ejemplo, podrías hacer lo siguiente:
- Elimine la parte domain\ del nombre de usuario de RADIUS AVP para simplificar el inicio de sesión único (SSO).
- Inserte un AVP específico del proveedor, como el campo MSISDN que se utiliza en las operaciones de la compañía telefónica, para contener la información del suscriptor.
También puede crear etiquetas de directivas para enrutar tipos específicos de solicitudes RADIUS a través de una serie de directivas que sean apropiadas para esas solicitudes.
Nota:
RADIUS for Rewrite tiene las siguientes limitaciones:
- NetScaler no vuelve a firmar las solicitudes o respuestas de 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 los atributos IPv6 de RADIUS.
La documentación de NetScaler para las expresiones compatibles con RADIUS asume que está familiarizado 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 Internet una introducción al protocolo RADIUS.
Configuración de directivas de reescritura para RADIUS
El siguiente procedimiento utiliza la línea de comandos de NetScaler para configurar una acción y una directiva de reescritura y vincular la directiva a un punto de enlace global específico de la reescritura.
Para configurar una acción y una directiva de reescritura y vincular la directiva:
En el símbolo del sistema, escriba los comandos siguientes:
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 la reescritura.
Expresiones RADIUS para reescritura
En una configuración de reescritura, puede utilizar las siguientes expresiones de NetScaler para hacer referencia a varias partes de una solicitud o respuesta de RADIUS.
Identificación del tipo de conexión:
-
RADIUS.IS_CLIENT
Devuelve TRUE si la conexión es un mensaje de cliente RADIUS (solicitud).
-
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. Un derivado de la clase num_at. Por ejemplo, una solicitud de acceso RADIUS devolvería 1 (uno). Una solicitud de contabilidad de RADIUS devolvería 4.
-
RADIUS.REQ.LENGTH
Devuelve la longitud de la solicitud RADIUS, incluido el encabezado. Un derivado de la clase num_at.
-
RADIUS.REQ.IDENTIFIER
Devuelve el identificador de solicitud RADIUS, un número asignado a cada solicitud que permite hacer coincidir la solicitud con la respuesta correspondiente. Un derivado 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 de AVP especificado existe en el mensaje, o FALSE si no existe.
Expresiones de respuesta:
Las expresiones de respuesta RADIUS son idénticas a las expresiones de solicitud de RADIUS, excepto que RES reemplaza a REQ.
Encasillados de valores de AVP:
El ADC admite expresiones para convertir valores de RADIUS AVP a los tipos de datos de texto, entero, entero sin signo, largo, largo sin signo, dirección ipv4, dirección ipv6, prefijo ipv6 y tiempo. La sintaxis es la misma que la de otras expresiones de tipo de NetScaler.
Ejemplo:
El ADC admite expresiones para convertir valores de RADIUS AVP a los tipos de datos de texto, entero, entero sin signo, largo, largo sin signo, dirección ipv4, dirección ipv6, prefijo ipv6 y tiempo. La sintaxis es la misma que la de otras expresiones de tipo de NetScaler.
RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->
Expresiones de tipo AVP:
NetScaler admite expresiones para extraer valores de RADIUS AVP mediante los códigos enteros asignados que se describen en RFC2865 y RFC2866. También puede utilizar alias de texto para realizar la misma tarea. A continuación se muestran algunos ejemplos.
-
RADIUS.REQ.AVP (1).VALUE or RADIUS.REQ.USERNAME.value
Extrae el valor del 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 las AVP RADIUS más utilizadas 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
Lista de directivas de prioridad o anulación de solicitudes.
-
RADIUS_REQ_DEFAULT
Cola de directivas de solicitudes estándar.
-
RADIUS_RES_OVERRIDE
Prioriza o anula la cola de directivas de respuestas.
-
RADIUS_RES_DEFAULT
Cola de directivas de respuesta estándar.
Expresiones específicas de reescritura de RADIUS:
-
RADIUS.NEW_AVP
Devuelve el RADIUS AVP especificado como cadena.
-
RADIUS.NEW_AVP_INTEGER32
Devuelve el RADIUS AVP especificado como un entero.
-
RADIUS.NEW_AVP_UNSIGNED32
Devuelve el RADIUS AVP especificado como un entero sin signo.
-
RADIUS.NEW_VENDOR_SPEC_AVP(<ID>, <definition>)
Agrega las AVP ampliadas específicas del proveedor especificadas a la conexión.
<ID>
Sustitúyalo por un número largo.<definition>
Sustituya por una cadena que contenga los datos del AVP. -
RADIUS.REQ.AVP_START
Devuelve la ubicación entre el final del encabezado RADIUS y el inicio de las AVP. Se utiliza en acciones de reescritura.
Ejemplo:
add rewrite action insert1 insert_after radius.req.avp_start radius.new_avp(33, "NEW AVP")
<!--NeedCopy-->
-
RADIUS.REQ.AVP_END
Devuelve la ubicación al final del mensaje Radius (o en otras palabras, al final de todos los AVP) en el mensaje Radius. Se utiliza al realizar acciones de reescritura.
Ejemplo:
add rewrite action insert2 insert_before radius.req.avp_end "radius.new_avp(33, "NEW AVP")"
<!--NeedCopy-->
-
RADIUS.REQ.AVP_LIST
Devuelve la ubicación al principio de las AVP de 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)"
<!--NeedCopy-->
Tipos de acciones de reescritura válidos para RADIUS:
Los tipos de acciones de reescritura que se pueden utilizar con las expresiones RADIUS son:
- INSERT_AFTER
- INSERT_BEFORE
- INSERT_AFTER_ALL
- INSERT_BEFORE_ALL
- SUPRIMIR
- DELETE_ALL
- REEMPLAZAR
- REPLACE_ALL
Todos se INSERT_ actions
pueden utilizar para insertar un AVP RADIUS en una conexión RADIUS.
Casos de uso
Los siguientes son casos de uso de RADIUS con reescritura.
Reescribir el nombre de usuario AVP
Para configurar la función de reescritura para eliminar la cadena Domain\ del nombre de usuario AVP de RADIUS, comience por crear una acción REEMPLAZAR de reescritura, como se muestra en el ejemplo siguiente. Utilice la acción de una directiva de reescritura que seleccione todas las solicitudes RADIUS. Enlazar la directiva a un punto de enlace global. Al hacerlo, defina la prioridad en el nivel adecuado para permitir que cualquier directiva de bloqueo o rechazo entre en vigor 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 con la evaluación de la directiva 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
<!--NeedCopy-->
Nota:
La directiva de reescritura de RADIUS no se aplica a un servidor virtual de gateway. Si se utiliza un servidor virtual de puerta de enlace como equilibrio de carga, se debe configurar RADIUS y la directiva de reescritura debe estar vinculada 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 de una directiva de reescritura que seleccione todas las solicitudes de RADIUS. Vincule la directiva a la global y establezca la prioridad en un nivel adecuado y los demás parámetros, como se muestra en el siguiente ejemplo.
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
<!--NeedCopy-->