![]() |
Version 5.1 |
||||||||||||||||||||||||||||||||
|
|
ヘルパープログラムの起動後、CommuniGate Pro サーバーからプロセスの標準入力を介してコマンド がヘルパープログラムに送信されます。その後、ヘルパープログラムからプロセスの標準出力を介 して応答が返ると、その応答がCommuniGate Pro サーバーで読み取られます。
コマンドと応答はどちらもテキスト行で、行は、サーバーOS で使用されているEOL 記号で終わります。
コマンドはいずれもシーケンスナンバー(連番の番号) で始まります。また、ヘルパープログラム で生成される応答も、同じ番号で始まります。つまり、コマンドと応答は番号を使って識別でき、 したがってヘルパープログラムでは同時に複数の要求を処理し、任意の順番で送信するという処理が可能です。
ヘルパープログラムでは、任意の時点で情報応答を送信できます。情報応答とは、アステリスク (*)で始まる応答をいいます。サーバー側では、この情報応答は無視されます。ただし、情報応答 はサーバーログで確認できます。
ヘルパープログラムで生成される応答行のサイズは、4096 バイト以下でなければなりません。
注意: サーバーとヘルパープログラムとの間の通信は、OS のパイプを介して実行されます。パイプ に送られた出力データは通常、プログラミングライブラリによってバッファされます。その関係か ら、ヘルパープログラムでは、応答を標準出力に送信した後、何らかの形のflush コマンドを実行す る必要があります。そうでない場合、応答がサーバーに届きません。
ヘルパープログラムは、CommuniGate Pro のベースディレクトリをカレントディレクトリとして起動 されます。
ヘルパープログラムでは、標準エラーストリームには何も書き込まないようにします。ただし、問題 が発生し、その問題を出力して終了させたいときには、書き込みを行ってもかまいません。標準エ ラーストリームは、CommuniGate Pro 上ではヘルパープログラムの終了後に読み取られます。また、 ヘルパープログラムで標準エラーストリームに書き込みを行い、そのときコマンドの処理が行われて おり、かつ、標準エラー出力のパイプのバッファが一杯だったときには、ヘルパープログラムはOS によって中断されます。
インターフェイスバージョン(INTF) コマンドが用意されており、このコマンドを使ってヘルパー プログラムのバージョンとCommuniGate Pro サーバーのバージョンの互換を取ることができます。 このコマンドを使用する場合、CommuniGate Pro サーバーで実装されているプロトコルバージョン (ヘルパープログラム用のプロトコルのバージョン) を指定します。ヘルパープログラムでは、下記のようにしてINTF 応答とヘルパープログラムでサポートされているプロトコルバージョンを返します。
nnnnnn INTF programInterfaceVersion
応答で返ってきたプロトコルバージョンがCommuniGate Pro サーバーのプロトコルバージョンより
小さかったときには、CommuniGate Pro サーバーでは、その(古い) プロトコルバージョンが使用さ
れます。
CommuniGate Pro サーバーのシャットダウン時、またはヘルパープログラムの終了が必要になった場 合、CommuniGate Pro からヘルパープログラムにQUIT コマンドを送ります。続いて、プロセスの標 準入力を閉じます。その後、ヘルパープログラムからOK コマンドを送信し、5 秒以内に終了するよ うにします。
下記はセッション例です(I はサーバーコマンドで、ヘルパープログラムの標準入力に送られます。 O はヘルパープログラムからの応答で、ヘルパープログラムによって標準出力に書き込まれます。 COMMAND はヘルパープログラムのコマンドです)。上記のセッション例では、CommuniGate Pro サーバーから、ヘルパープログラムからの応答を待たず に次のコマンドを送信しています。また、複数のコマンドに対する応答を任意の順番で受信していま す(番号で識別されます)。ただし、応答が返ってくる時間が指定されているタイムリミットを経過 したときには、応答は受け付けられません。
外部認証 プログラムを使って、認証やプロビジョニング、ルーティングなどの処理が可能です。デー タとしては、外部データソースを使用できます。
外部プログラムとの通信は外部認証インターフェイスプロトコルを介して行われ、このプロトコル は、 一般ヘルパープロトコルをベースとしたプロトコルです。
このマニュアルでは、外部認証インターフェイス(External Authenticator Interface) のバージョン7 を使用しているものとして説明します。
ユーザー認証を外部認証プログラムで行い、その方式がクリアテキスト方式の場合、 CommuniGate Pro サーバーから次のコマンドを外部認証プログラムに送ります。外部認証プログラムでパスワードの検証を行い、パスワードが正しければ次のようにして肯定応答を
返します。
nnnnnn OK
一方、パスワードが正しくない場合、次の否定応答を返します。
nnnnnn ERROR optional-error-message
パスワードが正しく、またクライアントに返却する認証応答がある場合、その認証応答を引用符付き
文字列として付加し("authentication-response")、肯定応答を返します。
nnnnnn RETURN "authentication-response"
上記のようにしてパスワード検証(SASL パスワード検証) を行う場合、CommuniGate Pro でサポー
トされているSASL 方式とアルゴリズムをすべて外部認証プログラムで実装しておくことが必要で
す。なお、その代わりに、外部認証プログラムからユーザーのプレーンテキストパスワードを返し、
そのパスワードをCommuniGate Pro サーバーで検証し、必要な応答処理を行うという方法も使用で
きます。その場合、ユーザーのプレーンテキストパスワードは、下記のように引用符付き文字列の形
("plain-text-password") で返さなければなりません。
nnnnnn PLAIN "plain-text-password"
また、外部認証プログラムを使って不明の名前(CommuniGate Pro サーバー上に存在しない名前) に 関する処理を行うこともできます。例えば、外部データベースにアクセスし、そのデータベースに不 明の名前のユーザーが存在するかどうかをチェックしたり、そのデータベースにアカウントやエイリ アス、グループメーリングリスト、フォワーダを作成したりといった処理が可能です。処理はいずれ も、CommuniGate Pro のCLI/APIを使って行えます。そのほか、CommuniGate Pro サーバーに肯定応答を返すこともできます。こうした処理が実行された 場合、CommuniGate Pro 上で、外部認証プログラムによって指定された名前のドメインオブジェクト のオープンが試行されます。
外部認証プログラムを使って不明の名前をチェックする場合、CommuniGate Pro サーバーから次のコ マンドを外部認証プログラムに送ります。外部認証プログラムで不明の名前の特定に成功し、OK 応答が返ってくると、指定されているドメイ ン( domain) のオブジェクト( name) の検索がCommuniGate Pro サーバー上で再度試行されます。
外部認証プログラムからの応答がルート先のアドレス(ROUTED アドレス)だった場合(後述を参 照)、CommuniGate Pro サーバーでは、そのアドレスを使って再度ルーティング処理が行われます。 なお、この場合、外部認証プログラムからの応答に接頭辞[NORELAY] が付加されているときを除 き、CommuniGate Pro サーバー上では、ルート先のアドレスには"can Relay ( リレー可能) " 属性が 設定されているものとして処理が行われます。
外部認証プログラムからの応答が失敗(FAILURE)だった場合、CommuniGate Pro サーバーのルータ から「暫定内部エラーコード」が返ります( このエラーコードを介してSMTP モジュールから4xx エ ラーコードが返ります。この4xx エラーコードは、パーマネント5xx エラーコードとは異なります)。
外部認証プログラムからの応答が上記以外の場合、CommuniGate Pro サーバーのルータから「不明の ユーザーアカウント(unknown user account)」エラーが返ります。
下記はセッション例です。外部認証プログラムを使って不明の名前を処理する場合、[Consult External Authenticator] オプショ ン(ドメイン設定) を[Yes] に設定します。
また、外部認証プログラムを使用してアドレスのルーティングも可能です。例えば、アドレスを @external domain (外部ドメイン) のアドレスにルートできます。この場合、次のようにROUTE コ マンドを使って、アドレスを外部認証プログラムに渡します。外部認証プログラムからルート先アドレス応答(ROUTED アドレス)が返ってくると、CommuniGate Pro サーバーでは、そのアドレスを使って再度ルーティング処理が行われます。この場合、応答に接 頭辞[RELAY] が付加されているときには、CommuniGate Pro サーバーでは、ルート先のアドレスに は"can Relay ( リレー可能) " 属性が設定されているものとして処理が行われます。
外部認証プログラムからの応答が失敗(FAILURE)だった場合、CommuniGate Pro サーバーのルータ から「暫定内部エラーコード」が返ります( このエラーコードを介してSMTP モジュールから4xx エ ラーコードが返ります。この4xx エラーコードは、パーマネント5xx エラーコードとは異なります)。
外部認証プログラムから返った応答が上記以外の場合、CommuniGate Pro サーバーのルータから「ア ドレスのルート不可能」エラーが返ります。
下記はセッション例です。外部メッセージフィルタ プログラムを使用することにより、コンテントのフィルタリング(アンチ ウィルス、アンチスパムなどのフィルタリング処理) が可能です。
外部フィルタインターフェイスプロトコルは、一般ヘルパープロトコルをベースに作成されていま
す。
このセクションでは、外部フィルタ(External Filter) プロトコルのバージョン3 を使用しているもの
として説明します。
外部フィルタプログラムがクラッシュした場合、CommuniGate Pro によりエンキューアの処理が中断 されます。その後、外部フィルタプログラムが再起動すると処理が再開されます。
認証がRADIUS モジュールによる認証の場合、外部RADIUS プログラム(外部RADIUS ヘルパー) を使って補足の認証処理が可能です。また、RADIUS 応答に属性を追加することもできます。
外部RADIUS インターフェイス(External RADIUS Interface) プロトコルは、一般ヘルパープロトコルをベースにして実装されています。
このマニュアルでは、外部RADIUS インターフェイスのバージョン1 を使用しているものとして説明
します。
ログイン要求の中のパスワードが不適当だった場合、外部RADIUS プログラムから次の否定応答を返
します。
nnnnnn REJECT optional-error-message
辞書( attributes)では、キーとして属性の種類を示す数値を使用します(例えば、属性Session- Timeout は27)
次の属性はいずれも32 ビット整数値として解釈され、辞書では数値文字列として指定します。
NAS-Port, Service-Type, Framed-Protocol, Framed-Routing, Framed-MTU,
Framed-Compression, Login-Service, Login-TCP-Port, Framed-IPX-Network, Session-Timeout,
Idle-Timeout, Termination-Action, Framed-AppleTalk-Link, Framed-AppleTalk-Network, Event-Timestamp,
NAS-Port-Type, Port-Limit, ARAP-Zone-Access, Password-Retry, Prompt,
Tunnel-Type, Tunnel-Medium-Type, Tunnel-Preference, Acct-Interim-Interval,
Acct-Delay-Time, Acct-Input-Octets, Acct-Output-Octets, Acct-Authentic,
Acct-Session-Time, Acct-Input-Packets, Acct-Output-Packets, Acct-Terminate-Cause,
Acct-Link-Count, Acct-Input-Gigawords, Acct-Output-Gigawords.
次の属性はいずれも32 ビットIP アドレスとして解釈され、辞書では文字列(aaa.bbb.ccc.ddd
の形式) として指定します。
NAS-IP-Address, Framed-IP-Address, Framed-IP-Netmask, Login-IP-Host.
次の属性は外部RADIUS プログラムには渡されません。したがって、外部RADIUS プログラムの応答
では無視されます。
User-Name, User-Password, CHAP-Password, State, Proxy-State, EAP-Message,
Message-Authenticator, Acct-Status-Type.
上記以外の属性はすべて、文字列 またはデータブロックとして指定します。また、CommuniGate Pro
サーバーでは、上記以外の属性のうち、その値に16 進数で0x20-0x7F の範囲を逸脱するバイトが格
納されている属性はすべてデータブロックフォーマットを使って解釈されます。
属性の値に2 進数0 バイト(NULL 終端文字) が含まれている場合、データブロックフォーマットを
使用しなければなりません。
また、属性の値が複数の場合、その属性の値は配列として指定しなければなりません。
文字列属性User-Name は外部RADIUS プログラムに渡されますが、応答では無視されます。The Vendor-specific attributes are presented using keys with negative numeric values. The key absolute value is the "VendorID" value. For each VendorID, the associated element is a dictionary. This dictionary keys are Vendor-specific "vendor types", with associated "specific attributes". The "specific attributes" values can be stored as String, DataBlocks, Number, or Arrays of Strings, DataBlocks, and/or Numbers.
Sample session (I: - server commands sent to the program standard input, O: - responses the program writes to its standard output):注意: CommuniGate Pro サーバーからは、同一のアカウントに関する要求を複数同時に送信できま す。
注意: 外部RADIUS プログラムは、要求のターゲットのアカウントのオープンと同時に呼び出されま す。つまり、ダイナミッククラスタ 環境ではバックエンドサーバーで外部RADIUS プログラムを動作 させますが、その場合でも、同一のアカウントをターゲットとする要求が他のバックエンドサーバー 上で動作している外部RADIUS プログラムで同時に受信されることはありません。
コール(呼) の発信試行、確立、多重化の際にはシグナルモジュールによってCDR (コール詳細レ コード) が生成されます。このCDR は、外部CDR プロセッサプログラムを使って処理が可能です。外部CDR プロセッサインターフェイス(External CDR Processor Interface) プロトコルは、一般ヘルパープロトコルをベースとして実装されています。
このマニュアルでは、外部CDR プロセッサインターフェイスのバージョン1 を使用しているものと して説明します。
外部CDR プロセッサが有効になっている場合、Signal モジュールでCDR が生成されると、そのCDR が外部CDR プロセッサに送信されます。
生成されたCDR は、次のコマンドを使ってCommuniGate Pro サーバーから外部CDR プロセッサに 送られます。外部CDR プロセッサでは、データの処理後、次の肯定応答を返さなければなりません。
nnnnnn OK