ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティのプログラミング
11g リリース1(10.3.6)
B61619-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 ネットワーク接続フィルタの使い方

この節では、以下のトピックを取り上げます。

ネットワーク接続フィルタを使用する利点

セキュリティ・ロールおよびセキュリティ・ポリシーを使うと、WebLogicリソースをドメイン・レベル、アプリケーション・レベル、およびアプリケーション・コンポーネント・レベルで保護できます。接続フィルタを使用すると、ネットワーク・レベルでアクセスを拒否できます。つまり、ネットワーク接続フィルタは、追加のセキュリティ・レイヤーを提供します。接続フィルタを使うと、個々のサーバー、サーバーのクラスタ、または内部ネットワークにあるサーバー・リソースを保護できます。

接続フィルタは、管理ポートでアクセスを制御する場合に特に便利です。ネットワーク・ファイアウォール構成によっては、接続フィルタを使用して管理アクセスをさらに制限できる場合もあります。一般的には、管理ポートへのアクセスを特定のドメイン内のサーバーやマシンのみに制限するために使用します。たとえ攻撃者がファイアウォール内のマシンにアクセスできた場合でも、許可されたマシンでない限り、管理操作を実行することはできません。

ネットワーク接続フィルタは、プロトコル、IPアドレス、およびDNSノード名に基づいてフィルタ処理するよう構成できる点において一種のファイアウォールです。たとえば、ユーザーの企業のネットワーク外部からの非SSL接続を拒否できます。これにより、インターネット上のシステムからのすべてのアクセスのセキュリティが確保されます。

ネットワーク接続フィルタAPI

この節では、weblogic.security.netパッケージについて説明します。このAPIは、ネットワーク接続フィルタを開発するためのインタフェースとクラスを提供します。またこれには、ネットワーク接続フィルタのすぐに使える実装である、ConnectionFilterImplクラスが含まれます。詳細については、このリリースのWebLogic ServerのWebLogicクラスのJavadocを参照してください。

この節では、以下のトピックを取り上げます。

接続フィルタのインタフェース

接続フィルタ処理を実装するには、接続フィルタ・インタフェースを実装するクラスを記述します。接続フィルタの実装用に、以下のweblogic.security.netインタフェースが提供されます。

ConnectionFilterインタフェース

このインタフェースでは、接続フィルタ処理を実装するために使用するaccept()メソッドが定義されています。接続フィルタ処理を実行するようにサーバーをプログラミングするには、このインタフェースを実装するクラスをインスタンス化し、管理コンソールでそのクラスを構成する必要があります。このインタフェースは、接続フィルタ処理に関する最低限の実装要件です。


注意:

このインタフェースを実装しただけでは、管理コンソールを使ってクライアント接続を制限するフィルタ処理ルールを入力および修正することはできません。他の方法(管理コンソールで定義するフラット・ファイルなど)を使ってルールを指定する必要があります。管理コンソールを使ってフィルタ処理ルールを入力および修正するには、ConnectionFilterRulesListenerインタフェースも実装する必要があります。ConnectionFilterRulesListenerインタフェースについては、「ConnectionFilterRulesListenerインタフェース」を参照してください。

ConnectionFilterRulesListenerインタフェース

サーバーはこのインタフェースを使って、管理コンソールの「ConnectionFilterRules」フィールドで指定したルールが有効であるかどうかを起動中および実行時に判断します。


注意:

このインタフェースを実装することも、WebLogic Server製品の一部としてすぐにそのまま使えるWebLogic接続フィルタ実装weblogic.security.net.ConnectionFilterImplのみを使用することもできます。

このインタフェースでは、接続フィルタ処理を実装するために使用する2つのメソッドsetRules()checkRules()が定義されています。ConnectionFilterインタフェースと共にこのインタフェースを実装すれば、クライアント接続を制限するフィルタ処理ルールを、管理コンソールを使って入力することができます。


注意:

管理コンソールで接続フィルタ処理ルールを入力および編集するためには、ConnectionFilterRulesListenerインタフェースを実装する必要があります。このインタフェースを実装しない場合は、フラット・ファイルなどの他の方法を使用する必要があります。

接続フィルタのクラス

接続フィルタの実装用に、2つのweblogic.security.netクラスが提供されます。

ConnectionFilterImplクラス

このクラスは、ConnectionFilterおよびConnectionFilterRulesListenerインタフェースのWebLogic接続フィルタ実装です。いったん管理コンソールを使って構成されると、この接続フィルタはデフォルトですべての着信接続を受け入れ、また、サーバーが現在の接続フィルタを取得できるようにする静的なファクトリ・メソッドを提供します。この接続でアクセスを拒否するには、管理コンソールで接続フィルタ・ルールを入力するだけです。

