リライト機能に対する RADIUS のサポート
Citrix ADC の式言語には、要求と応答の RADIUS メッセージから情報を抽出したり、操作したりできる式が含まれています。これらの式を使用すると、書き換え機能を使用して、RADIUS メッセージを宛先に送信する前に RADIUS メッセージの一部を変更できます。書き換えポリシーおよびアクションでは、RADIUS メッセージに適切な、または関連する任意の式を使用できます。使用可能な式を使用すると、RADIUS メッセージタイプを識別し、接続から任意の属性値ペア(AVP)を抽出し、RADIUS AVP を変更できます。RADIUS 接続用のポリシーラベルを作成することもできます。
リライトルールでは、新しい RADIUS 式をさまざまな目的で使用できます。たとえば、次のようなことができます。
- RADIUS ユーザ名 AVP のドメイン部分を削除して、シングルサインオン(SSO)を簡素化します。
- 電話会社の操作で使用される MSISDN フィールドなど、ベンダー固有の AVP を挿入し、加入者情報を格納します。
ポリシーラベルを作成して、特定のタイプの RADIUS 要求を、それらの要求に適した一連のポリシーを通してルーティングすることもできます。
注:
リライト用の RADIUS には、次の制限事項があります。
- Citrix ADCは、書き換えられたRADIUS要求または応答を再署名しません。RADIUS 認証サーバが署名付き RADIUS メッセージを必要とする場合、認証は失敗します。
- 現在使用可能な RADIUS 式は、RADIUS IPv6 属性では機能しません。
RADIUSをサポートする式に関するCitrix ADC マニュアルでは、RADIUS通信の基本構造と目的を理解していることを前提としています。RADIUS の詳細については、RADIUS サーバのマニュアルを参照するか、RADIUS プロトコルの概要をオンラインで検索してください。
RADIUS の書き換えポリシーの設定
以下の手順では、Citrix ADCコマンドラインを使用して書き換えアクションとポリシーを構成し、書き換え固有のグローバルバインドポイントにポリシーをバインドします。
Rewrite アクションとポリシーを設定し、ポリシーをバインドするには、次の手順を実行します。
コマンドプロンプトで、次のコマンドを入力します。
add rewrite action <actName> <actType>
add rewrite policy <polName> <rule> <actName>
-
bind rewrite policy <polName> <priority> <nextExpr> -type <bindPoint>
ここで、<bindPoint>
は、書き換え固有のグローバルバインドポイントの 1 つを表します。
リライト用の RADIUS 式
書き換え構成では、次のCitrix ADC式を使用して、RADIUS要求または応答のさまざまな部分を参照できます。
接続のタイプの識別:
-
RADIUS.IS_CLIENT
接続が RADIUS クライアント (要求) メッセージである場合は TRUE を返します。
-
RADIUS.IS_SERVER
接続が RADIUS サーバー (応答) メッセージである場合は TRUE を返します。
リクエスト式:
-
RADIUS.REQ.CODE
RADIUS 要求タイプに対応する番号を返します。num_at クラスの導関数です。たとえば、RADIUS アクセス要求は 1 を返します。RADIUS アカウンティング要求は 4 を返します。
-
RADIUS.REQ.LENGTH
ヘッダーを含む RADIUS 要求の長さを返します。 num_at クラスの導関数です。
-
RADIUS.REQ.IDENTIFIER
RADIUS 要求 ID を返します。この番号は、各要求に割り当てられた番号で、要求を対応する応答に一致させることができます。 num_at クラスの導関数です。
-
RADIUS.REQ.AVP(<AVP Code No>).VALUE
型 text_tの文字列として、このAVPの最初の出現の値を返します。
-
RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)
AVP の指定されたインスタンスを RAVP_t 型の文字列として返します。特定の RADIUS AVP は、RADIUS メッセージ内で複数回発生する可能性があります。INSTANCE (0) は最初のインスタンスを返し、INSTANCE (1) は 2 番目のインスタンスを返します。以下同様に最大 16 個のインスタンスを返します。
-
RADIUS.REQ.AVP(<AVP code no>).VALUE(instance number)
AVP の指定されたインスタンスの値を text_t 型の文字列として返します。
-
RADIUS.REQ.AVP(<AVP code no>).COUNT
RADIUS 接続内の特定の AVP のインスタンス数を整数で返します。
-
RADIUS.REQ.AVP(<AVP code no>).EXISTS
指定されたタイプの AVP がメッセージ内に存在する場合は TRUE、存在しない場合は FALSE を返します。
応答式:
RADIUS 応答式は、REQ を置き換える点を除いて、RADIUS 要求式と同じです。
AVP値のタイプキャスト:
ADC は、RADIUS AVP 値をテキスト、整数、符号なし整数、ロング、符号なしロング、ipv4 アドレス、ipv6 アドレス、ipv6 プレフィクス、時刻の各データ型にタイプキャストする式をサポートしています。構文は、他のCitrix ADC型キャスト式と同じです。
例:
ADC は、RADIUS AVP 値をテキスト、整数、符号なし整数、ロング、符号なしロング、ipv4 アドレス、ipv6 アドレス、ipv6 プレフィクス、時刻の各データ型にタイプキャストする式をサポートしています。構文は、他のCitrix ADC型キャスト式と同じです。
RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->
AVP型式:
Citrix ADCは、RFC2865およびRFC2866に記載されている割り当てられた整数コードを使用して、RADIUS AVP値を抽出する式をサポートしています。テキストエイリアスを使用して、同じタスクを実行することもできます。次に、いくつかの例を示します。
-
RADIUS.REQ.AVP (1).VALUE or RADIUS.REQ.USERNAME.value
RADIUS ユーザ名の値を抽出します。
-
RADIUS.REQ.AVP (4). VALUE or RADIUS.REQ. ACCT\_SESSION\_ID.value
メッセージからアカウントセッション ID AVP(コード 44)を抽出します。
-
RADIUS.REQ.AVP (26). VALUE or RADIUS.REQ.VENDOR\_SPECIFIC.VALUE
ベンダー固有の値を抽出します。
最も一般的に使用される RADIUS AVP の値は、同じ方法で抽出できます。
RADIUSバインドポイント:
RADIUS 式を含むポリシーには、4 つのグローバルバインドポイントを使用できます。
-
RADIUS_REQ_OVERRIDE
優先度/優先要求ポリシーキュー。
-
RADIUS_REQ_DEFAULT
標準要求ポリシーキュー。
-
RADIUS_RES_OVERRIDE
優先度/優先応答ポリシーキュー。
-
RADIUS_RES_DEFAULT
標準応答ポリシーキュー。
RADIUS 書き換え固有の式:
-
RADIUS.NEW_AVP
指定された RADIUS AVP を文字列として返します。
-
RADIUS.NEW_AVP_INTEGER32
指定された RADIUS AVP を整数として返します。
-
RADIUS.NEW_AVP_UNSIGNED32
指定された RADIUS AVP を符号なし整数として返します。
-
RADIUS.NEW_VENDOR_SPEC_AVP(<ID>, <definition>)
指定された拡張ベンダー固有の AVP を接続に追加します。
<ID>
には、長い数値を代入します。<definition>
には、AVP のデータを含む文字列を置き換えます。 -
RADIUS.REQ.AVP_START
RADIUS ヘッダーの終わりと AVP の開始との間の位置を返します。書き換えアクションで使用されます。
例:
add rewrite action insert1 insert_after radius.req.avp_start radius.new_avp(33, "NEW AVP")
<!--NeedCopy-->
-
RADIUS.REQ.AVP_END
RADIUSメッセージ内のRADIUSメッセージの最後(またはすべてのAVP の最後)の位置を返します。書き換えアクションを実行するときに使用します。
例:
add rewrite action insert2 insert_before radius.req.avp_end "radius.new_avp(33, "NEW AVP")"
<!--NeedCopy-->
-
RADIUS.REQ.AVP_LIST
RADIUS メッセージ内の AVP の開始位置と、ヘッダーを除いた RADIUS メッセージの長さを返します。つまり、RADIUS メッセージ内のすべての AVP を返します。書き換えアクションを実行するために使用されます。
例:
add rewrite action insert3 insert_before_all radius.req.avp_list "radius.new_avp(33, "NEW AVP")" -search "avp(33)"
<!--NeedCopy-->
RADIUS の有効な書き換えアクションタイプ:
RADIUS 式で使用できるリライトアクションタイプは次のとおりです。
- INSERT_AFTER
- INSERT_BEFORE
- INSERT_AFTER_ALL
- INSERT_BEFORE_ALL
- 削除
- DELETE_ALL
- REPLACE
- REPLACE_ALL
すべてINSERT_ actions
を使用して、RADIUS AVP を RADIUS 接続に挿入できます。
使用例
次に、書き換えを伴う RADIUS の使用例を示します。
ユーザ名 AVP の書き換え
RADIUS ユーザ名 AVP からドメインストリングを削除するように書き換え機能を設定するには、まず次の例に示すように、rewrite REPLACE アクションを作成します。すべての RADIUS 要求を選択する書き換えポリシーでアクションを使用します。ポリシーをグローバルバインドポイントにバインドします。その場合は、優先度を適切なレベルに設定して、ブロックまたは拒否ポリシーを最初に有効にします。ただし、ブロックまたは拒否されていないすべての要求が書き換えられます。ポリシー評価を続行するには、「次へ進む」式(gotoPriorityExpr)を「次へ」に設定し、ポリシーをRADIUS_REQ_DEFAULTキューにアタッチします。
例:
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-->
注:
RADIUS の書き換えポリシーは、Gateway 仮想サーバには適用されません。Gateway 仮想サーバがロードバランシングに使用される場合は、RADIUS を構成し、書き換えポリシーを RADIUS ロードバランシング仮想サーバにバインドする必要があります。
ベンダー固有の AVP の挿入
MSISDN フィールドの内容を含むベンダー固有の AVP を挿入するように Rewrite アクションを設定するには、まず MSISDN フィールドを要求に挿入する書き換えの INSERT アクションを作成します。すべてのRADIUS要求を選択するRewriteポリシーのアクションを使用します。ポリシーをグローバルにバインドし、次の例に示すように、プライオリティを適切なレベルに設定し、その他のパラメータを設定します。
例:
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-->