Prise en charge de RADIUS pour la fonction de réécriture
Le langage des expressions Citrix ADC inclut des expressions qui peuvent extraire des informations à partir des messages RADIUS et les manipuler dans les requêtes et les réponses. Ces expressions vous permettent d’utiliser la fonction de réécriture pour modifier des portions 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 attribute-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 à plusieurs 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 MISSDN utilisé dans les opérations de la compagnie de téléphone pour contenir des informations sur l’abonné.
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 a les limitations suivantes :
- Citrix ADC ne résigne pas les demandes ou réponses RADIUS réécrites. Si le serveur d’authentification RADIUS nécessite des messages RADIUS signés, l’authentification échoue.
- Les expressions RADIUS actuellement disponibles ne fonctionnent pas avec les attributs RADIUS IPv6.
La documentation Citrix ADC pour les expressions prenant en charge RADIUS suppose une familiarité avec la structure de base et le but des communications RADIUS. Si vous avez besoin de plus d’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 Citrix ADC 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 :
À 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 Citrix ADC suivantes pour faire référence à diverses parties d’une requête 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 réponse du serveur RADIUS.
Expressions de demande :
-
RADIUS.REQ.CODE
Renvoie le nombre correspondant au type de requête RADIUS. Un dérivé de la classe num_at. Par exemple, une demande d’accès RADIUS renvoie 1 (un). Une demande de comptabilité RADIUS retournerait 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’identificateur 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 se produire 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 la forme d’une 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 si ce n’est pas le cas.
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 taper les valeurs AVP RADIUS dans les types de données texte, entier, entier non signé, long, adresse ipv4, adresse ipv6, préfixe ipv6 et heure. La syntaxe est la même que pour les autres expressions de typecast Citrix ADC.
Exemple :
L’ADC prend en charge les expressions permettant de taper les valeurs AVP RADIUS dans les types de données texte, entier, entier non signé, long, adresse ipv4, adresse ipv6, préfixe ipv6 et heure. La syntaxe est la même que pour les autres expressions de typecast Citrix ADC.
RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->
Expressions de type AVP :
Citrix ADC prend en charge les expressions pour extraire les valeurs RADIUS AVP à l’aide des codes entiers assignés décrits dans RFC2865 et RFC2866. Vous pouvez également utiliser des alias de texte pour accomplir 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 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és 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 stratégie 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 forme d’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 spécifiques au fournisseur étendus spécifiés à la connexion. Pour
<ID>
, remplacez un nombre long. Pour<definition>
, remplacez une chaîne contenant les données de l’AVP. -
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 de rayon (ou, en d’autres termes, la fin de tous les AVP) dans le message de rayon. 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 et la longueur du message RADIUS, à l’exclusion de l’en-tête. En d’autres termes, renvoie tous les AVP d’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’action de réécriture valides pour RADIUS :
Les types d’action 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
- REPLACE
- REPLACE_ALL
Tout INSERT_ actions
peut être utilisé pour insérer un RADIUS AVP dans une connexion RADIUS.
Cas d’utilisation
Voici des cas d’utilisation pour RADIUS avec réécriture.
Réécriture du nom d’utilisateur AVP
Pour configurer la fonction de réécriture pour supprimer la chaîne de domaine 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 Gateway est utilisé un é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 Réécriture pour insérer un AVP spécifique au fournisseur contenant le contenu du champ MISSDN, commencez par créer une action INSERT réécriture qui insère le champ MISSDN 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-->