Configuration et utilisation de variables
Pour configurer des variables à l'aide de l'interface de ligne de commande
-
Créez une variable.
add ns variable <name> -type <string> [-scope global] [-ifFull ( undef | lru )] [-ifValueTooBig ( undef | truncate )] [-ifNoValue ( undef | init )] [-init <string>] [-expires <positive_integer>] [-comment <string>]
add ns variable my_counter –type ulong -init 1
add ns variable user_privilege_map -type map(text(15),text(10),10000)
add ns assignment <name> -variable <expression> [-set <expression> | -add <expression> | -sub <expression> | -append <expression> | -clear] [-comment <string>]
add ns assignment inc_my_counter -variable $my_counter -add 1
add ns assignment set_user_privilege -variable $user_privilege_map[client.ip.src.typecast_text_t] -set sys.http.callout(get_user_privilege)
-
Appelez l'affectation de variable dans une stratégie.Il existe deux fonctions qui peuvent fonctionner sur des variables de carte.
-
$name.valueExists(key-expression). Renvoie true s'il y a une valeur dans la carte sélectionnée par l'expression clé. Sinon renvoie false. Cette fonction met à jour les informations d'expiration et de LRU si l'entrée de carte existe, mais ne crée pas de nouvelle entrée de carte si la valeur n'existe pas.
-
$name.valueCount. Renvoie le nombre de valeurs actuellement détenues par la variable. Il s'agit du nombre d'entrées dans une carte. Pour une variable singleton, ceci est 0 si la variable n'est pas initialisée ou 1 autrement.
Exemple : invoquez l'affectation nommée « set_user_privilege » avec une stratégie de compression. -
add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
Cas d'utilisation pour insérer un en-tête HTTP dans le côté réponse
add ns variable http_req_data -type text(100) -scope transaction
add ns assignment set_http_req_data -variable $http_req_data -set http.req.body(100)
add rewrite action act_ins_header insert_http_header user_name $http_req_data.after_str("user_name").before_str("password")
add rewrite policy pol_set_variable true set_http_req_data
bind rewrite global pol_set_variable 10 -type req_dEFAULT
add rewrite policy pol_ins_header true act_ins_header
bind rewrite global pol_ins_header 10 -type res_dEFAULT
Action d'affectation
GET /client-access?<client-IP-address> qui renvoie une réponse avec « BLOCK » ou « Autoriser » dans le corps. La légende HTTP est configurée pour inclure l'adresse IP du client associée à une requête entrante. Lorsque l'appliance Citrix ADC reçoit une demande d'un client, l'appliance génère la demande de légende et l'envoie au serveur de légende, qui héberge une base de données d'adresses IP figurant sur la liste noire et un agent de légende HTTP qui vérifie si l'adresse IP du client est répertoriée dans la base de données. L'agent de légende HTTP reçoit la demande de légende, vérifie si l'adresse IP du client est répertoriée et envoie une réponse. La réponse est un code d'état, 200, 302 avec « BLOCK » ou « Autoriser » dans le corps. En fonction du code d'état, l'appliance effectue l'évaluation de la stratégie. Si l'évaluation de stratégie a la valeur true, l'action d'affectation est déclenchée immédiatement et l'action définit la valeur à la variable. L'appliance utilise et définit cette valeur de variable pour une évaluation ultérieure de stratégie dans le même module.
Cas d'utilisation pour configurer l'action d'affectation
-
La décision d'accès est fournie par un service Web séparé, avec la demande qui renvoie une réponse avec BLOCK ou Autoriser dans le corps.
GET /url-service>/url-allowed?<URL path> -
Configurez une variable de carte pour contenir les décisions d'accès pour les URL.
add ns variable url_list_map -type 'map(text(1000),text(10),10000)' -
Configurez une légende HTTP pour envoyer la demande d'accès au service Web.
add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)' -
Configurez une action d'affectation pour appeler la légende pour obtenir la décision d'accès et l'affecter à l'entrée de mappage de l'URL.
add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout) -
Configurez une action de répondeur pour envoyer une réponse 403 si une requête d'URL est bloquée.
add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"' -
Configurez une stratégie de répondeur pour définir l'entrée de carte pour l'URL si elle n'est pas déjà définie. Avec l'amélioration de l'action immédiate, la valeur d'entrée de carte est définie lors de l'évaluation de cette stratégie. Avant l'amélioration, l'affectation n'a pas été effectuée avant que toutes les stratégies des intervenants aient été évaluées décision est fournie par un service Web distinct.
add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn -
Configurez une stratégie de répondeur pour bloquer l'accès à une URL si sa valeur d'entrée de carte est BLOCK. Avec l'amélioration de l'action immédiate, l'entrée de carte définie par la stratégie précédente peut être utilisée dans cette stratégie. Avant l'amélioration, l'entrée de carte n'est toujours pas définie à ce stade.
add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act -
Liez les stratégies de répondeur au serveur virtuel. Remarque : Nous ne pouvons pas lier globalement les stratégies car nous ne voulons pas les exécuter pour la légende HTTP sur un serveur virtuel distinct.
bind lb vserver vs -policyName client_access_assn_pol -priority 10 -gotoPriorityExpression NEXT -type REQUESTbind lb vserver vs -policyName client_access_block_pol -priority 20 -gotoPriorityExpression END -type REQUEST
Pour configurer des variables à l'aide de l'utilitaire de configuration
-
Accédez à AppExpert > Variables NS, pour créer une variable.
-
Accédez à AppExpert > NS Assignments, pour affecter des valeurs à la variable.
-
Accédez à la zone d'entités appropriée dans laquelle vous souhaitez configurer l'affectation en tant qu'action.