ADC

リライト機能の RADIUS サポート

NetScalerの式言語には、要求や応答に含まれるRADIUSメッセージから情報を抽出したり操作したりできる式が含まれています。これらの式により、宛先に送信する前に、書き換え機能を使用して RADIUS メッセージの一部を変更できます。書き換えポリシーとアクションでは、RADIUS メッセージに適切な、または関連する任意の表現を使用できます。使用可能な式により、RADIUS メッセージタイプを識別したり、接続から任意の属性値ペア(AVP)を抽出したり、RADIUS AVP を変更したりできます。RADIUS 接続のポリシーラベルを作成することもできます。

リライトルールの新しい RADIUS 式は、さまざまな目的に使用できます。たとえば、次のことができます。

  • シングルサインオン (SSO) を簡略化するには、RADIUS ユーザー名 AVP のドメイン\ 部分を削除してください。
  • 電話会社の業務で使用する MSISDN フィールドなど、ベンダー固有の AVP を挿入して加入者情報を格納します。

ポリシーラベルを作成して、特定のタイプの RADIUS 要求を、それらの要求に適した一連のポリシーを通じてルーティングすることもできます。

注記:

リライト用 RADIUS には次の制限があります。

  • NetScalerは、書き換えられたRADIUSリクエストやレスポンスに再署名しません。RADIUS 認証サーバーが署名付き RADIUS メッセージを必要とする場合、認証は失敗します。
  • 現在使用可能な RADIUS 式は RADIUS IPv6 属性では機能しません。

RADIUSをサポートする表現に関するNetScalerのドキュメントでは、RADIUS通信の基本的な構造と目的に精通していることを前提としています。RADIUS の詳細については、RADIUS サーバのマニュアルを参照するか、RADIUS プロトコルの概要をオンラインで検索してください。

RADIUS の書き換えポリシーの設定

以下の手順では、NetScalerコマンドラインを使用して書き換えアクションとポリシーを構成し、ポリシーを書き換え固有のグローバルバインドポイントにバインドします。

書き換えアクションとポリシーを設定し、ポリシーをバインドするには

コマンドプロンプトで、次のコマンドを入力します。

  • add rewrite action <actName> <actType>
  • add rewrite policy <polName> <rule> <actName>
  • bind rewrite policy <polName> <priority> <nextExpr> -type <bindPoint>ここで、<bindPoint>はリライト固有のグローバルバインドポイントの 1 つを表します。

リライト用の RADIUS エクスプレッション

書き換え構成では、次のNetScaler式を使用して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 リクエスト識別子を返します。これは、リクエストを対応するレスポンスと一致させるために各リクエストに割り当てられる番号です。 num_at クラスの派生関数です。

  • RADIUS.REQ.AVP(<AVP Code No>).VALUE

    この AVP が最初に出現したときの値を text_t 型の文字列で返します。

  • RADIUS.REQ.AVP(<AVP code no>).INSTANCE(instance number)

    AVP の指定されたインスタンスを RAVP_t 型の文字列として返します。特定の RADIUS AVP が 1 つの 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 レスポンス式は RADIUS リクエスト表現と同じですが、REQ が REQ に置き換わっている点が異なります。

AVP 値のタイプキャスト:

ADC は、RADIUS AVP 値をテキスト、整数、符号なし整数、ロング、符号なしロング、ipv4 アドレス、ipv6 アドレス、ipv6 プレフィックス、および時刻データ型にタイプキャストする式をサポートしています。構文は他のNetScalerタイプキャスト式と同じです。

:

ADC は、RADIUS AVP 値をテキスト、整数、符号なし整数、ロング、符号なしロング、ipv4 アドレス、ipv6 アドレス、ipv6 プレフィックス、および時刻データ型にタイプキャストする式をサポートしています。構文は他のNetScalerタイプキャスト式と同じです。

RADIUS.REQ.AVP(8).VALUE(0).typecast_ip_address_at
<!--NeedCopy-->

AVP タイプの表現:

NetScalerは、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

    メッセージから ACCT セッション 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 からドメイン\ 文字列を削除するように書き換え機能を設定するには、まず次の例に示すように、書き換え置換アクションを作成します。すべての RADIUS 要求を選択する書き換えポリシーでアクションを使用してください。ポリシーをグローバルバインドポイントにバインドします。その際、優先度を適切なレベルに設定して、ブロックポリシーまたは拒否ポリシーが最初に有効になるようにします。ただし、ブロックまたは拒否されていないすべてのリクエストは必ず書き直してください。Goto Expression (GoToPriorityExpr) を NEXT に設定してポリシー評価を続行し、ポリシーを 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 の書き換えポリシーは、ゲートウェイ仮想サーバーには適用されません。ゲートウェイ仮想サーバーを負荷分散に使用する場合は、RADIUSを設定し、書き換えポリシーをRADIUS負荷分散仮想サーバーにバインドする必要があります。

ベンダー固有の AVP の挿入

MSISDN フィールドの内容を含むベンダー固有の AVP を挿入するように書き換えアクションを設定するには、まず MSISDN フィールドをリクエストに挿入する書き換え INSERT アクションを作成します。すべての RADIUS 要求を選択する書き換えポリシーでアクションを使用してください。ポリシーをグローバルにバインドし、次の例に示すように、優先順位を適切なレベルに設定し、その他のパラメータを設定します。

例:

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-->
リライト機能の RADIUS サポート