CommuniGate Pro
Version 5.1
アプリケーション
 
 
 
ヘルパーア

ヘルパーアプリケーション

CommuniGate Pro サーバーでは、外部プログラムを使って各種の処理を行うことができます。例え ば、メッセージスキャニングユーザー認証RADIUS login policies, etc. All these external programs are handled in the same way, and they communicate with the Server using a simple ログインポリシーといった処理が可能です。 外部プログラムはいずれもCommuniGate Pro サーバー上で同じ方法で扱われます。外部プログラム とCommuniGate Pro サーバーの間では、簡単なヘルパーインターフェイスプロトコルを使って通信 が行われます。

ヘルパープログラムの指定と使用については、「システム管理」のセクションに詳細があります。

ヘルパープロトコル

ヘルパープログラムの起動後、CommuniGate Pro サーバーからプロセスの標準入力を介してコマンド がヘルパープログラムに送信されます。その後、ヘルパープログラムからプロセスの標準出力を介 して応答が返ると、その応答がCommuniGate Pro サーバーで読み取られます。

コマンドと応答はどちらもテキスト行で、行は、サーバーOS で使用されているEOL 記号で終わります。

コマンドはいずれもシーケンスナンバー(連番の番号) で始まります。また、ヘルパープログラム で生成される応答も、同じ番号で始まります。つまり、コマンドと応答は番号を使って識別でき、 したがってヘルパープログラムでは同時に複数の要求を処理し、任意の順番で送信するという処理が可能です。

ヘルパープログラムでは、任意の時点で情報応答を送信できます。情報応答とは、アステリスク (*)で始まる応答をいいます。サーバー側では、この情報応答は無視されます。ただし、情報応答 はサーバーログで確認できます。

ヘルパープログラムで生成される応答行のサイズは、4096 バイト以下でなければなりません。

注意: サーバーとヘルパープログラムとの間の通信は、OS のパイプを介して実行されます。パイプ に送られた出力データは通常、プログラミングライブラリによってバッファされます。その関係か ら、ヘルパープログラムでは、応答を標準出力に送信した後、何らかの形のflush コマンドを実行す る必要があります。そうでない場合、応答がサーバーに届きません。

ヘルパープログラムは、CommuniGate Pro のベースディレクトリをカレントディレクトリとして起動 されます。

ヘルパープログラムでは、標準エラーストリームには何も書き込まないようにします。ただし、問題 が発生し、その問題を出力して終了させたいときには、書き込みを行ってもかまいません。標準エ ラーストリームは、CommuniGate Pro 上ではヘルパープログラムの終了後に読み取られます。また、 ヘルパープログラムで標準エラーストリームに書き込みを行い、そのときコマンドの処理が行われて おり、かつ、標準エラー出力のパイプのバッファが一杯だったときには、ヘルパープログラムはOS によって中断されます。

インターフェイスバージョン(INTF) コマンドが用意されており、このコマンドを使ってヘルパー プログラムのバージョンとCommuniGate Pro サーバーのバージョンの互換を取ることができます。 このコマンドを使用する場合、CommuniGate Pro サーバーで実装されているプロトコルバージョン (ヘルパープログラム用のプロトコルのバージョン) を指定します。
nnnnnn INTF serverInterfaceVersion
パラメータは次の通りです。

nnnnnn
この要求( コマンド) を示す一意の番号。
serverInterfaceVersion
現在使用しているCommuniGate Pro サーバーで実装されているプロトコルのバージョン。

ヘルパープログラムでは、下記のようにしてINTF 応答とヘルパープログラムでサポートされているプロトコルバージョンを返します。
nnnnnn INTF programInterfaceVersion
応答で返ってきたプロトコルバージョンがCommuniGate Pro サーバーのプロトコルバージョンより 小さかったときには、CommuniGate Pro サーバーでは、その(古い) プロトコルバージョンが使用さ れます。

CommuniGate Pro サーバーのシャットダウン時、またはヘルパープログラムの終了が必要になった場 合、CommuniGate Pro からヘルパープログラムにQUIT コマンドを送ります。続いて、プロセスの標 準入力を閉じます。その後、ヘルパープログラムからOK コマンドを送信し、5 秒以内に終了するよ うにします。

下記はセッション例です(I はサーバーコマンドで、ヘルパープログラムの標準入力に送られます。 O はヘルパープログラムからの応答で、ヘルパープログラムによって標準出力に書き込まれます。 COMMAND はヘルパープログラムのコマンドです)。

O: * My Helper program started
I: 00001 INTF 1
O: 00001 INTF 1
I: 00002 COMMAND parameters
O: 00002 OK
I: 00003 COMMAND parameters
I: 00004 COMMAND parameters
O: * processing 00003 will take some time
O: 00004 ERROR description
O: 00003 OK
I: 00005 QUIT
O: * processed: 5 requests. Quitting.
O: 00005 OK
I: stdin closed