このクラスは、WebLogic Server製品の一部として提供されます。このクラスを構成して使用するには、「WebLogic接続フィルタの構成」を参照してください。

ConnectionEventクラス

これは、すべてのイベント状態オブジェクトが派生する元のクラスです。すべてのイベントは、そのオブジェクト、つまり特定のイベントが最初に発生したオブジェクトであると論理的に見なされるソースを基準に作成されます。新しいConnectionEventインスタンスを作成するには、アプリケーションでこのクラスが提供するメソッド(getLocalAddress()getLocalPort()getRemoteAddress()getRemotePort()、およびhashcode())を使用します。

接続フィルタ・ルールの作成ガイドライン

この節では、接続フィルタ・ルールの記述方法と評価方法について説明します。接続ルールが指定されていない場合は、すべての接続が受け入れられます。

接続フィルタ・ルールは、接続フィルタ処理の実装方法に応じて、フラット・ファイルで記述したり、管理コンソールで直接入力したりできます。

以下の節では、接続フィルタ・ルールを記述するために必要な情報とガイドラインを説明しています。

接続フィルタ・ルールの構文

接続フィルタ・ルールの構文は以下のとおりです。

  • 各ルールは、1行で記述する必要があります。

  • ルールのトークンはスペースで区切る必要があります。

  • シャープ記号(#)はコメント文字。シャープ記号から行末までの記述は無視されます。

  • ルールの前後のホワイトスペースは無視されます。

  • ホワイトスペースまたはコメントだけの行はスキップされます。

フィルタ・ルールの形式は、フィルタ・ルールを入力するフィルタ・ファイルを使用するか、管理コンソールでフィルタ・ルールを入力するかによって異なります。

  • 管理コンソールでフィルタ・ルールを入力する場合、次の形式で入力します。

    targetAddress localAddress localPort action protocols
    
  • フィルタ・ファイルでルールを指定する場合、次の形式で入力します。

    targetAddress action protocols 
    
    • targetAddressでは、フィルタ処理を行うシステムを1つ以上指定します。

    • localAddressでは、WebLogic Serverインスタンスのホスト・アドレスを定義します。アスタリスク(*)を指定すると、すべてのローカルIPアドレスが返されます。

    • localPortでは、WebLogic Serverインスタンスがリスニングしているポートを定義します。アスタリスク(*)を指定すると、サーバーで利用可能なすべてのポートが返されます。

    • actionでは、実行するアクションを指定します。この値は、allowまたはdenyでなければなりません。

    • protocolsは、一致するプロトコル名のリスト。httphttpst3t3sldapldapsiiopiiops、およびcomといったプロトコルを指定できます。(giopgiops、およびdcomプロトコル名もサポートされていますが、リリース9.0以降、その使用は非推奨です。同等の機能を持つiiopiiops、およびcomプロトコル名を使用する必要があります。)


      注意:

      SecurityConfigurationMBeanには、以前の接続フィルタとの互換性を維持するためのCompatibilityConnectionFiltersEnabled属性があります。

    • プロトコルを定義しないと、すべてのプロトコルがルールに一致します。

接続フィルタ・ルールの種類

2種類のフィルタ・ルールが認識されます。

  • ファスト・ルール

    ファスト・ルールは、ホスト名またはネットマスク(オプション)を含むIPアドレスに適用されます。ホスト名が複数のIPアドレスに対応する場合は、複数のルール(順序は不定)が生成されます。ネットマスクは、数値またはドットで区切った4つの値の形式で指定できます。例:

    dialup-555-1212.pa.example.net 127.0.0.1 7001 deny t3 t3s #http(s) OK
    192.168.81.0/255.255.254.0   127.0.0.1 8001 allow   #23-bit netmask
    192.168.0.0/16   127.0.0.1 8002 deny   #like /255.255.0.0 
    

    ファスト・ルールに対してホスト名を指定すると、WebLogic Serverインスタンスの起動時に1回だけルックアップされます。この方法は、接続時のオーバーヘッドの大幅な削減には有効ですが、ホスト名とアドレスの対応について古い情報をフィルタが取得する可能性があります。数値のIPアドレスを使用することをお薦めします。

  • スロー・ルール

    スロー・ルールは、ドメイン名の一部に適用されます。一致検査を実行するにはクライアント側で接続時のDNSルックアップが必要なので、スロー・ルールはファスト・ルールよりかなり遅くなる場合があります。また、スロー・ルールはDNSスプーフィング攻撃の対象になる可能性があります。スロー・ルールの指定方法は次のとおりです。

    *.script-kiddiez.org 127.0.0.1 7001 deny 
    

    アスタリスクは、パターンの先頭に対してのみ使用できます。ルールの他の位置でアスタリスクを使用すると、パターンの一部として扱われます。アスタリスクはドメイン名の一部として認められていないので、このようなパターンはドメイン名と一致しなくなります。

接続フィルタ・ルールの評価方法

クライアントがWebLogic Serverに接続すると、記述されている順序でルールが評価されます。一致する最初のルールにより、接続の処理方法が決まります。一致するルールがない場合には、接続は許可されます。

サーバーの保護をさらに厳しくし、特定のアドレスからの接続だけを許可するには、最後のルールを次のように指定します。

0.0.0.0/0  *  *  deny

最後のルールをこのように指定すると、それまでのルールで許可されている接続だけが認められて、他の接続はすべて拒否されます。たとえば次のルールを指定したとします。

<Remote IP Address> * * allow https
0.0.0.0/0  *  *  deny

Remote IP Addressを持つマシンだけが、接続フィルタを実行するWebLogic Serverのインスタンスへのアクセスを許可されます。その他のシステムはすべて、アクセスを拒否されます。


注意:

デフォルトの接続フィルタの実装では、ターゲット・アドレス0 (0.0.0.0/0)を「ルールはすべてのIPアドレスに適用される」という意味であると解釈します。設計上、デフォルトのフィルタはポートやローカル・アドレスを評価せず、アクションのみを評価します。デフォルトのフィルタを使用する場合の制限を明確に指定するには、ルールを変更します。

この他に、カスタム接続フィルタを実装する方法もあります。


WebLogic接続フィルタの構成

WebLogic Serverには、そのまま使用できるネットワーク接続フィルタが用意されています。このフィルタは、管理コンソールで構成するだけで使用できます。接続フィルタの構成方法の詳細は、『Oracle WebLogic Serverの保護』を参照してください。

カスタム接続フィルタの開発

WebLogic接続フィルタを使用せず、独自に開発する場合は、weblogic.security.netパッケージで提供されているアプリケーション・プログラミング・インタフェース(API)を使用できます。このAPIについては、「ネットワーク接続フィルタAPI」を参照してください。

WebLogic Serverでカスタム接続フィルタを開発するには、次の手順を実行します。

  1. ConnectionFilterインタフェースを実装するクラスを記述します(最低限の要件)。

    または、管理コンソールを使用して接続フィルタ処理ルールを入力したり、既存のフィルタ処理ルールを直に変更したりする場合は、ConnectionFilterインタフェースおよびConnectionFilterRulesListenerインタフェースを実装するクラスを記述します。

  2. ConnectionFilterインタフェースのみを実装してステップ1の最低要件を満たす場合、接続フィルタ処理ルールをフラット・ファイルに入力し、ConnectionFilterインタフェースを実装するクラスにそのファイルの場所を定義します。その後、管理コンソールを使用してWebLogic Serverにクラスを構成します。管理コンソールでクラスを構成する手順については、『Oracle WebLogic Serverの保護』の接続フィルタの使用に関する項を参照してください。

  3. ステップ1で2つのインタフェースを定義した場合、管理コンソールを使用してクラスを構成し、接続フィルタ処理ルールを入力します。管理コンソールでクラスを構成する手順については、『Oracle WebLogic Serverの保護』の接続フィルタの使用に関する項を参照してください。

JavaクライアントまたはWebブラウザ・クライアントがWebLogic Serverインスタンスへの接続を試行する際に接続フィルタ処理を実装すると、WebLogic ServerインスタンスはConnectionEventオブジェクトを作成して、接続フィルタ・クラスのaccept()メソッドに渡します。接続フィルタ・クラスは、ConnectionEventオブジェクトを調べて、接続を受け付ける場合はオブジェクトを返し、接続を拒否する場合はFilterExceptionをスローします。

実装されたクラス(ConnectionFilterインタフェースのみを実装するクラスと、ConnectionFilterインタフェースおよびConnectionFilterRulesListenerインタフェースを実装するクラス)は両方とも、クライアント接続に関する情報を収集後に、accept()メソッドを呼び出す必要があります。ただし、ConnectionFilterインタフェースだけを実装している場合、収集される情報にはリモートIPアドレスと接続プロトコル(httphttpst3t3sldapldapsiiopiiops、またはcom)が含まれます。どちらのインタフェースも実装している場合、収集される情報には、リモートIPアドレス、リモート・ポート番号、ローカル・ポート番号、および接続プロトコルが含まれます。