変数の構成と使用
コマンドラインインターフェイスを使用して変数を構成するには
-
変数を作成します。
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)
-
ポリシーで変数割り当てを呼び出します。マップ変数を操作できる2つの関数があります。
-
$name.valueExists(key-expression). キー式によって選択されたマップ内の値がある場合はtrueを返します。それ以外の場合は false を返します。この関数は、マップ・エントリが存在する場合は有効期限とLRU情報を更新しますが、値が存在しない場合は新しいマップ・エントリを作成しません。
-
$name.valueCount. 現在変数に保持されている値の数を返します。これは、マップ内のエントリの数です。シングルトン変数の場合、変数が初期化されていない場合は0、そうでない場合は1です。
例: 圧縮ポリシーを使用して「set_user_privilege」という名前の割り当てを呼び出します。 -
add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
レスポンス側にHTTPヘッダーを挿入するユースケース
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
割り当てアクション
GET /client-access?<client-IP-address> を返すリクエストで、別のWebサービスによって提供されます。HTTP コールアウトは、着信要求に関連付けられているクライアントの IP アドレスを含めるように設定されます。Citrix ADCアプライアンスがクライアントからの要求を受信すると、アプライアンスはコールアウト要求を生成し、コールアウトサーバーに送信します。コールアウトサーバーは、ブラックリストに登録されたIPアドレスのデータベースと、クライアントのIPアドレスがデータベースにリストされているかどうかをチェックするHTTPコールアウトエージェントをホストします。HTTP コールアウトエージェントは、コールアウト要求を受信し、クライアントの IP アドレスがリストされているかどうかを確認し、応答を送信します。応答は、本体の「BLOCK」または「ALLOW」とともに、ステータスコード、200、302です。ステータスコードに基づいて、アプライアンスはポリシー評価を実行します。ポリシー評価が true の場合、割り当てアクションはただちにトリガーされ、action は値を変数に設定します。アプライアンスは、同じモジュール内の後続のポリシー評価にこの変数値を使用し、設定します。
割り当てアクションを構成するためのユースケース
-
アクセス決定は、本体に BLOCK または ALLOW を含む応答を返すリクエストで、別の Web サービスによって提供されます。
GET /url-service>/url-allowed?<URL path> -
URL のアクセス決定を保持するマップ変数を設定します。
add ns variable url_list_map -type 'map(text(1000),text(10),10000)' -
Web サービスにアクセス要求を送信する HTTP コールアウトを設定します。
add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)' -
割り当てアクションを設定して、コールアウトを呼び出してアクセス決定を取得し、URL のマップエントリに割り当てます。
add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout) -
URL 要求がブロックされた場合に 403 応答を送信するように応答側アクションを設定します。
add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"' -
URL のマップエントリが設定されていない場合は、レスポンダーポリシーを設定します。即時アクション拡張により、このポリシーの評価時にマップエントリの値が設定されます。拡張以前は、すべてのレスポンダーポリシーが評価され、別の Web サービスによって決定が行われるまで、割り当ては行われませんでした。
add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn -
マップエントリの値が BLOCK の場合、URL へのアクセスをブロックするレスポンダーポリシーを設定します。即時アクション拡張により、前述のポリシーによって設定されたマップエントリをこのポリシーで使用できます。機能強化以前は、この時点ではマップエントリの設定が解除されます。
add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act -
応答側ポリシーを仮想サーバにバインドします。注:別の仮想サーバー上の HTTP コールアウトに対してポリシーを実行したくないため、ポリシーをグローバルにバインドすることはできません。
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
構成ユーティリティを使用して変数を構成するには
-
AppExpert > NS変数に移動し、変数を作成します。
-
AppExpert > NS割り当てに移動し、変数に値を割り当てます。
-
割り当てをアクションとして構成する適切な機能領域に移動します。