2010.09.21
 

ユーザーIPアドレスをログに記録する

Question

インターネット・ユーザーが iSeries Access を使用してアクセスする 5250 アプリがあります。またこのアプリは、Web ブラウザーからアクセスできるよう IBM Webfacing Tool で変換されています。(私は管理上、)各ユーザー、特にブラウザーを利用したユーザーが接続の際に使用したリモート IP アドレスのログを参照する必要があります。また、セッションの接続時間も確認できたらと考えています。パスワードを無許可の人に教えているユーザーが いるので、このユーザーがサインオンしたときに、ログの中に2 つの異なる IP アドレスが記録されている必要があります。そういったログはありますか、それとも、最初のサインオン・プログラムから IP アドレスを取り出す API をいくつか呼びだして、自分のログを構築する必要があるのでしょうか。

Answer

tinyurl.com/IBMiHistoryLogSignOn にこのガイドラインとなる IBM 技術情報「Using the History Log for Summary of Sign-On/Sign-Off to the System」があります (このコンテンツを表示するには、ユーザー ID とパスワードを登録してからサインオンする必要があります)。

システムに多数の QHSTyydddN ファイルがたまっていると考えると、基本的に以下のスクリプトでサインオン/オフ・レポートを生成します。

DSPLOG OUTPUT(*PRINT)
MSGID(CPF1124)
PERIOD(<自分の好みで>)
OUTPUT(*PRTSECLVL)

MBROPT(*ADD) を指定した CPYSPLF コマンドでスプール・ファイルを物理ファイルにコピーし、レポートを累積させ、目的に合わせてクエリーを作成します。技術情報には、自分の目的に合わせて変更できる SQL のサンプルがいくつか掲載されています。

私は、あなたが(上記の方法ではなく、) 複数のQHSTyydddN ファイルに対して(直接)クエリーを実行するかもしれないと考えていますが、照会する期間によっては、照会するファイルが多くなり過ぎることがあります。(このような場合は)クエリーを実行する前に、CPYF を使用して複数のQHSTyydddN ファイルを 1 つのファイルにするとよいでしょう。QINTER から呼び出される会話型ジョブのみをフィルタリングするならば、メッセージ・テキストに SQL の LIKE 関数 を使用できますが、これにより、クエリーの速度が遅くなる場合があります。

ユーザーがログインした時を捕まえることができるなら、(上記のような)ログを使用する必要はありません。現在のジョブに関連付けられたユーザーの IP アドレスを取り出すには、Retrieve Device Description (QDCRDEVD) API を使用できます。この API の使い方は簡単です。パラメーターはReceiver variable、Length of receiver variable、Format name, 対象となるDevice name, Error code の 5 つです。Format nameパラメーターは、取り出す情報の種類を選択します。IP アドレスを取り出す場合は DEVD0600 でなければなりません。Error codeの戻り値は、実行中に遭遇した問題を示します。この API の詳細を細部まで参照するには、tinyurl.com/QDCRDEVD にある IBM の仕様のページをご覧ください。

ページトップ

ボタン