上記のセッション例では、CommuniGate Pro サーバーから、ヘルパープログラムからの応答を待たず に次のコマンドを送信しています。また、複数のコマンドに対する応答を任意の順番で受信していま す(番号で識別されます)。ただし、応答が返ってくる時間が指定されているタイムリミットを経過 したときには、応答は受け付けられません。


外部認証

外部認証 プログラムを使って、認証やプロビジョニング、ルーティングなどの処理が可能です。デー タとしては、外部データソースを使用できます。

外部プログラムとの通信は外部認証インターフェイスプロトコルを介して行われ、このプロトコル は、 一般ヘルパープロトコルをベースとしたプロトコルです。

このマニュアルでは、外部認証インターフェイス(External Authenticator Interface) のバージョン7 を使用しているものとして説明します。

ユーザー認証を外部認証プログラムで行い、その方式がクリアテキスト方式の場合、 CommuniGate Pro サーバーから次のコマンドを外部認証プログラムに送ります。
nnnnnn VRFY (mode) name@domain password [loginAddress]
パラメータは次の通りです。

nnnnnn
この要求( コマンド) を示す一意の番号。
mode
認証処理要求の送信元のサービス名前(IMAP、POP、FTP など)。
要求の送信元が名前のないサーバーコンポーネントの場合、このパラメータ(サービスの名前) は指 定しなくてもかまいません。サービスの名前を指定する場合、名前を丸カッコで囲みます。
name
ユーザーアカウント名。
domain
ユーザーアカウントのドメイン名。
password
検証対象のパスワード文字列。パスワードに特殊記号がある場合、引用符付き文字列として指定しま す。
loginAddress
ユーザーのログイン元のネットワークアドレス( ログインアドレス)。
パスワードを内部サーバーコンポーネントでチェックする場合、このパラメータは指定しなくてもか まいません。このパラメータを指定する場合、大カッコで囲みます。

ユーザー認証を外部認証プログラムで行い、その方式がSASL 方式の場合、 CommuniGate Pro サー バーから次のコマンドを外部認証プログラムに送ります。
nnnnnn SASL(method) (mode) name@domain password key [loginAddress]
パラメータは次の通りです。

method
使用するセキュアSASL 方式の名前(CRAM-MD5、APOP)。
key
クライアントメーラーに送られたチャレンジ文字列(キー)。特殊記号がある場合、引用符付き文字列として指定します。

外部認証プログラムでパスワードの検証を行い、パスワードが正しければ次のようにして肯定応答を 返します。
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"

下記はセッション例です(I はサーバーコマンドで、外部認証プログラムの標準入力に送信されま す。O は応答で、外部認証プログラムによって標準出力に書き込まれます)。

I: 00001 INTF 1
O: 00001 INTF 1
I: 00010 VRFY user1@domain1.com dsyui134
O: 00010 OK
I: 00011 VRFY (IMAP) user2@domain2.com jskj23#45 [10.0.3.4]
O: 00011 ERROR incorrect password
I: 00012 SASL(CRAM-MD6) user4@domain2.com hdkj547812329394055 <pop-23456@mydomain.com> [10.0.1.4]
I: 00013 VRFY (IMAP) user2@domain2.com "jskj23\"45"
O: 00013 OK
O: 00012 ERROR unsupported SASL method
I: 00014 SASL(DIGEST-MD5) user4@domain2.com 012345 "user:qop:zz:mmm:uri" [10.0.1.4]
O: 00014 RETURN "0123456789AAAA"
I: 00015 SASL(DIGEST-MD5) user4@domain2.com 012345 "user:qop:zz:mmm:uri" [10.0.1.4]
O: 00015 PLAIN "my$$password"

また、外部認証プログラムを使って不明の名前(CommuniGate Pro サーバー上に存在しない名前) に 関する処理を行うこともできます。例えば、外部データベースにアクセスし、そのデータベースに不 明の名前のユーザーが存在するかどうかをチェックしたり、そのデータベースにアカウントやエイリ アス、グループメーリングリスト、フォワーダを作成したりといった処理が可能です。処理はいずれ も、CommuniGate Pro のCLI/APIを使って行えます。そのほか、CommuniGate Pro サーバーに肯定応答を返すこともできます。こうした処理が実行された 場合、CommuniGate Pro 上で、外部認証プログラムによって指定された名前のドメインオブジェクト のオープンが試行されます。

外部認証プログラムを使って不明の名前をチェックする場合、CommuniGate Pro サーバーから次のコ マンドを外部認証プログラムに送ります。
nnnnnn NEW name@domain relayType
パラメータは次の通りです。

