Support RADIUS pour la fonctionnalité de réécriture
Le langage d’expressions NetScaler inclut des expressions permettant d’extraire des informations des messages RADIUS et de les manipuler dans les requêtes et les réponses. Ces expressions vous permettent d’utiliser la fonction de réécriture pour modifier des parties d’un message RADIUS avant de l’envoyer à sa destination. Vos stratégies et actions de réécriture peuvent utiliser n’importe quelle expression appropriée ou pertinente à un message RADIUS. Les expressions disponibles vous permettent d’identifier le type de message RADIUS, d’extraire toute paire attribut-valeur (AVP) de la connexion et de modifier les AVP RADIUS. Vous pouvez également créer des étiquettes de stratégie pour les connexions RADIUS.
Vous pouvez utiliser les nouvelles expressions RADIUS dans les règles de réécriture à différentes fins. Par exemple, vous pouvez :
- Supprimez la partie domaine \ du nom d’utilisateur RADIUS AVP pour simplifier l’authentification unique (SSO).
- Insérez un AVP spécifique au fournisseur, tel que le champ MSISDN utilisé dans les opérations de la compagnie de téléphone pour contenir les informations sur les abonnés.
Vous pouvez également créer des étiquettes de stratégie pour acheminer des types spécifiques de demandes RADIUS via une série de stratégies appropriées à ces demandes.
Remarque :
RADIUS for Rewrite présente les limites suivantes :
- NetScaler ne signe pas à nouveau les demandes ou réponses RADIUS réécrites. Si le serveur d’authentification RADIUS requiert des messages RADIUS signés, l’authentification échouera.
- Les expressions RADIUS actuellement disponibles ne fonctionnent pas avec les attributs IPv6 de RADIUS.
La documentation de NetScaler relative aux expressions qui prennent en charge RADIUS suppose une connaissance de la structure et de l’objectif de base des communications RADIUS. Si vous avez besoin de plus amples informations sur RADIUS, consultez la documentation de votre serveur RADIUS ou recherchez en ligne une introduction au protocole RADIUS.
Configuration des stratégies de réécriture pour RADIUS
La procédure suivante utilise la ligne de commande NetScaler pour configurer une action et une stratégie de réécriture et lier la stratégie à un point de liaison global spécifique à la réécriture.
Pour configurer une action et une stratégie de réécriture, et lier la stratégie,procédez comme suit :
À l’invite de commandes, tapez les commandes suivantes :
add rewrite action <actName> <actType>
add rewrite policy <polName> <rule> <actName>
-
bind rewrite policy <polName> <priority> <nextExpr> -type <bindPoint>
où<bindPoint>
représente l’un des points de liaison globaux spécifiques à la réécriture.
Expressions RADIUS pour la réécriture
Dans une configuration de réécriture, vous pouvez utiliser les expressions NetScaler suivantes pour faire référence à différentes parties d’une demande ou d’une réponse RADIUS.
Identification du type de connexion :
-
RADIUS.IS_CLIENT
Renvoie TRUE si la connexion est un message client RADIUS (demande).
-
RADIUS.IS_SERVER
Renvoie TRUE si la connexion est un message de serveur RADIUS (réponse).
Expressions de demande :
-
RADIUS.REQ.CODE
Renvoie le numéro qui correspond au type de demande RADIUS. Un dérivé de la classe num_at. Par exemple, une demande d’accès RADIUS renverrait 1 (un). Une demande de comptabilité RADIUS renverrait 4.
-
RADIUS.REQ.LENGTH
Renvoie la longueur de la requête RADIUS, y compris l’en-tête. Un dérivé de la classe num_at.
-
RADIUS.REQ.IDENTIFIER
Renvoie l’identifiant de demande RADIUS, un numéro attribué à chaque demande qui permet de faire correspondre la demande à la réponse correspondante. Un dérivé de la classe num_at.
-
RADIUS.REQ.AVP(<AVP Code No>).VALUE
Renvoie la valeur de la première occurrence de cet AVP sous la forme d’une chaîne de type text_t.
-
RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)
Renvoie l’instance spécifiée de l’AVP sous la forme d’une chaîne de type RAVP_t. Un AVP RADIUS spécifique peut apparaître plusieurs fois dans un message RADIUS. INSTANCE (0) renvoie la première instance, INSTANCE (1) renvoie la deuxième instance, et ainsi de suite, jusqu’à seize instances.
-
RADIUS.REQ.AVP(<AVP code no>).VALUE(instance number)
Renvoie la valeur de l’instance spécifiée de l’AVP sous forme de chaîne de type text_t.
-
RADIUS.REQ.AVP(<AVP code no>).COUNT
Renvoie le nombre d’instances d’un AVP spécifique dans une connexion RADIUS, sous forme d’entier.
-
RADIUS.REQ.AVP(<AVP code no>).EXISTS
Renvoie TRUE si le type d’AVP spécifié existe dans le message, ou FALSE dans le cas contraire.
Expressions de réponse :
Les expressions de réponse RADIUS sont identiques aux expressions de demande RADIUS, sauf que RES remplace REQ.
Typecasts des valeurs AVP :
L’ADC prend en charge les expressions permettant de convertir les valeurs RADIUS AVP sous forme de texte, d’entier, d’entier non signé, de type long, de type long non signé, d’adresse ipv4, d’adresse ipv6, de préfixe ipv6 et de types de données temporelles. La syntaxe est la même que pour les autres expressions NetScaler typecast.
Exemple :
L’ADC prend en charge les expressions permettant de convertir les valeurs RADIUS AVP sous forme de texte, d’entier, d’entier non signé, de type long, de type long non signé, d’adresse ipv4, d’adresse ipv6, de préfixe ipv6 et de types de données temporelles. La syntaxe est la même que pour les autres expressions NetScaler typecast.
RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->
Expressions de type AVP :
NetScaler prend en charge les expressions permettant d’extraire les valeurs RADIUS AVP à l’aide des codes entiers assignés décrits dans les RFC2865 et RFC2866. Vous pouvez également utiliser des alias de texte pour effectuer la même tâche. Voici quelques exemples.
-
RADIUS.REQ.AVP (1).VALUE or RADIUS.REQ.USERNAME.value
Extrait la valeur du nom d’utilisateur RADIUS.
-
RADIUS.REQ.AVP (4). VALUE or RADIUS.REQ. ACCT\_SESSION\_ID.value
Extrait le Acct-Session-ID AVP (code 44) du message.
-
RADIUS.REQ.AVP (26). VALUE or RADIUS.REQ.VENDOR\_SPECIFIC.VALUE
Extrait la valeur spécifique au fournisseur.
Les valeurs des AVP RADIUS les plus couramment utilisées peuvent être extraites de la même manière.
Points de liaison RADIUS :
Quatre points de liaison globaux sont disponibles pour les stratégies qui contiennent des expressions RADIUS.
-
RADIUS_REQ_OVERRIDE
Priorité/Remplacer la file d’attente de stratégie de demande.
-
RADIUS_REQ_DEFAULT
File d’attente de règles de demande standard.
-
RADIUS_RES_OVERRIDE
Priorité/Remplacer la file d’attente de stratégie de réponse.
-
RADIUS_RES_DEFAULT
File d’attente de stratégie de réponse standard.
Expressions spécifiques à la réécriture RADIUS :
-
RADIUS.NEW_AVP
Renvoie le RADIUS AVP spécifié sous forme de chaîne.
-
RADIUS.NEW_AVP_INTEGER32
Renvoie le RADIUS AVP spécifié sous la forme d’un entier.
-
RADIUS.NEW_AVP_UNSIGNED32
Renvoie le RADIUS AVP spécifié sous la forme d’un entier non signé.
-
RADIUS.NEW_VENDOR_SPEC_AVP(<ID>, <definition>)
Ajoute les AVP étendus spécifiques au fournisseur à la connexion. Remplacez par un nombre long.
<ID>
Remplacez par une chaîne contenant les données de l’AVP.<definition>
-
RADIUS.REQ.AVP_START
Renvoie l’emplacement entre la fin de l’en-tête RADIUS et le début des AVP. Utilisé dans les actions de réécriture.
Exemple :
add rewrite action insert1 insert_after radius.req.avp_start radius.new_avp(33, "NEW AVP")
<!--NeedCopy-->
-
RADIUS.REQ.AVP_END
Renvoie l’emplacement à la fin du message Radius (ou en d’autres termes, fin de tous les AVP) dans le message Radius. Utilisé lors de l’exécution d’actions de réécriture.
Exemple :
add rewrite action insert2 insert_before radius.req.avp_end "radius.new_avp(33, "NEW AVP")"
<!--NeedCopy-->
-
RADIUS.REQ.AVP_LIST
Renvoie l’emplacement au début des AVP dans un message RADIUS, ainsi que la longueur du message RADIUS, à l’exclusion de l’en-tête. En d’autres termes, renvoie tous les AVP dans un message RADIUS. Utilisé pour effectuer des actions de réécriture.
Exemple :
add rewrite action insert3 insert_before_all radius.req.avp_list "radius.new_avp(33, "NEW AVP")" -search "avp(33)"
<!--NeedCopy-->
Types d’actions de réécriture valides pourRADIUS :
Les types d’actions de réécriture qui peuvent être utilisés avec les expressions RADIUS sont les suivants :
- INSERT_AFTER
- INSERT_BEFORE
- INSERT_AFTER_ALL
- INSERT_BEFORE_ALL
- SUPPRIMER
- DELETE_ALL
- REMPLACER
- REPLACE_ALL
Tous INSERT_ actions
peuvent être utilisés pour insérer un RADIUS AVP dans une connexion RADIUS.
Cas d’utilisation
Vous trouverez ci-dessous des cas d’utilisation de RADIUS avec réécriture.
Réécriture du nom d’utilisateur AVP
Pour configurer la fonctionnalité de réécriture afin de supprimer le domaine \ string du nom d’utilisateur RADIUS AVP, commencez par créer une action de réécriture REPLACE comme indiqué dans l’exemple ci-dessous. Utilisez l’action d’une stratégie de réécriture qui sélectionne toutes les requêtes RADIUS. Liez la stratégie à un point de liaison global. Lorsque vous le faites, définissez la priorité au niveau approprié pour autoriser les stratégies de blocage ou de rejet à prendre effet en premier, mais assurez-vous que toutes les demandes qui ne sont pas bloquées ou rejetées sont réécrites. Définissez l’expression Goto (GotoRiorityExpr) sur NEXT pour continuer l’évaluation de la stratégie et attachez-la à la file d’attente RADIUS_REQ_DEFAULT.
Exemple :
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-->
Remarque :
La stratégie de réécriture pour RADIUS n’est pas applicable à un serveur virtuel de Gateway. Si un serveur virtuel de passerelle est utilisé comme équilibrage de charge, RADIUS doit être configuré et la stratégie de réécriture doit être liée à un serveur virtuel d’équilibrage de charge RADIUS.
Insertion d’un AVP spécifique au fournisseur
Pour configurer l’action de réécriture afin d’insérer un AVP spécifique au fournisseur contenant le contenu du champ MSISDN, commencez par créer une action de réécriture INSERT qui insère le champ MSISDN dans la demande. Utilisez l’action d’une stratégie de réécriture qui sélectionne toutes les requêtes RADIUS. Liez la stratégie à global, en définissant la priorité sur un niveau approprié et les autres paramètres, comme illustré dans l’exemple suivant.
Exemple :
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-->