relayType
[MAIL] このコマンドを電子メールのルーティング処理の一部として送信する場合、このrelayType パラメータには[MAIL] を指定します。
[SIGNAL] このコマンドをシグナルのルーティング処理の一部として送信する場合、このパラメータには[SIGNAL] を指定します。
[ACCESS] このコマンドをアクセスのルーティング処理の一部として送信する場合、このパラメータには[ACCESS] を指定します。
name@domain
ローカルオブジェクト(不明な名前)の正規のアドレス。

外部認証プログラムで不明の名前の特定に成功し、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)」エラーが返ります。

下記はセッション例です。

I: 00010 NEW user1@domain1.com [MAIL]
O: 00010 ERROR this account is not known
I: 00011 NEW user2@domain2.com [MAIL]
I: 00012 NEW user3@domain2.com [ACCESS]
O: 00012 OK
O: 00011 ROUTED [NORELAY] userX@domain2.com

外部認証プログラムを使って不明の名前を処理する場合、[Consult External Authenticator] オプショ ン(ドメイン設定) を[Yes] に設定します。

また、外部認証プログラムを使用してアドレスのルーティングも可能です。例えば、アドレスを @external domain (外部ドメイン) のアドレスにルートできます。この場合、次のようにROUTE コ マンドを使って、アドレスを外部認証プログラムに渡します。
nnnnnn ROUTE <address> relayType
パラメータは次の通りです。

relayType
[MAIL] このコマンドを電子メールのルーティング処理の一部として送信する場合、このパラメータには[MAIL] を指定します。
[SIGNAL] このコマンドをシグナルのルーティング処理の一部として送信する場合、このパラメータには[SIGNAL] を指定します。
[ACCESS] このコマンドをアクセスのルーティング処理の一部として送信する場合、このパラメータには[ACCESS] を指定します。
address
このパラメータには、アドレスのローカル部と外部ドメイン部を指定します。

外部認証プログラムからルート先アドレス応答(ROUTED アドレス)が返ってくると、CommuniGate Pro サーバーでは、そのアドレスを使って再度ルーティング処理が行われます。この場合、応答に接 頭辞[RELAY] が付加されているときには、CommuniGate Pro サーバーでは、ルート先のアドレスに は"can Relay ( リレー可能) " 属性が設定されているものとして処理が行われます。

外部認証プログラムからの応答が失敗(FAILURE)だった場合、CommuniGate Pro サーバーのルータ から「暫定内部エラーコード」が返ります( このエラーコードを介してSMTP モジュールから4xx エ ラーコードが返ります。この4xx エラーコードは、パーマネント5xx エラーコードとは異なります)。

外部認証プログラムから返った応答が上記以外の場合、CommuniGate Pro サーバーのルータから「ア ドレスのルート不可能」エラーが返ります。

下記はセッション例です。

I: 00010 ROUTE <user1> [MAIL]
O: 00010 ERROR this account is blocked
I: 00011 ROUTE <user2%domain1.dom> [MAIL]
I: 00012 ROUTE <"user3##name"%domain2.dom> [SIGNAL]
O: 00012 FAILURE internal error
O: 00011 ROUTED [RELAY] userX@domain100.dom

外部メッセージフィルタ

外部メッセージフィルタ プログラムを使用することにより、コンテントのフィルタリング(アンチ ウィルス、アンチスパムなどのフィルタリング処理) が可能です。

外部フィルタインターフェイスプロトコルは、一般ヘルパープロトコルをベースに作成されていま す。
このセクションでは、外部フィルタ(External Filter) プロトコルのバージョン3 を使用しているもの として説明します。

外部フィルタプログラムがクラッシュした場合、CommuniGate Pro によりエンキューアの処理が中断 されます。その後、外部フィルタプログラムが再起動すると処理が再開されます。


外部RADIUS ヘルパー

認証がRADIUS モジュールによる認証の場合、外部RADIUS プログラム(外部RADIUS ヘルパー) を使って補足の認証処理が可能です。また、RADIUS 応答に属性を追加することもできます。

外部RADIUS インターフェイス(External RADIUS Interface) プロトコルは、一般ヘルパープロトコルをベースにして実装されています。
このマニュアルでは、外部RADIUS インターフェイスのバージョン1 を使用しているものとして説明 します。

外部RADIUS プログラムが有効になっている場合、外部RADIUS プログラムは、ユーザーパスワード の検証後に使用されます。つまり、ユーザーパスワードの検証後、CommuniGate Pro サーバーから次 のコマンド( ログイン要求) が外部RADIUS プログラムに送られます。
nnnnnn LOGIN name@domain attributes settings
パラメータは次の通りです。

nnnnnn
この要求( コマンド) を示す一意の番号。
name
ユーザーアカウント名。
domain
ユーザーアカウントのドメイン名。
attributes
要求のすべての属性を格納した辞書
settings
アカウントのアカウント設定を格納した辞書

外部RADIUS プログラムでは、ログイン要求の受け付け後、次の肯定応答を送信します。
nnnnnn ACCEPT attributes
パラメータは次の通りです。

nnnnnn
要求の番号と同じ番号(応答の番号)。
attributes
辞書で、外部RADIUS プログラムによって追加された属性が格納されています。

ログイン要求の中のパスワードが不適当だった場合、外部RADIUS プログラムから次の否定応答を返 します。
nnnnnn REJECT optional-error-message

また、外部RADIUS プログラムが有効になっている場合、外部RADIUS プログラムを使ってアカウン ティング要求(開始、終了、暫定更新) の処理が可能です。
nnnnnn ACCNT command name@domain attributes
パラメータは次の通りです。

nnnnnn
この要求を示す番号。
command
アカウンティングコマンド(started、ended、updated)。
name
ユーザーアカウント名。
domain
ユーザーアカウントのドメイン名。
attributes
要求の全属性を格納した辞書

外部RADIUS プログラムでは、次の肯定応答を返します。
nnnnnn OK
パラメータは次の通りです。

nnnnnn
この応答の番号(要求の番号と同じ)。

辞書( 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 プログラムに渡されますが、応答では無視されます。

0
アカウンティング要求には数値属性0 (RADIUS プロトコル要求ID) があります(下記の00004 を 参照)。この属性を使って、再送パケット(重複パケット) の検出が可能です。
secretKey (authentication requests only)
下記はセッション例です(I はサーバーコマンドで、外部プログラムの標準入力に送信されます。O は応答で、外部プログラムによって標準出力に書き込まれます)。
authData (authentication requests only)
a 16-byte DataBlock containing the "authentication data" portion of the RADIUS request.

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):

I: 00001 INTF 1
O: 00001 OK 1
I: 00002 LOGIN user1@domain1.com {0=#15; 1="User1";4=10.0.0.1;32="NAS 1";31=4153837164;"-311"={9=#777;10="ZZZ";}; authData=[AbndghAbndgh1sjkjkss3T=]; secretKey=a123;} {RealName="User"; NATIP="192.168.1.3";}
O: 00002 ACCEPT {8=192.168.1.3; 9=255.255.255.0; 13=(0,3);}
I: 00003 LOGIN user1@domain1.com {0=#16; 1="uSEr1";32="NAS 2";31=415.5512.12; 8=192.168.1.3; authData=[Abnd278sjkljsljkjksFG=]; secretKey=a123;} {NATIP="10.0.1.114";}
O: 00003 REJECT
I: 00004 ACCNT started user1@domain1.com {0=#17;1="uSEr1";32="NAS 2";31=415.5512.12; 8=192.168.1.3;}
O: 00004 OK

注意: CommuniGate Pro サーバーからは、同一のアカウントに関する要求を複数同時に送信できま す。

注意: 外部RADIUS プログラムは、要求のターゲットのアカウントのオープンと同時に呼び出されま す。つまり、ダイナミッククラスタ 環境ではバックエンドサーバーで外部RADIUS プログラムを動作 させますが、その場合でも、同一のアカウントをターゲットとする要求が他のバックエンドサーバー 上で動作している外部RADIUS プログラムで同時に受信されることはありません。


外部CDR プロセッサ

コール(呼) の発信試行、確立、多重化の際にはシグナルモジュールによってCDR (コール詳細レ コード) が生成されます。このCDR は、外部CDR プロセッサプログラムを使って処理が可能です。外部CDR プロセッサインターフェイス(External CDR Processor Interface) プロトコルは、一般ヘルパープロトコルをベースとして実装されています。

このマニュアルでは、外部CDR プロセッサインターフェイスのバージョン1 を使用しているものと して説明します。

外部CDR プロセッサが有効になっている場合、Signal モジュールでCDR が生成されると、そのCDR が外部CDR プロセッサに送信されます。

生成されたCDR は、次のコマンドを使ってCommuniGate Pro サーバーから外部CDR プロセッサに 送られます。
nnnnnn CDR cdr_data
パラメータは次の通りです。

nnnnnn
この要求を示す一意の番号。
cdr_data
テキストフォーマット のCDR データ。

外部CDR プロセッサでは、データの処理後、次の肯定応答を返さなければなりません。
nnnnnn OK


CommuniGate® Pro Guide. Copyright © 1998-2007, Stalker Software, Inc.